Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So erstellen Sie eine echte Eins-zu-Eins-Beziehung in SQL Server

Ich bin mir ziemlich sicher, dass es in SQL Server technisch unmöglich ist, eine echte 1-zu-1-Beziehung zu haben, da dies bedeuten würde, dass Sie haben würden beide Datensätze gleichzeitig in beide Tabellen einzufügen (andernfalls erhalten Sie beim Einfügen einen Einschränkungsfehler), wobei beide Tabellen eine Fremdschlüsselbeziehung zueinander haben.

Davon abgesehen ist Ihr mit einem Fremdschlüssel beschriebenes Datenbankdesign eine 1-zu-0..1-Beziehung. Es ist keine Einschränkung möglich, die einen Datensatz in Tabelle B erfordern würde. Sie können eine Pseudobeziehung mit einem Trigger haben, der den Datensatz in tableB erstellt.

Es gibt also ein paar Pseudolösungen

Speichern Sie zunächst alle Daten in einer einzigen Tabelle. Dann haben Sie keine Probleme in EF.

Oder zweitens muss Ihre Entität intelligent genug sein, um eine Einfügung nicht zuzulassen, es sei denn, sie hat einen zugehörigen Datensatz.

Oder drittens, und höchstwahrscheinlich, haben Sie ein Problem, das Sie zu lösen versuchen, und Sie fragen uns, warum Ihre Lösung nicht funktioniert, anstatt das eigentliche Problem, das Sie zu lösen versuchen (ein XY-Problem).

AKTUALISIEREN

Um es in REALITY zu erklären wie 1-zu-1-Beziehungen nicht funktionieren, verwende ich die Analogie des Henne-Ei-Dilemmas. Ich beabsichtige nicht, dieses Dilemma zu lösen, aber wenn Sie eine Einschränkung hätten, die besagt, dass die Beziehung des Huhns vorhanden sein muss, um ein Ei zur Eiertabelle hinzuzufügen, und das Huhn in der Tabelle vorhanden sein muss, dann Sie konnten der Eiertabelle kein Ei hinzufügen. Das Gegenteil ist auch wahr. Sie können kein Huhn zur Tabelle „Huhn“ hinzufügen, ohne dass sowohl die Beziehung zum Ei als auch das Ei in der Tabelle „Ei“ vorhanden sind. Somit können in einer Datenbank nicht alle Aufzeichnungen gemacht werden, ohne gegen eine der Regeln/Einschränkungen zu verstoßen.

Nomenklatur der Datenbank einer Eins-zu-Eins-Beziehung ist irreführend. Alle Beziehungen, die ich gesehen habe (daher meine Erfahrung), wären aussagekräftiger als Eins-zu-(Null oder Eins)-Beziehungen.