我回答了一个非常相似的问题:
在 StackOverflow 克隆中,Comments 表与 Questions and Answers 应该有什么关系?
在您的情况下,我建议创建一个表 Commentables:
CREATE TABLE Commentables (
item_id INT AUTO_INCREMENT PRIMARY KEY
item_type CHAR(1) NOT NULL,
UNIQUE KEY (item_id, item_type)
);
然后,书籍、图片、文件中的每一个都与 Commentables 具有 1:1 的关系。
CREATE TABLE Books (
book_id INT PRIMARY KEY, -- but not auto-increment
item_type CHAR(1) NOT NULL DEFAULT 'B',
FOREIGN KEY (book_id, item_type) REFERENCES Commentables(item_id, item_type)
);
对图片和文件执行相同操作。item_type 对于书本应始终为“B”,对于图片始终为“P”,对于文件始终为“F”。因此,您不能在 Commentables 中让一本书和一张图片引用同一行。
然后你的评论可以参考一张表,Commentables:
CREATE TABLE Comments (
comment_id INT AUTO_INCREMENT PRIMARY KEY,
item_id INT NOT NULL,
FOREIGN KEY (item_id) REFERENCES Commentables (item_id)
);