Relacionar múltiples tablas en Mysql

  • Autor Autor franxiscu
  • Fecha de inicio Fecha de inicio
F

franxiscu

Curioso
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola compis,

Tengo una duda sobre como relacionar varias tablas. Explico un poco lo que quiero relacionar:

Tabla Usuario: nombre_usuario(clave primaria)
Tabla Equipo: nombre_equipo (clave primaria), nombre_usuario (clave foránea que hace referencia a nombre_usuario de la tabla Usuario)
Con esta relación, consigo que un usuario pueda controlar más de un equipo pero que ese equipo solo lo puede controlar ese usuario.

Con lo cual tendríamos la siguiente relación: Usuario 1 ---------- 0..* Equipos

De esta manera unos posibles registros serían:

user1, equipo1 user2
equipo2 user3, equipo3

Tabla Grupo: nombre_grupo (clave primaria)
Mi problema viene al querer que en cada grupo puedan haber diferentes equipos, pero que estos equipos sean de distinto usuario (es decir, un usuario no puede competir con dos equipos suyos en el mismo grupo).

De esta manera, se crearía una relación ternaria 1:1:1 entre las tablas Usuario, Equipos, Grupos (podríamos llamarle Equipos_grupos) donde la clave primaria estaría formada por los atributos que forman la clave primaria de dos tablas de la relación cualesquiera (por ejemplo, nombre_usuario y nombre_grupo).

De esta manera unos posibles registros de Equipos_grupos serían:

user1, grupo1, equipo1
user2, grupo1, equipo2

El problema viene es que creo que además tendría que crear una clave foránea compuesta entre nombre_usuario y nombre_equipo ya que si no, se podría dar este caso erróneo:

user1, grupo1, equipo1
user3, grupo1, equipo1

Como se puede comprobar el último registro cumple las condiciones de clave primaria (ya que user3, grupo1 es diferente que el primer registro) pero vemos que la combinación user3, equipo1 no existe en la primera relación que hemos visto (ya que equipo1 es de user1). Con lo cual, el registro lo podría añadir a la tabla cuando realmente no debería dejarlo añadir. Lógicamente, otra clave foránea sería el nombre_grupo que hiciera referencia a nombre_grupo de la tabla Grupo.

Esto podría controlarlo mediante la declaración de esta relación, con las claves foráneas, etc. en Mysql?

Un saludo y espero que me podáis ayudar.

Muchas gracias.
 
Atrás
Arriba