Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да създадете истинска връзка един към един в SQL Server

Почти съм сигурен, че е технически невъзможно в SQL Server да има истинска връзка 1 към 1, тъй като това би означавало, че ще имате за да вмъкнете и двата записа едновременно (в противен случай ще получите грешка при вмъкване) и в двете таблици, като двете таблици имат връзка помежду си с външен ключ.

Като се има предвид това, дизайнът на вашата база данни, описан с външен ключ, е връзка от 1 до 0..1. Не е възможно ограничение, което да изисква запис в таблица B. Можете да имате псевдовръзка с тригер, който създава записа в таблица B.

Така че има няколко псевдо-решения

Първо, съхранявайте всички данни в една таблица. Тогава няма да имате проблеми с EF.

Или второ, вашият обект трябва да е достатъчно интелигентен, за да не позволи вмъкване, освен ако няма свързан запис.

Или трето, и най-вероятно, имате проблем, който се опитвате да разрешите, и ни питате защо вашето решение не работи вместо действителния проблем, който се опитвате да разрешите (проблем XY).

АКТУАЛИЗИРАНЕ

За обяснение в РЕАЛНОСТ как връзките 1 към 1 не работят, ще използвам аналогията с дилемата "Кокошка или яйце". Нямам намерение да разрешавам тази дилема, но ако трябва да имате ограничение, което гласи, че за да добавите яйце към таблицата с яйца, връзката на пилето трябва да съществува и пилето трябва да съществува в таблицата, тогава не можете да добавите Egg към масата Egg. Обратното също е вярно. Не можете да добавите пиле към таблицата с пиле, без връзката с яйцето и яйцето да съществуват в таблицата с яйца. По този начин не могат да бъдат направени всички записи в база данни, без да се нарушава някое от правилата/ограниченията.

номенклатура на базата данни на връзка един към един е подвеждащо. Всички връзки, които съм виждал (следователно моят опит), биха били по-описателни като връзки едно към (нула или едно).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Инструкцията ALTER TABLE е в конфликт с ограничението CHECK в SQL Server - SQL Server / TSQL Урок, част 89

  2. Създайте график на агент на SQL Server с T-SQL

  3. SQL Server 2016:Създайте таблица

  4. Разделете думи с главна буква в sql

  5. Фатална грешка:Извикване на недефинирана функция sqlsrv_connect() в C:\xampp\htdocs