Sql 如何设置表外键值在另一个表中必须相同
例如,我有4张桌子,即学生桌、学校桌、旅游桌和旅游桌。巡回演出是以学校为单位组织的,不会有来自多个学校的学生参加同一巡回演出 学校 SchoolID主键Sql 如何设置表外键值在另一个表中必须相同,sql,sql-server,database,Sql,Sql Server,Database,例如,我有4张桌子,即学生桌、学校桌、旅游桌和旅游桌。巡回演出是以学校为单位组织的,不会有来自多个学校的学生参加同一巡回演出 学校 SchoolID主键 学名 学生 学生ID主键 SchoolID外键 学生姓名 游览 巡回主键 图名 旅游者 主键的位置 巡回外键 学生外键 价值实例 Student School Student1 School1 Student2 School1 Student3 School2 我如何确保参加1次巡
学名 学生 学生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本身,我不知道哪个学生在参加。我不是说要替换任何列。我想说的是添加额外的列。