Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在外部表中添加列约束_Sql_Sql Server - Fatal编程技术网

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

Sql 如何在外部表中添加列约束,sql,sql-server,Sql,Sql Server,解释我的问题的一个简单方法是: 我想创建一个表格,其中包含有关学校听写科目的信息。列必须是: create table program( teacher varchar(20) references teachers(name), classroom varchar(20) references classrooms(id), dtime datetime) 在教师和教室的每一个表中都有

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

create table program( teacher varchar(20) references teachers(name), 
                          classroom  varchar(20) references classrooms(id),
                          dtime datetime)
教师
教室
的每一个表中都有一个名为“主题”的列,对应于教师口述的主题和教室教授的主题(假设这些表中没有更多的列)


现在,我想在
程序
表中创建一个约束,该约束不允许我插入一行,其中课堂上听写的主题与老师听写的主题不同。

您想使用复合外键。最简单的方法是将
subject
放在
程序表中。以下是教师的例子:

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

如果未将主题放入
程序
表中,则需要为约束使用用户定义的函数。这似乎是一个更简单的解决方案。

对于有关sql server的问题,不要使用“mysql”标记。@而且您需要在程序表中使用一个主题列来强制执行带有外键约束的规则。我认为如果不将表结构反规范化,您无法做到这一点。在插入
程序
表之前,您必须检查其他表(
教师
教室
)中是否存在
行。