Relación ternaria: ¿cuál es la diferencia entre tener una sola tabla y tener varias tablas?

8

Considere la siguiente relación ternaria: relación ternaria

Suponga que todas las entidades tienen solo dos atributos (PK y Nombre).


Aquí están las tablas que obtuve (5 tablas):

Sector
-------------------------
ID_Sector    SectorName
-------------------------

Product
-------------------------
ID_Product    ProductName
-------------------------

Company
--------------------------------------
ID_Company    ID_Sector    CompanyName
--------------------------------------

Relationship 1 (R1)
-------------------------
ID_Sector    ID_Product
-------------------------

Relationship 2 (R2)
-------------------------
ID_Company    ID_Product
-------------------------

Pregunta:

¿Es una buena solución para esa relación ternaria? ¿Cuál es la diferencia entre tener 2 tablas (R1 y R2) en lugar de la siguiente tabla única:

Ternary table
-------------------------------------
ID_Sector    ID_Company    ID_Product    
-------------------------------------

Para mí, parece que tener 2 tablas separadas para cada relación (R1 y R2) es una mejor solución en comparación con tener una sola tabla, pero no sé si eso es realmente cierto o si es una buena práctica.

siente esto
fuente

Respuestas:

6

Las dos soluciones modelan reglas diferentes. Con la tabla ternaria, usted dice que una empresa solo puede tener ciertos productos en un sector en particular. En un sector diferente habrá un conjunto diferente de productos, aunque los dos conjuntos pueden superponerse, por supuesto.

Con las tablas binarias usted declara que el sector no tiene influencia sobre los productos con los que se relaciona una empresa. Del mismo modo, la empresa no tiene influencia sobre qué productos están en qué sector.

La elección entre estas alternativas estará determinada por las reglas de su negocio. No puede responderse mediante una discusión académica abstracta. He encontrado que es mejor nombrar la relación entre las entidades. Decir que la compañía está relacionada con el producto, por ejemplo, es interesante; decir por qué la empresa está relacionada con el producto es aún mejor. "La compañía compra el producto" es una información diferente a "la compañía hace el producto" o "la compañía no tiene autorización de seguridad para usar el producto". Al hacer esto, a menudo descubro nuevas relaciones, atributos y tipos de entidad. ¡Puede terminar necesitando tanto las tablas binarias como las ternarias!

Editar : para las reglas

  1. una compañía produce muchos productos / cada producto es producido por exactamente una compañía
  2. una empresa informó exactamente en un sector / cada sector informa sobre muchas empresas
  3. Un producto se vende en exactamente un sector / cada sector tiene muchos productos disponibles.

Tendría estos tipos de entidad

Sector - ID del sector

Company - CompanyID, SectorID

Producto - ProductID, CompanyID

Si alguna de sus reglas es de muchos a muchos, necesitará las tablas de asociación binarias.

Por otro lado, los nombres de las relaciones "tiene", "pertenece" y "es un" a menudo ocultan más de lo que iluminan. Si encuentra sus BA utilizando estos, pídales que piensen de nuevo.

Michael Green
fuente
Supongamos que las reglas de negocio son: 1) Las compañías producen productos; 2) Las empresas pertenecen a un sector (ejemplos de sector: maquinaria, alimentos, software); 3) Los productos pertenecen a sectores. Intenté ser conciso y pagué el precio de ocultar información importante. ¡Gracias!
feelthhis
Mi comentario plantea otra pregunta: ¿Qué reglas comerciales tiene el modelo ERD anterior? ¿Hay alguna manera de hacer que el ERD sea muy preciso con respecto a las reglas comerciales? ¿La tabla ternaria representa con precisión el ERD anterior? Si es así, entonces el ERD anterior es el modelo incorrecto con respecto a las 3 reglas comerciales establecidas, ¿verdad?
siente este
¿Qué reglas de negocio tiene el modelo ERD anterior? La tabla ternaria significaría que hay una cosa que tiene ProductID, SectorID y CustomerID como la clave necesaria y suficiente. Algo así como "GE (empresa) financia (Producto) el 90% (atributo) de todos los motores aerodinámicos (sector)", mientras que "Goldman financia el 5% de los motores aerodinámicos" y "GE financia el 3% de los molinos de viento".
Michael Green
@feelthhis - "¿Hay alguna manera de hacer que el ERD sea muy preciso con respecto a las reglas comerciales": sí! Eso es lo que hacen los ERD. Editaré mi respuesta. "¿La tabla ternaria representa con precisión el ERD anterior": creo que te refieres a "reglas anteriores". No. Un producto está hecho exactamente por una compañía. Una empresa pertenece exactamente a un sector. Al conocer ProductID, uno puede identificar de manera única al cliente y al sector, y estos IDss serían redundantes en la tabla ternaria. Por lo tanto, no se normaliza de acuerdo con sus 3 reglas. "Si es así ...": estoy de acuerdo.
Michael Green
Ternary Table: a company may...El uso de la notación (IDSector, IDCompany, IDProduct), significa que las tuplas (1, 1, 1) y (1, 1, 2) están permitidas ("c1" produce "p1" y "p2" en "s1" ); y que las tuplas (1, 1, 1) y (2, 1, 2) no están permitidas ("c1" produce "p1" en "s1" y produce "p2" en "s2")? ¿Por qué? ¿No debería la tabla ternaria permitir una posible tupla (IDSector, IDCompany, IDProduct)? Binary Tables: sector has...; company has...Pensé que la tabla ternaria era equivalente a los binarios, si la tabla ternaria permite alguna tupla (IDSector, IDCompany, IDProduct).
siente este