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

MySQL - Ràng buộc khóa ngoại có điều kiện

Bạn đang cố gắng thực hiện một thiết kế có tên là Liên kết đa hình . Nghĩa là, khóa ngoại có thể tham chiếu đến các hàng trong bất kỳ bảng nào trong số các bảng có liên quan.

Nhưng một ràng buộc khóa ngoại phải tham chiếu chính xác đến một bảng. Bạn không thể khai báo một khóa ngoại tham chiếu đến các bảng khác nhau tùy thuộc vào giá trị trong một cột khác của Comments của bạn bàn. Điều này sẽ vi phạm một số quy tắc thiết kế cơ sở dữ liệu quan hệ.

Một giải pháp tốt hơn là tạo một loại "bảng xếp hạng cao" được tham chiếu bởi các nhận xét.

CREATE TABLE Commentable (
  id SERIAL PRIMARY KEY
);

CREATE TABLE Comments (
  comment_id SERIAL PRIMARY KEY,
  foreign_id INT NOT NULL,
  ...
  FOREIGN KEY (foreign_id) REFERENCES Commentable(id)
);

Mỗi loại nội dung của bạn sẽ được coi là một loại phụ của bảng xếp hạng cao này. Điều này tương tự với khái niệm hướng đối tượng của giao diện .

CREATE TABLE BlogPosts (
  blogpost_id INT PRIMARY KEY, -- notice this is not auto-generated
  ...
  FOREIGN KEY (blogpost_id) REFERENCES Commentable(id)
);

CREATE TABLE UserPictures (
  userpicture_id INT PRIMARY KEY, -- notice this is not auto-generated
  ...
  FOREIGN KEY (userpicture_id) REFERENCES Commentable(id)
);

Trước khi bạn có thể chèn một hàng vào BlogPosts hoặc UserPictures , bạn phải chèn một hàng mới vào Commentable để tạo một id giả mới. Sau đó, bạn có thể sử dụng id đã tạo đó khi chèn nội dung vào bảng loại phụ tương ứng.

Khi bạn làm tất cả những điều đó, bạn có thể dựa vào các ràng buộc toàn vẹn tham chiếu.



  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 CRUD đơn giản bằng PHP và MySQL một cách dễ dàng

  2. Kiến trúc bảo mật:Hướng dẫn cho MySQL

  3. JSON_QUOTE () - Cách thoát các ký tự trong chuỗi được sử dụng làm giá trị JSON trong MySQL

  4. TẠO BẢNG MySQL và T-SQL với các ví dụ về cú pháp

  5. Cách cài đặt MySQL 8 trên Ubuntu