多对多关系怎么设计数据表?
比如说一个学生管理系统,一个学生可以选多门课,一门可以有多个学生来选,学生表学号stu_id是主键,课程表cou_id是主键,多对多关系要用中间表---“学生选课表”en...
比如说一个学生管理系统,一个学生可以选多门课,一门可以有多个学生来选,学生表学号stu_id是主键,课程表cou_id是主键,多对多关系要用中间表---“学生选课表”enrol来实现数据的关联,enrolyou两种设计方式,第一种是:
CREATE TABLE enrol (
cou_id int ,
stu_id int ,
accept varchar(32) ,
score varchar(32) ,
CONSTRAINT enrol_ibfk_1 FOREIGN KEY (cou_id) REFERENCES course (cou_id),
CONSTRAINT enrol_ibfk_2 FOREIGN KEY (stu_id) REFERENCES student (stu_id),
primary key(class_id,stu_id)
);
就是采用复合主键,第二种是:
CREATE TABLE enrol (
enrol_id int primary key,
cou_id int ,
stu_id int ,
accept varchar(32) ,
score varchar(32) ,
CONSTRAINT enrol_ibfk_1 FOREIGN KEY (cou_id) REFERENCES course (cou_id),
CONSTRAINT enrol_ibfk_2 FOREIGN KEY (stu_id) REFERENCES student (stu_id)
);
采用了一个单独的主键,stu_id和cou_id知识普通的字段。
这两种方式哪个好?为什么?
现在都不建议使用复合主键了吗,但是不使用复合主键的话,没法保证学生不会重复选课。 展开
CREATE TABLE enrol (
cou_id int ,
stu_id int ,
accept varchar(32) ,
score varchar(32) ,
CONSTRAINT enrol_ibfk_1 FOREIGN KEY (cou_id) REFERENCES course (cou_id),
CONSTRAINT enrol_ibfk_2 FOREIGN KEY (stu_id) REFERENCES student (stu_id),
primary key(class_id,stu_id)
);
就是采用复合主键,第二种是:
CREATE TABLE enrol (
enrol_id int primary key,
cou_id int ,
stu_id int ,
accept varchar(32) ,
score varchar(32) ,
CONSTRAINT enrol_ibfk_1 FOREIGN KEY (cou_id) REFERENCES course (cou_id),
CONSTRAINT enrol_ibfk_2 FOREIGN KEY (stu_id) REFERENCES student (stu_id)
);
采用了一个单独的主键,stu_id和cou_id知识普通的字段。
这两种方式哪个好?为什么?
现在都不建议使用复合主键了吗,但是不使用复合主键的话,没法保证学生不会重复选课。 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询