外键约束不正确

时间:2013-07-01 06:50:35

标签: mysql database foreign-keys

我有一个维护学生记录的数据库,但在以下情况下失败:     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
-------------------------------------

1 个答案:

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

这可以防止类和节的任何不匹配。您可能(现在)想要考虑是否需要/需要单个类和部分外键约束。