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

Czy klucz obcy może mieć wartość NULL i/lub być duplikatem?

Krótka odpowiedź:Tak, może być NULL lub być duplikatem.

Chcę wyjaśnić, dlaczego klucz obcy może wymagać wartości null lub może być unikalny lub nie unikalny. Najpierw pamiętaj, że klucz obcy wymaga po prostu, aby wartość w tym polu istniała najpierw w innej tabeli (tabeli nadrzędnej). To wszystko jest FK z definicji. Null z definicji nie jest wartością. Null oznacza, że ​​nie wiemy jeszcze, jaka jest wartość.

Podam przykład z życia. Załóżmy, że masz bazę danych, która przechowuje oferty sprzedaży. Załóżmy dalej, że do każdej oferty przydzielono tylko jednego sprzedawcę i jednego klienta. Tak więc tabela propozycji miałaby dwa klucze obce, jeden z identyfikatorem klienta, a drugi z identyfikatorem przedstawiciela handlowego. Jednak w momencie tworzenia rekordu nie zawsze jest przypisywany przedstawiciel handlowy (ponieważ nikt nie może jeszcze nad nim pracować), więc identyfikator klienta jest wypełniany, ale identyfikator przedstawiciela handlowego może mieć wartość null. Innymi słowy, zazwyczaj potrzebujesz możliwości posiadania pustego FK, gdy możesz nie znać jego wartości w momencie wprowadzania danych, ale znasz inne wartości w tabeli, które należy wprowadzić. Aby zezwolić na wartości null w FK ogólnie wszystko, co musisz zrobić, to zezwolić na wartości null w polu, które ma FK. Wartość null jest oddzielona od idei bycia FK.

To, czy jest unikatowe, czy nie, zależy od tego, czy tabela ma relację jeden-jeden lub jeden-wiele z tabelą nadrzędną. Teraz, jeśli masz relację jeden-jeden, możliwe, że możesz mieć wszystkie dane w jednej tabeli, ale jeśli tabela robi się zbyt szeroka lub jeśli dane dotyczą innego tematu (pracownik - przykład ubezpieczenia @tbone podał na przykład), wtedy chcesz oddzielne tabele z FK. Następnie chciałbyś, aby ten FK był również PK (co gwarantuje unikalność) lub nałożył na niego unikalne ograniczenie.

Większość FK dotyczy relacji jeden do wielu i właśnie to otrzymujesz z FK bez dodawania dalszych ograniczeń pola. Masz więc na przykład tabelę zamówień i tabelę szczegółów zamówienia. Jeśli klient zamawia jednocześnie dziesięć pozycji, ma jedno zamówienie i dziesięć rekordów szczegółów zamówienia, które zawierają ten sam identyfikator zamówienia, co FK.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać listę tabel bez ograniczenia klucza podstawowego we wszystkich bazach danych instancji SQL Server - SQL Server / TSQL Tutorial, część 62

  2. Jak zdefiniować klucz główny automatycznego przyrostu w SQL Server

  3. Jak połączyć wiele wierszy w listę rozdzielaną przecinkami w SQL Server 2005?

  4. Jak zwrócić wiele zestawów wyników za pomocą SqlCommand?

  5. TSQL:Jak przekonwertować czas lokalny na UTC? (Serwer SQL 2008)