Ver Mensaje Individual
  #4 (permalink)  
Antiguo 27/07/2011, 05:24
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Problemas creando relación M:N

Cita:
la tabla Categoría no la he añadido pegándola aquí, porque no quería incluirla para dejarlo más claro,

El problema es que el script que pusiste creaba una FK que apuntaba a la tabla CATEGORIAS, pero como no estaba, fallaba a la hora de crear la tabla.
Cuando posteas un script así te conviene poner todas las tablas que estén relacionadas, aunque no sean parte de la solución o del problema, o bien eliminar de lo que posteas todas las FK cuya tabla no estés posteando.

Cita:
Para crear una relación M:N entre dos relaciones, equipo-jugador en este caso, debo seguir los siguientes pasos:
1.- Creo una tabla Equipo_Jugadores en la que incluyo como claves primarias idjugador, idequipo.
2.- Defino dos claves foráneas, una para cada tabla y para cada id. idjugador con la tabla Jugadores y idequipo con la tabla Equipos.
3.- Ya está.
Te voy a dar un camino más fácil.
Como por definición del modelo, toda relación N:N genera una tabla relacional, todas las CASE tools del mercado te crean una tabla física cuando vinculas dos tablas a través de un conector N:N. Esto significa que, en el caso de MySQL Workbench, lo que debes hacer es:
1) Crea la tabla JUGADOR con su PK.
2) Crea la tabla EQUIPO con su PK.
3) Selecciona el conector de relación N:N y haz un click en cada tabla y verás que instantáneamente el Workbech crea una tabla nueva donde las dos PK aparecen componiendo la PK de la nueva tabla.
A partir de allí puedes agregar todos los atributos que se necesiten en esa relación.

Como podrás apreciar, las cosas ya están solucionadas... simplemente debes aprender a aprovecharlas.

Tips finales:

1) Cuando uses columnas de tipo TINYINT, SMALLINT, MEDIUMINT, INT o BIGINT, y no vayas a usar valores negativos decláralas UNSIGNED.
Al usarlas sin el UNSIGNED, la mitad del rango de representación queda perdido porque está reservado a los números negativos. Así, por ejemplo, un TINYINT va de -128 a +127, mientras que el UNSIGNED va de 0 a 255.
La idea es que aproveches el rango, y que recuerdes que no existen los ID negativos. De hecho, el auto_increment no genera valores negativos.
2) Trata de no usar "ID" como nombre de identificador de las PK de las tablas. A la larga genera confusiones en las consultas con JOIN.
Lo que es habitual es usar un prefijo con el nombre de la tabla, para poder recordarlo más fácilmente (tiene otras ventajas), tal como jugador_id, torneo_id, etc. Si te fijas, Workbench crea automáticamente la primera columna con el "id" como prefijo más el nombre de la tabla, cuando creas las tablas en el diagrama directamente.
Es una práctica general de los desarrolladores.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)