Sql 如何设置表外键值在另一个表中必须相同

Sql 如何设置表外键值在另一个表中必须相同,sql,sql-server,database,Sql,Sql Server,Database,例如,我有4张桌子,即学生桌、学校桌、旅游桌和旅游桌。巡回演出是以学校为单位组织的,不会有来自多个学校的学生参加同一巡回演出 学校 SchoolID主键 学名 学生 学生ID主键 SchoolID外键 学生姓名 游览 巡回主键 图名 旅游者 主键的位置 巡回外键 学生外键 价值实例 Student School Student1 School1 Student2 School1 Student3 School2 我如何确保参加1次巡

例如,我有4张桌子,即学生桌、学校桌、旅游桌和旅游桌。巡回演出是以学校为单位组织的,不会有来自多个学校的学生参加同一巡回演出

学校 SchoolID主键
学名

学生 学生ID主键
SchoolID外键
学生姓名

游览 巡回主键
图名

旅游者 主键的位置
巡回外键
学生外键

价值实例

Student      School      
Student1    School1    
Student2    School1     
Student3    School2  

我如何确保参加1次巡演的学生来自完全相同的学校,这意味着如果来自1所学校的学生参加了巡演,2所学校就不能参加该巡演?

正如我在评论中所说,您可以通过在当前缺少的表中添加
SchoolID
列来实现这一点:

CREATE TABLE Tour (
    TourID tinyint not null,
    TourName varchar(37) not null,
    SchoolID bigint not null,
    constraint PK_Tour PRIMARY KEY (TourID),
    constraint FK_Tour_School FOREIGN KEY (SchoolID) references School (SchoolID),
    constraint UQ_Tour_School UNIQUE (TourID, SchoolID)
)
现在,正如你的叙述,每一次旅行都与一所学校有关。很好,那么出席率呢

CREATE TABLE TourAttend (
    TourAttendID smallint not null,
    TourID tinyint not null,
    StudentID char(1) not null,
    SchoolID bigint not null,
    constraint PK_TourAttend PRIMARY KEY (TourAttendID),
    constraint FK_TourAttend_Tour FOREIGN KEY (TourID)
          references Tour (TourID),
    constraint FK_TourAttend_Student FOREIGN KEY (StudentID)
          references Student (StudentID),
    constraint FK_TourAttend_XRefTour FOREIGN KEY (TourID,SchoolID) 
          references Tour (TourID, StudentID),
    constraint FK_TourAttend_XRefStudent FOREIGN KEY (StudentID, SchoolID) 
          references Student (StudentID, SchoolID)
)
(您可能需要在
Student
表中跨
StudentID
SchoolID
添加一个唯一的约束,方法与我在上面的
Tour
中所做的相同,然后再创建上面的
FK\U TourAttainment\U Xreform Student
外键)


您现在有一些多余的外键约束,但我经常保留这些约束,只是为了记录。

“巡演是在学校基础上组织的”-那么为什么不以
巡演中出现的
学校ID
为模型?一旦你有了它,你也可以在
tourattain
中包含该列。然后你可以声明额外的键/FK来强制执行你想要的结构?@Damien_不信者我的设计问题之一是如果我只输入SchoolID本身,我不知道哪个学生在参加。我不是说要替换任何列。我想说的是添加额外的列。