Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách tham chiếu khóa chính tổng hợp trong SQL

Chúng tôi khai báo một ràng buộc SQL FK (FOREIGN KEY) để nói rằng giá trị con cho danh sách cột luôn xuất hiện ở nơi khác dưới dạng giá trị con cho danh sách cột tạo thành SQL PK (PRIMARY KEY) hoặc UNIQUE NOT NULL. Khai báo nó bất cứ khi nào nó chưa được ngụ ý bởi các khai báo khác. Nó phải tham chiếu đến danh sách cột trong SQL PK đã khai báo (PRIMARY KEY) hoặc UNIQUE NOT NULL. Vì vậy, bạn phải khai báo rằng trong bảng được tham chiếu, ngay cả khi điều đó đã được ngụ ý bởi NOT NULL và một PK chứa nhỏ hơn hoặc UNIQUE NOT NULL.

Vì vậy, lưu ý rằng một PK SQL không nhất thiết phải là một PK theo nghĩa quan hệ là duy nhất nhưng không chứa tập hợp cột duy nhất nhỏ hơn, nghĩa là là một siêu khóa không chứa siêu khóa nhỏ hơn, tức là một siêu khóa tối thiểu / không thể điều chỉnh được, tức là một CK ( khóa ứng viên).

Tại đây, bạn có thể cần thay thế buildingno &roomno FK từng cái một, (buildingno, roomno) đến Room :

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

Điều đó có thể phù hợp với ý nghĩa của bảng của bạn - mà trên thực tế bạn không đưa ra, vì vậy chúng tôi không thể biết, chúng tôi chỉ có thể đoán. Ví dụ:if buildingno cũng có thể được khai báo PK hoặc DUY NHẤT KHÔNG ĐẦY ĐỦ trong Phòng, khi roomno IS NOT NULL thực sự nhất quán với và ngụ ý (buildingno, roomno) có thể được tuyên bố là PK hoặc UNIQUE NOT NULL, có thể FK của bạn là đúng nhưng Room của bạn khai báo không đầy đủ.

Khi giá trị con cho danh sách cột luôn xuất hiện ở nơi khác dưới dạng giá trị con cho danh sách cột được gọi là ràng buộc IND (bao gồm phụ thuộc). Không có cách nào để khai báo IND không phải FK trong SQL; chúng ta phải thực thi bằng các trình kích hoạt. Điều đó cũng có thể là những gì bạn cần cho thiết kế của mình.

Bạn có thể giữ FK khỏi buildingno đến Building , nhưng nó được ngụ ý bởi FK mà tôi đề xuất và FK trong buildingno trên Room tham chiếu đến Building .

tham chiếu một phần của khóa chính tổng hợp



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo GROUP BY vào ngày tối thiểu và tối đa

  2. Codeigniter Oracle PDO-oci

  3. Oracle:tận dụng lợi thế của việc sử dụng hai chỉ mục

  4. Chuỗi kết nối Oracle không có tệp tnsnames.ora

  5. Có một hệ thống kiểm soát phiên bản cho các thay đổi cấu trúc cơ sở dữ liệu không?