適切な 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 のデモです。