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

Złożona relacja klucza podstawowego sql

Jeśli masz kompozyt klucz podstawowy, a następnie wszystkie ograniczenia klucza obcego, które się do niego odwołują, muszą używać wszystkich kolumn złożonego klucza podstawowego.

Więc w twoim przypadku - TableTwo musi reference TableOne(ReportID, Date)

Jedynym sposobem na obejście tego byłoby utworzenie UNIQUE INDEX na TableOne (ReportID) - następnie możesz utworzyć odwołanie do klucza obcego tylko do tego unikalnego ograniczenia.

Ale to nasuwa pytanie:dlaczego nie jest ReportID sam klucz podstawowy, jeśli jest już unikalny (ponieważ możesz umieścić UNIQUE INDEX na nim) i NOT NULL (ponieważ jest częścią złożonego PK) ?

Krok 1:utwórz UNIQUE INDEX :

CREATE UNIQUE NONCLUSTERED INDEX UIX_TableOne ON dbo.TableOne(ReportID);

Krok 2:utwórz klucz obcy z TableTwo :

ALTER TABLE dbo.TableTwo
ADD CONSTRAINT FK_TableTwo_TableOne
FOREIGN KEY(ReportID) REFERENCES dbo.TableOne(ReportID)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Grupuj według zapytania sql w kolumnie połączonej przecinkami

  2. Funkcja bezpieczeństwa Spotlight Cloud — usuń literały

  3. Wyjątek dotyczący maksymalnych parametrów SqlCommand przy 2099 parametrach

  4. Jak usunąć zduplikowane dane z tabeli SQL?

  5. Jak usunąć zadanie agenta programu SQL Server w Azure Data Studio