Nếu chúng ta xem xét mô hình ở đây, chúng ta sẽ thấy như sau:
- 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
)