Der sinnvollste Zeitpunkt, dies zu nutzen, wäre, wenn es zwei getrennte Konzepte gäbe, die sich immer nur auf diese Weise beziehen würden. Zum Beispiel kann ein Auto nur einen aktuellen Fahrer haben, und der Fahrer kann jeweils nur ein Auto fahren - die Beziehung zwischen den Konzepten von Auto und Fahrer wäre also 1 zu 1. Ich akzeptiere, dass dies ein erfundenes Beispiel ist, um das zu demonstrieren Punkt.
Ein weiterer Grund ist, dass Sie ein Konzept auf unterschiedliche Weise spezialisieren möchten. Wenn Sie eine Personentabelle haben und das Konzept verschiedener Personentypen hinzufügen möchten, z. B. Mitarbeiter, Kunde, Aktionär, benötigt jede dieser Personen unterschiedliche Datensätze. Die Daten, die zwischen ihnen ähnlich sind, befinden sich in der Personentabelle, die Fachinformationen befinden sich in den spezifischen Tabellen für Kunde, Aktionär, Mitarbeiter.
Einige Datenbank-Engines haben Schwierigkeiten, einer sehr großen Tabelle (viele Zeilen) effizient eine neue Spalte hinzuzufügen, und ich habe Erweiterungstabellen gesehen, die die neue Spalte enthalten, anstatt die neue Spalte zur ursprünglichen Tabelle hinzuzufügen. Dies ist eine der verdächtigeren Verwendungen zusätzlicher Tabellen.
Sie können auch entscheiden, die Daten für ein einzelnes Konzept aus Leistungs- oder Lesbarkeitsproblemen auf zwei verschiedene Tabellen aufzuteilen. Dies ist jedoch ein ziemlich spezieller Fall, wenn Sie bei Null anfangen. Diese Probleme werden sich später zeigen.
Erstens denke ich, dass es darum geht, zu modellieren und zu definieren, was aus einer separaten Einheit besteht. Angenommen, Sie haben
customers
nur eine einzigeaddress
. Natürlich könnten Sie alles in einer einzigen Tabelle implementierencustomer
, aber wenn Sie ihm in Zukunft erlauben, zwei oder mehr Adressen zu haben, müssen Sie dies umgestalten (kein Problem, aber eine bewusste Entscheidung treffen).Ich kann mir auch einen interessanten Fall vorstellen, der in anderen Antworten nicht erwähnt wurde und bei dem das Aufteilen der Tabelle nützlich sein könnte:
Stellen Sie sich wieder vor, Sie haben jeweils
customers
eine einzelneaddress
, aber diesmal ist es optional, eine Adresse zu haben. Natürlich können Sie das als eine Reihe vonNULL
-able-Spalten implementieren, wie zZIP,state,street
. Angenommen, Sie haben eine Adresse, der Status ist nicht optional, die Postleitzahl jedoch. Wie modelliere ich das in einer einzigen Tabelle? Sie könnten eine Einschränkung für diecustomer
Tabelle verwenden, aber es ist viel einfacher, sie in eine andere Tabelle zu unterteilen und den Foreign_key NULLable zu machen. Auf diese Weise sagt Ihr Modell viel deutlicher, dass die Entitätaddress
optional ist und dass dasZIP
ein optionales Attribut dieser Entität ist.quelle
In meiner Programmierzeit bin ich nur in einer Situation darauf gestoßen. In diesem Fall besteht eine 1-zu-Viele- und eine 1-zu-1-Beziehung zwischen denselben 2 Entitäten ("Entität A" und "Entität B").
Wenn "Entität A" mehrere "Entität B" und "Entität B" nur 1 hat, hat "Entität A" und "Entität A" nur 1 aktuelle "Entität B" und "Entität B" hat nur 1 "Entität A".
Zum Beispiel kann ein Auto nur einen aktuellen Fahrer haben, und der Fahrer kann jeweils nur ein Auto fahren - die Beziehung zwischen den Konzepten von Auto und Fahrer wäre also 1 zu 1. - Ich habe dieses Beispiel aus der Antwort von @Steve Fenton entlehnt
Wo ein Fahrer mehrere Autos fahren kann, nur nicht gleichzeitig. Die Entitäten Auto und Fahrer sind also 1 zu viele oder viele zu viele. Wenn wir jedoch wissen müssen, wer der aktuelle Fahrer ist, brauchen wir auch die 1: 1-Beziehung.
quelle
Ein anderer Anwendungsfall kann sein, wenn die maximale Anzahl von Spalten in der Datenbanktabelle überschritten wird. Dann können Sie mit OneToOne einer anderen Tabelle beitreten
quelle