如何在外部表中添加列的约束

时间:2015-04-19 00:04:37

标签: sql sql-server

解释我的问题的一个简单方法是: 我想创建一个表格,其中包含有关学校将要指定的科目的信息。列必须是:

create table program( teacher varchar(20) references teachers(name), 
                          classroom  varchar(20) references classrooms(id),
                          dtime datetime)

在每个表teachersclassrooms中都存在一个名为“主题”的列,对应于由教师指定的主题和在教室中教授的主题(想象一下)这些表中不再有列。)

现在,我想在program表中创建一个约束,该约束不允许我插入一个行,其中课堂上的主题与教师指定的主题不同。

1 个答案:

答案 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表中,那么您将需要使用用户定义的函数来进行约束。这似乎是一个更简单的解决方案。