我有一个保存学生记录的数据库,但在以下情况下失败: 1. 如果某个“类(class)”不存在“类(class)”,则该“类(class)”和“类(class)”的组合中不应存在任何学生。 例如,假设“第二”类只有两个“A”和“B”部分,那么“第二”类的所有学生都必须属于“A”或“B”部分,或者我们可以说他们可以不存在属于“二”类“C”组的学生。
我的数据库结构: StudentInfo表保存了学生的数据,其中有学生姓名、学生类(class)、学生部门列。 ClassnSec是一个维护Class和Section关系的表。
我将“学生类(class)”设置为 F.K,它指向“类(class)”,“学生部门”指向“部门”。
例如 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
-------------------------------------
最佳答案
据我所知,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)
);
这可以防止类和部分的任何不匹配。您可能(现在)想要考虑是否想要/需要单独的类和部分外键约束。
关于mysql - 外键约束不当,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17398831/