MySQL | Relación ternaria

zildjian

Hola MVeros. Estoy intentando hacer una relación ternaria entre 3 tablas con el Workbench de MySQL. Ahora bien, sólo me deja crear la relación n:m entre 2, de tal manera que se crea esa especie de tabla que las relaciona. Ahora bien, para hacer una relación ternaria, basta con crear otra relación n:m entre la nueva tabla y la que relaciona las otras 2 primeras?

Saludos.

r2d2rigo

Algo tienes que estar haciendo mal. Puedes asociar las tablas entre si en una 4ª tabla que haga referencia a la primary key de las otras 3, y que a su vez ese conjunto de 3 valores sea la clave primaria.

zildjian

¿Pero cómo? En los tipos de relaciones no me sale n:m:p :(

LOc0

Las relaciones ternarias, por lo que recuerdo de clase, tienen más historia (tp mucha) porque la cardinalidad depende del "sentido" al leerla. No sé cómo la habrás modelado, pero si es una M:N:R yo haría una tabla con clave primaria triple como dice #2

Salu2 ;)

NeB1

#3 creala tu a pelo, no hace falta que tengas un boton exclusivo en el workbench

Puni

igual que si haces una relacion binaria y es muchos a muchos te va a salir una tabla nueva con clave primaria la unión de las claves de la relación, si la relación de la ternaria es muchos a muchos a muchos te saldrá otra tabla con clave la unión de las 3 entidades

de todas formas las relaciones ternarias son bastante raras, como ya han dicho tienes q "leer la relación desde las 3 esquinas" y cerciorarte de que para cada elemento de una entidad hay una pareja de las otras entidades que cumple la relación que estés poniendo (1...n, n...1, n...n etc)

yo creo que es mucho más típico tener agregaciones, que es tratar una relación como si fuera una entidad, entonces tienes la típica relación binaria de la que te sale una tabla y con esa tabla añades otra relación a otra entidad.

MaKi

Sencillamente no puedes hacer relaciones ternarias. Tu modelo es imposible de normalizar. Yo recuerdo ejercicios de la uni de normalizar la base de datos, para ello debes hacer entre otras cosas asegurarte que todas las relaciones sean binarias, tengan clave primaria, etc ..., por eso el workbench no permite hacer las cosas mal.

Por ejemplo para modelar n:m:p correctamente, es decir, un varios a varios a varios. tendrías que hacer esto:

Tienes 3 entidades: a, b y c
Creas 3 relaciones binarias: a-b, a-c y b-c
Las 3 tablas binarias tendrán 2 campos cada una, con el valor de la clave primaria de las 2 tablas que relaciona.

Ya esta con ese modelado puedes hacer inner join, outer join entre las 6 tablas ... y tendrás una tabla con los resultados unidos todo en 1.

Edit:
Evidentemente una relación ternaria es más intuitiva y da más información y recuerdo que nuestro profesor nos decía que no las usáramos, el motivo tendría que mirar los apuntes pero sin acordarme ... Imagina que estas haciendo productos cruzados con muchas tablas, en el momento que necesites usar la relación que hay entre 2 de las 3 entidades, ya necesariamente debes cruzar las 3 y por tanto es menos eficiente al cruzar tablas innecesarias. Al tener 3 relaciones binarias, seleccionas las que necesites. Recuerdo tambien que había problemas al implementar la herencia en el modelo E-R.

Usuarios habituales

  • MaKi
  • Puni
  • NeB1
  • LOc0
  • zildjian
  • r2d2rigo