0

我有一个维护学生记录的数据库,但在以下情况下失败:1.如果特定“班级”不存在“部分”,那么该“班级”的组合不应该存在任何学生”和“节”。例如说,我只有两个“第二”类的“A”和“B”部分,那么“第二”类的所有学生都必须属于“A”或“B”部分,或者我们可以说他们可以不存在属于“第二”类和“C”类的任何学生。

我的数据库结构: StudentInfo 表保存学生的数据,其中有学生姓名、学生班级、学生科列。ClassnSec 是一个维护 Class 和 Section 之间关系的表。

我将“学生班”设为 FK,它指向“班级”,“学生节”指向“节”。

例如进入 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
-------------------------------------
4

1 回答 1

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

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

于 2013-07-01T07:10:22.643 回答