sql >> Database >  >> RDS >> Sqlserver

Hoe maak je een echte één-op-één relatie in SQL Server

Ik ben er vrij zeker van dat het technisch onmogelijk is in SQL Server om een ​​echte 1 op 1 relatie te hebben, aangezien dat zou betekenen dat je hebben om beide records tegelijkertijd in te voegen (anders krijgt u een beperkingsfout bij het invoegen), in beide tabellen, waarbij beide tabellen een refererende-sleutelrelatie met elkaar hebben.

Dat gezegd hebbende, uw database-ontwerp dat wordt beschreven met een externe sleutel, is een relatie van 1 op 0..1. Er is geen beperking mogelijk waarvoor een record in tabelB nodig is. U kunt een pseudo-relatie hebben met een trigger die het record in tabelB maakt.

Er zijn dus een paar pseudo-oplossingen

Sla eerst alle gegevens op in een enkele tabel. Dan heb je geen problemen met EF.

Of Ten tweede moet uw entiteit slim genoeg zijn om een ​​invoeging niet toe te staan, tenzij deze een bijbehorend record heeft.

Of ten derde, en hoogstwaarschijnlijk, heb je een probleem dat je probeert op te lossen, en je vraagt ​​ons waarom je oplossing niet werkt in plaats van het eigenlijke probleem dat je probeert op te lossen (een XY-probleem).

UPDATE

Uit te leggen in REALITY hoe 1 op 1 relaties niet werken, ik gebruik de analogie van het kip of het ei dilemma. Ik ben niet van plan dit dilemma op te lossen, maar als je een beperking zou hebben die zegt dat om een ​​ei aan de eiertafel toe te voegen, de relatie van de kip moet bestaan, en de kip moet in de tabel bestaan, dan je kon geen Egg toevoegen aan de Egg-tabel. Het tegenovergestelde is ook waar. Je kunt geen Kip toevoegen aan de Kippentabel zonder zowel de relatie met het Ei als het Ei in de Eitabel. Er kunnen dus geen records worden gemaakt in een database zonder een van de regels/beperkingen te overtreden.

Database nomenclatuur van een één-op-één relatie is misleidend. Alle relaties die ik heb gezien (dus mijn ervaring) zouden meer beschrijvend zijn als één-op- (nul of één) relaties.



  1. UTF-8:Algemeen? bak? Unicode?

  2. Identiteitseigenschap van een kolom in SQL Server-tabel laten vallen - SQL Server / T-SQL-zelfstudie 44

  3. Fatale fout:oproep naar niet-gedefinieerde functie sqlsrv_connect() in C:\xampp\htdocs

  4. MySQL (of PHP?) Groepsresultaten op veldgegevens