sql >> Base de Datos >  >> RDS >> Mysql

Modelado de base de datos para una entidad débil

Una entidad no es débil porque no pueda existir de forma independiente, sino porque no puede ser identificada independientemente. Por lo tanto, una relación que "conduce" a una entidad débil se denomina relación "identificadora". En la práctica, esto significa que la clave principal principal se migra a (generalmente proper ) subconjunto de PK del niño (el término "entidad débil" generalmente se define en relación con las claves principales, aunque en teoría podría aplicarse a cualquier clave).

Es perfectamente legítimo tener una entidad que no puede existir de forma independiente, pero que se puede identificar de forma independiente, en otras palabras, que está en una relación no identificable con un no NULL.

Tienes que preguntar:can historyLineID ser único solo , o en combinación con orderID ? Sospecho que este último es el caso, lo que la convertiría en una entidad débil.

Lo que nos ha mostrado no es una entidad débil:la PK de los padres no se migra a la PK del niño.

Básicamente, tiene dos opciones:

  • orderHistory tiene un PK compuesto:{orderID, historyLineID} , donde orderID es FK. Por cierto, este PK podría considerarse "natural":

  • orderHistory tiene un PK sustituto:{orderHistoryID} , mientras que orderID está fuera del PK. Aún necesitaría tener una clave alternativa {orderID, historyLineID} aunque:

Sí, esta es la primera opción descrita anteriormente. A menos que tenga relaciones secundarias en orderHistory en sí mismo, esta es también la mejor solución. Si orderHistory tiene hijos, entonces esta puede ser o no la mejor solución, dependiendo de varios factores.

Esto no es uno u otro. Un campo puede ser tanto FK como parte de una clave (principal o alternativa), como se muestra arriba.

No podrá llegar a 3NF a menos que especifique sus claves correctamente, y no podrá hacerlo sin considerar qué entidad se puede identificar de forma independiente y cuál no.