We declareren een SQL FK (FOREIGN KEY)-beperking om te zeggen dat een subrijwaarde voor een lijst met kolommen altijd ergens anders verschijnt als een subrijwaarde voor een lijst met kolommen die een SQL PK (PRIMARY KEY) of UNIQUE NOT NULL vormt. Verklaar het wanneer het nog niet door andere verklaringen wordt geïmpliceerd. Het moet verwijzen naar de kolomlijst in een gedeclareerde SQL PK (PRIMARY KEY) of UNIQUE NOT NULL. Je moet dat dus aangeven in de tabel waarnaar wordt verwezen, zelfs als dat al wordt geïmpliceerd door NOT NULL's en een kleinere PK of UNIQUE NOT NULL.
Merk dus op dat een SQL PK niet noodzakelijkerwijs een PK is in de relationele zin van uniek zijn maar geen kleinere unieke kolommenset bevatten, dwz een supersleutel zijn die geen kleinere supersleutel bevat, dwz een minimale/onherleidbare supersleutel zijn, dwz een CK zijn ( kandidaatsleutel).
Hier moet u mogelijk het buildingno
. vervangen &roomno
FK's met één, (buildingno, roomno)
naar Room
:
CONSTRAINT SESSION_FK12
FOREIGN KEY(BUILDINGNO,ROOMNO) REFERENCES ROOM(BUILDINGNO,ROOMNO)
Dat misschien geschikt zijn voor de betekenissen van uw tabellen - die u in feite niet geeft, dus we kunnen het niet weten, we kunnen alleen maar raden. Bijv. als buildingno
kan ook worden verklaard PK of UNIEK NIET NULL in Kamer, die wanneer roomno IS NOT NULL
is eigenlijk consistent met en impliceert (buildingno, roomno)
kan als PK of UNIEK NIET NULL worden verklaard, misschien is uw FK juist maar je Room
declaraties zijn ontoereikend.
Wanneer een subrijwaarde voor een lijst met kolommen altijd ergens anders verschijnt als een subrijwaarde voor een lijst met kolommen, wordt dit een IND-beperking (inclusieafhankelijkheid) genoemd. Er is geen manier om een niet-FK IND in SQL te declareren; we moeten afdwingen door triggers. Dat ook is misschien wat je nodig hebt voor je ontwerp.
Je zou de FK van buildingno
kunnen houden naar Building
, maar het wordt geïmpliceerd door de FK die ik voorstel en de FK in buildingno
op Room
verwijzend naar Building
.
verwijzend naar een deel van de samengestelde primaire sleutel