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}
, wobeiorderID
ist FK. Übrigens könnte diese PK als "natürlich" angesehen werden: -
orderHistory
hat einen Ersatz-PK:{orderHistoryID}
, währendorderID
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.