sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man skapar en riktig en-till-en-relation i SQL Server

Jag är ganska säker på att det är tekniskt omöjligt i SQL Server att ha en sann 1 till 1-relation, eftersom det skulle betyda att du skulle ha att infoga båda posterna samtidigt (annars skulle du få ett begränsningsfel vid infogning), i båda tabellerna, med båda tabellerna som har en främmande nyckelrelation till varandra.

Med det sagt, din databasdesign som beskrivs med en främmande nyckel är en relation från 1 till 0...1. Det finns ingen möjlig begränsning som skulle kräva en post i tabell B. Du kan ha en pseudo-relation med en trigger som skapar posten i tabellB.

Så det finns några pseudolösningar

Först, lagra all data i en enda tabell. Då har du inga problem med EF.

Eller för det andra måste din enhet vara smart nog att inte tillåta en infogning om den inte har en tillhörande post.

Eller för det tredje, och mest troligt, har du ett problem som du försöker lösa och du frågar oss varför din lösning inte fungerar istället för det faktiska problemet du försöker lösa (ett XY-problem).

UPPDATERA

För att förklara i REALITY hur 1 till 1-förhållanden inte fungerar, jag ska använda analogin med hönan eller äggdilemmat. Jag tänker inte lösa detta dilemma, men om du skulle ha en begränsning som säger att för att lägga till ett ägg till äggbordet måste förhållandet mellan kycklingen existera och kycklingen måste finnas i tabellen, då du kunde inte lägga till ett ägg till äggbordet. Det motsatta är också sant. Du kan inte lägga till en kyckling på kycklingbordet utan att både förhållandet till ägget och ägget finns i äggbordet. Således kan inga poster göras i en databas utan att bryta mot en av reglerna/begränsningarna.

Databas nomenklatur av en en-till-en relation är vilseledande. Alla relationer jag har sett (därför min erfarenhet) skulle vara mer beskrivande som en-till-(noll eller en) relationer.



  1. Introduktion till datakopplingar och relationer

  2. TRUNC(date) Funktion i Oracle

  3. Hur man mappar PostgreSQL-arrayfält i Django ORM

  4. Hur ändrar man teckenuppsättningen (och SAMMANSTÄLLNING) i en databas?