sql >> Databáze >  >> RDS >> Sqlserver

Složený primární klíč SQL vztah

Pokud máte kompozitní primární klíč a poté všechny omezení cizího klíče, která na něj odkazují, musí používat všechny sloupce složeného primárního klíče.

Takže ve vašem případě - TableTwo musí odkaz TableOne(ReportID, Date)

Jediným způsobem, jak to obejít, by bylo vytvořit UNIQUE INDEX na TableOne (ReportID) - pak můžete vytvořit odkaz na cizí klíč pouze na toto jedinečné omezení.

Ale to pak vyvolává otázku:proč není ReportID pouze primární klíč, pokud je již jedinečný (protože můžete zadat UNIQUE INDEX na něm) a NOT NULL (protože je součástí složeného PK) ?

Krok 1:vytvořte UNIQUE INDEX :

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

Krok 2:vytvořte cizí klíč z TableTwo :

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



  1. MariaDB JSON_INSERT() vysvětleno

  2. Vložit do MySQL z R

  3. Jak zálohovat celou databázi MySQL se všemi uživateli a oprávněními a hesly?

  4. SQL Server 2008 prázdný řetězec vs. prostor