Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak stworzyć prawdziwą relację jeden do jednego w SQL Server

Jestem prawie pewien, że technicznie niemożliwe jest w SQL Server posiadanie relacji True 1 do 1, ponieważ oznaczałoby to, że będziesz aby wstawić oba rekordy jednocześnie (w przeciwnym razie przy wstawieniu pojawi się błąd ograniczenia), w obu tabelach, przy czym obie tabele mają relację klucza obcego ze sobą.

Biorąc to pod uwagę, projekt bazy danych opisany za pomocą klucza obcego jest relacją 1 do 0..1. Nie ma możliwego ograniczenia, które wymagałoby rekordu w tabeli B. Możesz mieć pseudo-związek z wyzwalaczem, który tworzy rekord w tabeliB.

Jest więc kilka pseudorozwiązań

Najpierw przechowuj wszystkie dane w jednej tabeli. Wtedy nie będziesz mieć problemów w EF.

Lub po drugie, Twój podmiot musi być wystarczająco inteligentny, aby nie pozwolić na wstawienie, chyba że ma powiązany rekord.

Lub po trzecie, i najprawdopodobniej masz problem, który próbujesz rozwiązać, i pytasz nas, dlaczego Twoje rozwiązanie nie działa zamiast rzeczywistego problemu, który próbujesz rozwiązać (problem XY).

AKTUALIZUJ

Aby wyjaśnić w RZECZYWISTOŚCI jak nie działają relacje 1 do 1, posłużę się analogią do dylematu kurczaka lub jajka. Nie zamierzam rozwiązywać tego dylematu, ale jeśli miałbyś mieć ograniczenie, które mówi, że aby dodać jajko do tabeli Jaj, związek Kurczaka musi istnieć, a kurczak musi istnieć w tabeli, to nie można było dodać Jajka do tabeli Jaj. Prawdą jest również coś przeciwnego. Nie możesz dodać Kurczaka do tabeli Kurczak bez relacji do Jajka i Jajka istniejących w tabeli Jajka. W ten sposób nie można utworzyć wszystkich rekordów w bazie danych bez złamania jednej z zasad/ograniczeń.

Baza danych nazewnictwo relacji jeden do jednego jest mylące. Wszystkie relacje, które widziałem (a więc moje doświadczenie) byłyby bardziej opisowe jako relacje jeden do (zero lub jeden).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Porady Brenta Ozara i Pinala Dave dotyczące wydajności SQL Server

  2. INSTR() odpowiednik w SQL Server

  3. SQL Server 2016:Utwórz login

  4. Jak wysłać wiadomość e-mail w formacie HTML z serwera SQL (T-SQL)

  5. Visual Studio:ContextSwitchDeadlock