sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan opretter du et rigtigt en-til-en-forhold i SQL Server

Jeg er ret sikker på, at det er teknisk umuligt i SQL Server at have et ægte 1 til 1 forhold, da det ville betyde, at du ville have at indsætte begge poster på samme tid (ellers ville du få en begrænsningsfejl ved indsættelse) i begge tabeller, hvor begge tabeller har et fremmednøgleforhold til hinanden.

Når det er sagt, er dit databasedesign beskrevet med en fremmednøgle et 1 til 0..1 forhold. Der er ingen begrænsning mulig, der ville kræve en post i tabel B. Du kan have et pseudo-forhold med en trigger, der opretter posten i tabel B.

Så der er et par pseudo-løsninger

Gem først alle data i en enkelt tabel. Så har du ingen problemer i EF.

Eller for det andet skal din enhed være smart nok til ikke at tillade en indsættelse, medmindre den har en tilknyttet registrering.

Eller for det tredje, og højst sandsynligt, har du et problem, du forsøger at løse, og du spørger os, hvorfor din løsning ikke virker i stedet for det faktiske problem, du forsøger at løse (et XY-problem).

OPDATERING

For at forklare i REALITY hvordan 1 til 1 forhold ikke virker, vil jeg bruge analogien med kyllingen eller æggets dilemma. Jeg har ikke tænkt mig at løse dette dilemma, men hvis du skulle have en begrænsning, der siger, at for at tilføje et æg til ægbordet, skal forholdet mellem kyllingen eksistere, og kyllingen skal eksistere i bordet, så du kunne ikke tilføje et æg til ægbordet. Det modsatte er også sandt. Du kan ikke tilføje en Kylling til Kyllingebordet uden at både forholdet til Ægget og Ægget eksisterer i Æggebordet. Der kan således ikke laves nogen registreringer i en database uden at bryde en af ​​reglerne/begrænsningerne.

Database nomenklatur af et en-til-en forhold er vildledende. Alle forhold, jeg har set (derfor min erfaring), ville være mere beskrivende som et-til-(nul eller én)-forhold.



  1. tomcat7 - jdbc datasource - Dette vil med stor sandsynlighed skabe en hukommelseslækage

  2. Hvordan sletter man mysql-rækken efter tiden er gået?

  3. Sådan tilføjes 'ON DELETE CASCADE' i ALTER TABLE-sætningen

  4. Shell-script til at udføre pgsql-kommandoer i filer