【发布时间】:2015-10-04 01:36:51
【问题描述】:
我正在设计一个包含以下实体的数据库:
create table Director(
ID integer not null,
YearsExperience integer not null,
StudioAffiliation varchar(30),
NetWorth REAL,
primary key (ID)
);
create table Movie(
ID varchar(20) not null,
Title varchar(40) not null,
Genre char(1) not null,
ReleaseDate date not null,
Earning real not null,
primary key (ID)
);
现在导演和电影有两种关系:Direct 和 WonAward。后者是记录导演是否因导演的电影获奖或更多:
create table Directs(
DirectorID integer not null,
MovieID varchar(20) not null,
primary key (DirectorID, MovieID),
foreign key (DirectorID) references Director (ID) on delete cascade,
foreign key (MovieID) references Movie (ID) on delete cascade
);
create table WonAward(
DirectorID integer not null,
MovieID varchar(20) not null,
AwardName varchar(30) not null,
Year integer not null,
Budget REAL not null,
primary key (DirectorID, MovieID),
foreign key (DirectorID) references Director (ID) on delete cascade,
foreign key (MovieID) references Movie (ID) on delete cascade
);
我需要确保导演只因他/她导演的电影而获奖。现在我尝试使用 Check 来实现这一点,但它在 WonAward 关系结束时不断给我以下 2 个条件的错误:
check (DirectorID = (SELECT DirectorID FROM Directs WHERE Directs.MovieID = MovieID)),
check (MovieID = (SELECT MovieID FROM Directs WHERE Directs.DirectorID = DirectorID))
这是我不断收到的错误:
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0548N A check constraint or generated column that is defined with "SELECT"
is invalid. SQLSTATE=42621
如果没有这些限制,我发现用户可以将非他们导演的电影的导演奖输入数据库。我怎样才能做到这一点?
【问题讨论】:
标签: sql database db2 entity constraints