Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So referenzieren Sie einen zusammengesetzten Primärschlüssel in SQL

Wir deklarieren eine SQL FK (FOREIGN KEY)-Einschränkung, um zu sagen, dass ein Unterzeilenwert für eine Spaltenliste immer an anderer Stelle als Unterzeilenwert für eine Spaltenliste erscheint, die einen SQL PK (PRIMARY KEY) oder UNIQUE NOT NULL bildet. Deklarieren Sie es, wenn es nicht bereits durch andere Deklarationen impliziert wird. Es muss auf die Spaltenliste in einem deklarierten SQL PK (PRIMARY KEY) oder UNIQUE NOT NULL verweisen. Sie müssen dies also in der referenzierten Tabelle deklarieren, auch wenn dies bereits durch NOT NULLs und ein kleineres enthaltenes PK oder UNIQUE NOT NULL impliziert wird.

Beachten Sie also, dass ein SQL-PK nicht unbedingt ein PK im relationalen Sinne ist, dass es eindeutig ist, aber keinen kleineren eindeutigen Spaltensatz enthält, dh ein Superschlüssel ist, der keinen kleineren Superschlüssel enthält, dh ein minimaler/nicht reduzierbarer Superschlüssel, dh ein CK ( Kandidatenschlüssel).

Hier müssen Sie möglicherweise die buildingno ersetzen &roomno FKs um eins, (buildingno, roomno) zu Room :

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

Das vielleicht für die Bedeutung Ihrer Tabellen angemessen sein – die Sie tatsächlich nicht angeben, also können wir es nicht wissen, wir können nur raten. ZB wenn buildingno könnte auch in Room als PK oder UNIQUE NOT NULL deklariert werden, was bei roomno IS NOT NULL der Fall ist ist tatsächlich konsistent mit und impliziert (buildingno, roomno) könnte als PK oder UNIQUE NOT NULL deklariert werden, vielleicht hat Ihr FK richtig sondern Ihr Room Erklärungen sind unzureichend.

Wenn ein Unterzeilenwert für eine Spaltenliste immer an anderer Stelle als Unterzeilenwert für eine Spaltenliste erscheint, spricht man von einer IND-Einschränkung (Inclusion Dependency). Es gibt keine Möglichkeit, eine Nicht-FK-IND in SQL zu deklarieren; wir müssen durch Trigger erzwingen. Das auch könnte das sein, was Sie für Ihr Design benötigen.

Sie könnten den FK von buildingno fernhalten zu Building , aber es wird durch den von mir vorgeschlagenen FK und den FK in buildingno impliziert auf Room Verweis auf Building .

Teil des zusammengesetzten Primärschlüssels referenzierend