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
);
我现在该如何建立多对多关系? 谢谢。
答案 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
。identity
,auto_increment
,serial
或generated always as
自动生成,具体取决于数据库。NOT NULL
在PRIMARY 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类表之间创建一对多的关系,并为类创建相同的关系。