我有一个维护学生记录的数据库,但在以下情况下失败: 1.如果某个“班级”没有“科目”,那么“班级”和“科”的组合就不应该有任何学生。 比如说,我只有两个“A”和“B”部分用于“第二”课程,那么所有“第二”课程的学生必须属于“A”或“B”部分,或者我们可以说他们可以不存在属于“第二”类和“C”类的学生。
我的数据库结构: StudentInfo表保存学生的数据,并且其中包含学生姓名,学生班,学生科列。 ClassnSec是一个维护Class和Section之间关系的表。
我把“学生班”改为F.K,其中“Class”和“Student Section”指向“Section”。
例如在ClassnSec中输入
-------------------------------------
ClassID | SectionID
1 A
1 B
2 A
-------------------------------------
在学生信息中输入
-------------------------------------
Name | ClassID | Section ID
Mark 1 A
Joe 2 A
Gaurav 1 B
-------------------------------------
现在尝试在下面插入,不应该插入它,因为'2'没有行/条目'B',即第2类不存在任何B部分。因此插入学生数据必须是非法的。
-------------------------------------
Jon 2 B
-------------------------------------
答案 0 :(得分:0)
据我所知,MySQL支持多列约束:
CREATE TABLE ClassNSec (
ClassID int not null,
SectionID int not null,
constraint PK_ClassNSec PRIMARY KEY (ClassID,SectionID)
);
CREATE TABLE StudentInfo (
StudentData varchar(10) not null,
ClassID int not null,
SectionID int not null,
constraint FK_StudentInfo_ClassNSec FOREIGN KEY (ClassID,SectionID)
references ClassNSec (ClassID,SectionID)
);
这可以防止类和节的任何不匹配。您可能(现在)想要考虑是否需要/需要单个类和部分外键约束。