Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Problema de Relacionando Tablas...

Estas en el tema de Problema de Relacionando Tablas... en el foro de Mysql en Foros del Web. Necesito un poco de ayuda con esto, ya que aun no puedo encontrar una solucion que sea elegante Empeze teniendo estas tablas y relacionandolas... (Uso ...
  #1 (permalink)  
Antiguo 14/07/2010, 00:19
Avatar de RadhertZ  
Fecha de Ingreso: julio-2010
Mensajes: 3
Antigüedad: 13 años, 9 meses
Puntos: 0
Problema de Relacionando Tablas...

Necesito un poco de ayuda con esto, ya que aun no puedo encontrar una solucion que sea elegante

Empeze teniendo estas tablas y relacionandolas...
(Uso InnoDB)


Tabla Servicios
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| id_servicio | int(255) | NO | PRI | NULL | auto_increment |
| id_usuario | int(255) | NO | MUL | NULL | |
| id_gameserver | int(255) | NO | MUL | NULL | |
| id_pago | int(255) | NO | MUL | NULL | |
| fechacreacion | varchar(255) | NO | | NULL | |
| fechainicio | varchar(255) | NO | | NULL | |
| fechatermino | varchar(255) | NO | | NULL | |
+---------------+--------------+------+-----+---------+----------------+

Tabla GameServers
+---------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------+------+-----+---------+----------------+
| id_gameserver | int(255) | NO | PRI | NULL | auto_increment |
| id_juego | int(255) | NO | MUL | NULL | |
| slots | int(255) | NO | | NULL | |
| tiposervidor | enum('0','1') | NO | | NULL | |
| hostname | varchar(255) | NO | | NULL | |
| rcon | varchar(255) | NO | | NULL | |
| password | varchar(255) | NO | | NULL | |
| addons | enum('0','1') | NO | | NULL | |
| id_server | int(255) | NO | MUL | NULL | |
| puerto | int(255) | NO | | NULL | |
| estado | int(1) | NO | | NULL | |
+---------------+---------------+------+-----+---------+----------------+


Tabla Pagos
+----------------+-------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-------------------+------+-----+---------+----------------+
| id_pago | int(255) | NO | PRI | NULL | auto_increment |
| cantidad | varchar(255) | NO | | NULL | |
| id_comprobante | varchar(255) | NO | | NULL | |
| fechadepago | varchar(255) | NO | | NULL | |
| estado | enum('0','1','2') | NO | | NULL | |
+----------------+-------------------+------+-----+---------+----------------+



Bueno en la tabla servicios necesito los id_gameserver de la tabla gameservers y el id_pago de la tabla pagos...

Lo primero que realice fue relacionarlos
dejando en cada tabla como primary key los id (id_gameserver y id_pagos)
y en la tabla servicios dejarlos como Index, luego los fui a relacionar dejandolos con ON DELETE CASCADE ON UPDATE CASCADE...


Realizaba los siguientes pasos...
Insertaba fila en GameServers obtenia el ID creado.
Insertaba fila en Pagos obtenia el ID creado.
Insertaba fila en Servicios con los IDs obtenidos de las otras tablas.

Bueno todo pense que andaba bien y estaban bien relacionados...
Pero me di cuenta que al eliminar la fila en servicio, las filas en las otras tablas seguian existiendo...

Por lo que cree un nuevo campo llamada id_servicio en las tablas GameServers y Pagos y las relacione con el campo id_servicio de la tabla de servicios..
Pero con esto ya no puedo insertar primero las filas en las tablas gameservers ni en pagos ya que me piden que exista la fila id_servicio en la tabla servicios...


Decido cambiar los pasos insertando primero en servicios por lo tanto no puedo mantener la relacion con id_gameservers ni con id_pago porque no se han insertado...

Bueno aun asi lo pruebo sin tener relacionado esos campos y claro funciona perfectamente ahora eliminando la fila en servicios se borra en pagos y en gameservers pero no tengo referencia en la tabla servicios del id_gameserver y el id_pago...


quedando asi...



TABLA SERVICIOS


TABLA PAGOS


TABLA GAMESERVERS





Me cuesta un poco plantear esto ya que no llevo mucho tiempo en esto...
¿Hay alguna forma de mostrar las tablas con sus relaciones?, porque lo unico que conosco es describe nombretabla;



Espero que me puedan ayudar, se los agradeceria un monton...


SALUDOS
FERNANDO FIGUEROA

Última edición por RadhertZ; 14/07/2010 a las 00:35 Razón: Agregar Imagenes
  #2 (permalink)  
Antiguo 14/07/2010, 05:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema de Relacionando Tablas...

Estás creando relaciones circulares (de allí el problema de las inserciones), y eso suele ser evidencia de entidades faltantes o de diseño de relaciones incorrecto.

Por tu descripción, diría que estás modelando incorrectamente las relaciones de las tablas, asignado IDs a entidades a las que difícilmente pertenezcan.

Creo que tienes que volver al comienzo y primero definir qué entidades realmente existen y cómo se relacionan, antes de poner a crear FK que muy probablemente no deban estar allí.

¿Podrías describir exactamente qué representan las entidades Servicio, Pago, GameServer, Slot y cómo se relacionan con Usuario?
Creo que el problema se resolverá fácilmente si puedes definir bien la relación entre ellas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: foreignkey, referencias, relaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:39.