Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak odwoływać się do złożonego klucza podstawowego w SQL

Deklarujemy ograniczenie SQL FK (FOREIGN KEY), aby powiedzieć, że wartość podrzędna dla listy kolumn zawsze pojawia się w innym miejscu jako wartość podrzędna dla listy kolumn, która tworzy SQL PK (PRIMARY KEY) lub UNIQUE NOT NULL. Zadeklaruj to, gdy nie jest to już sugerowane przez inne deklaracje. Musi odwoływać się do listy kolumn w zadeklarowanym SQL PK (PRIMARY KEY) lub UNIQUE NOT NULL. Musisz więc zadeklarować to w tabeli, do której się odwołuje, nawet jeśli jest to już sugerowane przez wartości NOT NULL i mniejsze zawarte PK lub UNIQUE NOT NULL.

Należy więc zauważyć, że SQL PK niekoniecznie jest PK w relacyjnym sensie bycia unikalnym, ale nie zawierającym mniejszego unikalnego zestawu kolumn, tj. będąc nadkluczem nie zawierającym mniejszego nadklucza, tj. będąc minimalnym/nieredukowalnym nadkluczem, tj. będąc CK ( klucz kandydata).

Tutaj może być konieczne zastąpienie buildingno &roomno FKs o jeden, (buildingno, roomno) do Room :

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

To może być odpowiednie dla znaczeń twoich tabel – których w rzeczywistości nie podajesz, więc nie możemy wiedzieć, możemy tylko zgadywać. Np. jeśli buildingno może również być zadeklarowane jako PK lub UNIQUE NOT NULL w pokoju, co gdy roomno IS NOT NULL jest zgodny z i implikuje (buildingno, roomno) może być zadeklarowany jako PK lub UNIQUE NOT NULL, może twoje FK jest właściwe ale twój Room deklaracje są niewystarczające.

Gdy wartość podrzędna dla listy kolumn zawsze pojawia się w innym miejscu jako wartość podrzędna dla listy kolumn, która jest nazywana ograniczeniem IND (zależność włączenia). Nie ma możliwości zadeklarowania w SQL IND spoza FK; musimy egzekwować za pomocą wyzwalaczy. To również może być tym, czego potrzebujesz do swojego projektu.

Możesz zachować FK z buildingno do Building , ale wynika to z sugerowanego przeze mnie FK i FK w buildingno w Room odwoływanie się do Building .

odwołuje się do części złożonego klucza podstawowego



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie Rewrite nie powiedzie się, jeśli MV używa ASNI Join

  2. Oracle PIVOT, dwa razy?

  3. Jak znaleźć LEFT OUTER JOIN lub RIGHT OUTER JOIN z ORACLE JOIN (+)

  4. pobierz kolumnę z małymi literami z zestawu wyników, używając nazwy kolumny

  5. Monitorowanie SQL w SQL Developer