2015-04-19 36 views
0

解释我的问题的一个简单方法是: 我想创建一个表格,其中将包含关于将在学校口述的主题的信息。该列必须是:如何在外部表格中添加列约束

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

在表teachersclassrooms的每一个存在一个名为“主题”栏,对应于由老师所传授的课堂主题决定主题(想象这些表中没有更多列)。

现在,我想在program表中创建一个约束,它不允许我插入一行,教师口述的主题与老师指定的主题不同。

+0

不要使用“mysql”标签来查询关于sql server的问题。 –

+0

@Kadriand您将需要程序表中的主题列来强制执行具有外键约束的规则。 –

+0

我不认为你可以做到这一点没有去规范你的表结构。在插入“程序”表之前,您必须检查其他表中的“If Exists”行(“teacher”和“classroom”)。 – ANewGuyInTown

回答

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