Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara mereferensikan kunci utama komposit dalam SQL

Kami mendeklarasikan batasan SQL FK (FOREIGN KEY) untuk mengatakan bahwa nilai subrow untuk daftar kolom selalu muncul di tempat lain sebagai nilai subrow untuk daftar kolom yang membentuk SQL PK (PRIMARY KEY) atau UNIQUE NOT NULL. Deklarasikan kapan pun itu belum tersirat oleh deklarasi lain. Itu harus merujuk daftar kolom dalam SQL PK (PRIMARY KEY) yang dideklarasikan atau UNIQUE NOT NULL. Jadi, Anda harus mendeklarasikannya dalam tabel yang direferensikan, meskipun itu sudah tersirat oleh NOT NULLs dan PK yang lebih kecil berisi atau UNIQUE NOT NULL.

Jadi perhatikan bahwa SQL PK belum tentu PK dalam arti relasional menjadi unik tetapi tidak berisi kumpulan kolom unik yang lebih kecil, yaitu menjadi superkey yang tidak berisi superkey yang lebih kecil, yaitu menjadi superkey minimal/tidak dapat direduksi, yaitu menjadi CK ( kunci kandidat).

Di sini, Anda mungkin perlu mengganti buildingno &roomno FK satu per satu, (buildingno, roomno) ke Room :

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

Itu mungkin sesuai dengan arti tabel Anda--yang sebenarnya tidak Anda berikan, jadi kami tidak tahu, kami hanya bisa menebak. Misalnya jika buildingno bisa juga dideklarasikan PK atau UNIQUE NOT NULL di Room, yang bila roomno IS NOT NULL sebenarnya konsisten dengan dan menyiratkan (buildingno, roomno) bisa dideklarasikan PK atau UNIQUE NOT NULL, mungkin FK anda benar tapi Room your deklarasi tidak memadai.

Ketika nilai subrow untuk daftar kolom selalu muncul di tempat lain sebagai nilai subrow untuk daftar kolom yang disebut batasan IND (inclusion dependency). Tidak ada cara untuk mendeklarasikan IND non-FK dalam SQL; kita harus menegakkan oleh pemicu. Itu juga mungkin yang Anda butuhkan untuk desain Anda.

Anda bisa menjaga FK dari buildingno ke Building , tapi itu tersirat oleh FK yang saya sarankan dan FK di buildingno di Room referensi Building .

mereferensikan bagian dari kunci utama komposit



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengembalikan RefCursor dari fungsi Oracle?

  2. Oracle cara mengekspor kueri ke file teks/csv

  3. menghubungkan oracle dari r

  4. Oracle:mengapa tidak menggunakan eksekusi paralel?

  5. Menggunakan SELECT UNION dan mengembalikan output dua kolom dari satu tabel