Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Datenbankmodellierung für eine schwache Entität

Eine Entität ist nicht schwach, weil sie nicht unabhängig existieren kann, sondern weil sie nicht identifiziert werden kann unabhängig. Daher wird eine Beziehung, die zu einer schwachen Entität „führt“, als „identifizierende“ Beziehung bezeichnet. In der Praxis bedeutet dies, dass der Primärschlüssel des übergeordneten Schlüssels in (normalerweise proper ) migriert wird ) Teilmenge der PK des Kindes (der Begriff "schwache Entität" wird normalerweise in Bezug auf Primärschlüssel definiert, obwohl er theoretisch für jeden Schlüssel gelten könnte).

Es ist völlig legitim, eine Entität zu haben, die nicht unabhängig existieren kann, aber unabhängig identifiziert werden kann – mit anderen Worten, die in einer nicht identifizierenden Beziehung zu einer Nicht-NULL steht.

Sie müssen fragen:can historyLineID allein einzigartig sein , oder in Kombination mit orderID ? Ich vermute, dass letzteres der Fall ist, was es zu einer schwachen Entität machen würde.

Was Sie uns gezeigt haben, ist keine schwache Entität – die PK des Elternteils wird nicht in die PK des Kindes migriert.

Sie haben im Wesentlichen zwei Möglichkeiten:

  • orderHistory hat einen zusammengesetzten PK:{orderID, historyLineID} , wobei orderID ist FK. Übrigens könnte diese PK als "natürlich" angesehen werden:

  • orderHistory hat einen Ersatz-PK:{orderHistoryID} , während orderID ist außerhalb der PK. Sie benötigen weiterhin einen alternativen Schlüssel {orderID, historyLineID} obwohl:

Ja, dies ist die erste oben beschriebene Option. Es sei denn, Sie haben untergeordnete Beziehungen in orderHistory selbst, das ist auch die beste Lösung. Wenn orderHistory Kinder hat, dann kann dies die beste Lösung sein oder auch nicht, abhängig von mehreren Faktoren.

Das ist kein Entweder-Oder. Ein Feld kann sowohl FK als auch Teil eines (primären oder alternativen) Schlüssels sein, wie oben gezeigt.

Sie können 3NF nicht erreichen, wenn Sie Ihre Schlüssel nicht korrekt angeben, und Sie können dies nicht tun, ohne zu berücksichtigen, welche Entität unabhängig identifiziert werden kann und welche nicht.