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

EF4.1:Möglich, eine Null-oder-Eins-zu-Null-oder-Eins-Beziehung (0..1 zu 0..1) zu haben?

Nein, es ist nicht möglich und ich bezweifle, dass es in SQL Server funktioniert. Die Datenbankbeziehung erfordert, dass ein Ende abhängig wird. Das bedeutet, dass es auf den Primärschlüssel (PK) eines Hauptendes verweist – wir nennen diesen Fremdschlüssel (FK). Wenn wir von einer Eins-zu-eins-Beziehung sprechen, muss der FK als eindeutig markiert werden, damit nur ein Datensatz in der abhängigen Tabelle auf einen bestimmten Datensatz aus der Haupttabelle verweisen kann. Die einzig gültige Beziehung in diesem Fall ist 0..1 - 1, wobei der Prinzipal ohne abhängiges Element existieren kann, das abhängige Element jedoch nur existieren kann, wenn es sich auf einen bestehenden Prinzipal bezieht, da sein FK-Wert auf den PK-Wert des Prinzipals gesetzt werden muss. Theoretisch kann FK nullable sein, aber es hängt davon ab, wie die Datenbank eindeutige Einschränkungen implementiert. Wenn die Datenbank null als weiteren eindeutigen Wert zählt, kann FK nur bei einem abhängigen Datensatz auf null gesetzt werden (ich denke, dies ist ein Fall von SQL Server).

In EF ist dies noch komplizierter, da EF keine eindeutigen Einschränkungen unterstützt und Sie daher eine Eins-zu-Eins-Beziehung nur dann aufbauen können, wenn FK in der abhängigen Entität auch ihr PK ist (=keine Möglichkeit, es auf null zu setzen). Wenn Sie FK nicht auf null setzen können, können Sie es nicht nullfähig machen und aufgrund dieser Hauptentität muss es existieren, sonst wird die referentielle Integrität einen Fehler auslösen.

Die beste Lösung für Sie ist Request als Hauptinstanz und Result als abhängig. Anfrage muss zuerst erstellt werden und solange in der Datenbank gehalten werden wie das Result . Result muss denselben PK-Wert haben (die Spalte kann nicht automatisch inkrementiert werden) wie die entsprechende Request (und PK muss FK für Request sein ).