首页 > 解决方案 > 有没有办法建立三元关系,其中三个实体之一一次只与另外两个实体中的一个相关联?

问题描述

所以我目前的问题主要与建模相关,因为我还没有尝试在 SQL 中应用它。

我目前拥有的是 3 个实体 - 导演、演员和电影 - 都与关系相关 - DIRECT (1:1:N) partial:partial:total。

这个想法是每部电影只能有一位导演,但演员也可以是导演,所以困境是找到一种方法让电影由演员或导演导演,但不允许他们同时由两者导演时间,但是它目前的建模方式我无法阻止这种情况的发生。

将其转换为适当的数据库时是否可以使用一些 SQL 命令,或者我是否必须采用另一种建模方法?

标签: sqldatabase-design

解决方案


创建一个新表(艺术家),在一个地方代表所有演员和导演。这样,导演只需要在电影表中的一列:

CREATE TABLE artist (artistid INT NOT NULL PRIMARY KEY);

ALTER TABLE actor ADD FOREIGN KEY (actorid) REFERENCES artist (artistid);
ALTER TABLE director ADD FOREIGN KEY (directorid) REFERENCES artist (artistid);
ALTER TABLE film ADD directorid INT NOT NULL REFERENCES artist (artistid);

推荐阅读