解释我的问题的一个简单方法是: 我想创建一个表格,其中包含有关学校将要指定的科目的信息。列必须是:
create table program( teacher varchar(20) references teachers(name),
classroom varchar(20) references classrooms(id),
dtime datetime)
在每个表teachers
和classrooms
中都存在一个名为“主题”的列,对应于由教师指定的主题和在教室中教授的主题(想象一下)这些表中不再有列。)
现在,我想在program
表中创建一个约束,该约束不允许我插入一个行,其中课堂上的主题与教师指定的主题不同。
答案 0 :(得分:0)
您想使用复合外键。将subjectId
放在programs table
中,这将是最简单的。以下是教师的例子:
create table teachers (
teacherid int identity(1, 1) primary key,
name varchar(255) not null,
subjectid int references subjects(subjectid),
unique (teacherid, subjectid)
);
create table programs (
programid int identity(1, 1) primary key,
teacherid int references teachers(teacherid),
classroomid int references classrooms(classroomid),
dtime datetime
subjectid int references subjects(subjectid),
foreign key (teacherid, subjectid) references teachers(teacherid, subjectid),
foreign key (classroomid, subjectid) references classrooms(classroomid, subjecdtid)
);
如果您没有将主题放在programs
表中,那么您将需要使用用户定义的函数来进行约束。这似乎是一个更简单的解决方案。