sql >> Databáze >  >> RDS >> Oracle

Jak odkazovat na složený primární klíč v SQL

Deklarujeme omezení SQL FK (FOREIGN KEY), které říká, že hodnota podřádku pro seznam sloupců se vždy objeví jinde jako hodnota podřádku pro seznam sloupců, který tvoří SQL PK (PRIMARY KEY) nebo UNIQUE NOT NULL. Deklarujte to, kdykoli to již není implikováno jinými deklaracemi. Musí odkazovat na seznam sloupců v deklarovaném SQL PK (PRIMARY KEY) nebo UNIQUE NOT NULL. Takže to musíte deklarovat v odkazované tabulce, i když je to již implikováno hodnotami NOT NULL a menším obsaženým PK nebo UNIQUE NOT NULL.

Všimněte si tedy, že SQL PK není nutně PK v relačním smyslu, že je jedinečný, ale neobsahuje menší sadu jedinečných sloupců, tj. je superklíčem, který neobsahuje menší superklíč, tj. je minimálním/neredukovatelným superklíčem, tj. je CK ( kandidátský klíč).

Zde možná budete muset nahradit buildingno &roomno FKs o jeden, (buildingno, roomno) do Room :

CONSTRAINT SESSION_FK12
    FOREIGN KEY(BUILDINGNO,ROOMNO) REFERENCES ROOM(BUILDINGNO,ROOMNO)

To může být vhodné pro významy vašich tabulek – které ve skutečnosti neuvádíte, takže to nemůžeme vědět, můžeme jen hádat. Např. pokud buildingno mohl také být deklarován jako PK nebo UNIQUE NOT NULL v místnosti, což když roomno IS NOT NULL je ve skutečnosti v souladu s a implikuje (buildingno, roomno) může být prohlášeno za PK nebo UNIQUE NOT NULL, možná je váš FK správný ale váš Room deklarace jsou nedostatečné.

Když se hodnota podřádku pro seznam sloupců vždy objeví jinde jako hodnota podřádku pro seznam sloupců, nazývá se to omezení IND (inclusion dependency). Neexistuje způsob, jak deklarovat non-FK IND v SQL; musíme prosadit pomocí spouštěčů. To také může být to, co potřebujete pro svůj design.

Můžete nechat FK od buildingno do Building , ale je to implikováno FK, který navrhuji, a FK v buildingno na Room odkazující na Building .

odkazující na část složeného primárního klíče



  1. Optimalizace Mysql na základě vysvětlit

  2. Jak předat varchar s jednoduchými uvozovkami do Stored Proc v Oracle

  3. vytvořit sloupec textu jako jedinečný klíč

  4. Statistiky tabulky GTT a SYS.WRI$_OPTSTAT_TAB_HISTORY