为了有正确的 PK-FK 关系,我建议有一个超集表(让我们称之为posts
)。在这种情况下,您的架构可能看起来像
CREATE TABLE posts
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
type TINYINT(1)
);
CREATE TABLE articles
(
id INT NOT NULL,
title VARCHAR (255),
article_property VARCHAR(128),
-- other article specific attributes
CONSTRAINT FOREIGN KEY (id) REFERENCES posts (id)
);
CREATE TABLE news
(
id INT NOT NULL,
title VARCHAR (255),
reporter VARCHAR(128),
-- other news specific attributes
CONSTRAINT FOREIGN KEY (id) REFERENCES posts (id)
);
CREATE TABLE comments
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
post_id INT NOT NULL,
content TEXT,
CONSTRAINT FOREIGN KEY (post_id) REFERENCES posts (id)
);
要在插入新文章和新闻时填充id
s,您可以使用触发器
DELIMITER $$
CREATE TRIGGER tg_article_insert
BEFORE INSERT ON articles
FOR EACH ROW
BEGIN
INSERT INTO posts (type) VALUES (1);
SET NEW.id = LAST_INSERT_ID();
END$$
CREATE TRIGGER tg_news_insert
BEFORE INSERT ON news
FOR EACH ROW
BEGIN
INSERT INTO posts (type) VALUES (0);
SET NEW.id = LAST_INSERT_ID();
END$$
DELIMITER ;
这是SQLFiddle演示。