是否存在一种三元关系,其中三个实体之一一次仅与两个其他实体之一相关联?

时间:2019-11-12 21:42:52

标签: sql database-design

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

我目前拥有3个实体-导演,演员和电影-全部与一种关系相关-直接(1:1:N)部分:部分:总计。

这个想法是,每部电影只能有1位导演,但是演员也可以是导演,因此,两难选择是一种让演员或导演执导电影的方式,但不允许他们俩导演同时,无论如何,我无法阻止这种情况的发生。

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

2 个答案:

答案 0 :(得分:1)

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

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);

答案 1 :(得分:0)

您可以使用外键约束和检查约束。这是表格的缩小版本以及如何设置:

create table directedBy (
    filmId int not null references films(filmId),
    actorId int references actors(actorId),
    directorId int references directors(directorId),
    check (actorId is null or directorId is null)
);