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

Nhiều khóa ngoại loại trừ lẫn nhau - đây có phải là cách để thực hiện?

Nếu chúng ta xem xét mô hình ở đây, chúng ta sẽ thấy như sau:

  1. Người dùng có liên quan đến chính xác một trang web
    • Một công ty có liên quan đến chính xác một trang web
    • Một trang web có liên quan đến chính xác một người dùng hoặc công ty

Mối quan hệ thứ ba ngụ ý sự tồn tại của một thực thể "người dùng hoặc công ty" có PRIMARY KEY nên được lưu trữ ở đâu đó.

Để lưu trữ nó, bạn cần tạo một bảng sẽ lưu trữ một PRIMARY KEY của website owner thực thể. Bảng này cũng có thể lưu trữ các thuộc tính chung cho một người dùng và một trang web.

Vì đó là mối quan hệ 1-1 nên các thuộc tính của trang web cũng có thể được lưu trữ trong bảng này.

Các thuộc tính không được chia sẻ bởi người dùng và công ty nên được lưu trữ trong bảng riêng biệt.

Để bắt buộc các mối quan hệ chính xác, bạn cần tạo PRIMARY KEY của website kết hợp với owner type như một phần của nó và buộc đúng loại trong các bảng con bằng CHECK ràng buộc:

CREATE TABLE website_owner (
    type INT NOT NULL,
    id INT NOT NULL,
    website_attributes,
    common_attributes,
    CHECK (type IN (1, 2)) -- 1 for user, 2 for company
    PRIMARY KEY (type, id)
)

CREATE TABLE user (
    type INT NOT NULL,
    id INT NOT NULL PRIMARY KEY,
    user_attributes,
    CHECK (type = 1),
    FOREIGN KEY (type, id) REFERENCES website_owner
)

CREATE TABLE company (
    type INT NOT NULL,
    id INT NOT NULL PRIMARY KEY,
    company_attributes,
    CHECK (type = 2),
    FOREIGN KEY (type, id) REFERENCES website_owner
)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Chỉ chọn các hàng có nhiều mối quan hệ tồn tại

  2. Chỉ mục đa ngôn ngữ với Laravel Scout và Algolia

  3. Điền lựa chọn thả xuống từ bảng cơ sở dữ liệu

  4. Giá trị chuỗi không chính xác khi cố gắng chèn UTF-8 vào MySQL thông qua JDBC?

  5. Lưu trữ Logic Kinh doanh trong Cơ sở dữ liệu