如何建立多对多关系?

时间:2017-02-12 16:51:34

标签: sql many-to-many

有人可以帮助我建立多对多的关系吗?

CREATE TABLE Classes(
    id_classes Integer not null Primary Key,
    name Varchar(30) not null,
    start_day Date not null
 );

CREATE TABLE Students (
    id_students Integer not null Primary key,
    name Varchar(30) not null,
    surname Varchar(45) not null,
    birthDate Date not null,
    class Varchar(5) not null
);

我现在该如何建立多对多关系? 谢谢。

3 个答案:

答案 0 :(得分:1)

您可以使用联结表执行此操作。这是一个很好的结构表:

CREATE TABLE StudentClasses (
    id_studentclass int primary key,
    id_student int references student(id_student),
    id_class int references class(id_class),
    constraint unique unq_studentclasses_student_classes unique (id_student, id_class)  -- not sure if needed
);

注意:

  • 我不知道唯一约束是否合适。学生可以多次上课。
  • 我认为classes的id列应为id_class,单数形式,因为它指的是单个类。同样适用于id_student
  • 我在表格中添加了一个主键。在这种情况下,您可能有关于这种关系的其他信息 - 学生什么时候注册?等级是多少?
  • 您的所有ID列都应使用identityauto_incrementserialgenerated always as自动生成,具体取决于数据库。
  • {li> NOT NULLPRIMARY KEY声明中是多余的。根据定义,主键不能是NULL

答案 1 :(得分:0)

创建一个桥表,可以表示映射到许多学生的许多类:

CREATE TABLE StudentClasses (
    id_classes INTEGER NOT NULL,
    id_students INTEGER NOT NULL,
    PRIMARY KEY (id_classes, id_students)
)

请注意,此表的主键实际上是类和学生的ID字段的组合。

答案 2 :(得分:0)

我没有数据库专家,但我建议使用Tuple(Bridge)表。这是一个表,其中包含映射到另一个实体的Id的一个实体的Id。像这样:

CREATE TABLE StudentsClasses (
FOREIGN KEY (studentId) REFERENCES Students(id_students)
FOREIGN KEY (id_classes) REFERENCES Classes(id_classes))

然后在学生表与strudents类表之间创建一对多的关系,并为类创建相同的关系。