举一个例子来讲解一下,数据库mysql中的表间关系问题,
一对一:主键与主键产生关联
一对多:新建字段与主键产生关联
多对多:新建中间表产生关联
在此,特以 学院表,学生表,学生详情表,选课表,课程表 之间的关系,来解释
学院表:id和name
create tablecollege(
col_id intprimary key not null,col_name varchar(20) not null);
添加数据:
insert into college values(1,"计算机学院"),
(2,"美术学院"),
(3,"音乐学院"),
(4,"管理学院");
学生表: 新建一个字段sc_id,与学院表产生关联 字段与主键产生关联
mysql> create tablestudent(
stu_idint primary keyauto_increment,
stu_namevarchar(20) not null,
sc_idint not null, # 新建字段sc_idforeign key(sc_id) referencescolloege(col_id) #将新建字段作为colloege表主键col_id的外键
);
添加数据,一个学院,可以有多的学生,形成一对多的关系:如图,
小明小红是计算机学院的,小白小方是美术学院的小黑是管理学院,小珂是音乐学院的
学生详情表: id,性别, 年龄 地址 student的主键stu_id与主键sda_id产生联系 达到一对一的关系
create tablestu_datalis(
sda_idint primary key,
sda_sexvarchar(10) not null,
sda_ageint not null,
sda_address varcahr(20),foreign key(sda_id) referencesstudent(stu_id)
);
添加数据
课程表 与学院id形成一对多的关系
create tablecourse(
cou_idint primary key,
cou_namevarchar(20) not null,
cc_idint not null,foreign key(cc_id) referencescollege(col_id)
);
python和web属于计算机学院,rap属于音乐学院,素描属于美术学院
因为多名学生可以选择同一门课,多门课可以给一个学生上,所以他们是多对多的关系:
建立中间表格:选课表
将choose的联合主键stu_id作为student表主键stu_id的外键进行关联
将choose的联合主键cou_id作为course表主键cou_id的外键进行关联
create tablechoose(
stu_idint,
cou_idint,primary key(stu_id,cou_id),foreign key(stu_id) referencesstudent(stu_id),foreign key(cou_id) referencescourse(cou_id)
);
2号和5号学生选择了1号课程,1号学生选择了2号课程,6号学生选择了3号课程
3号和4号学生选择了4号课程
一共建立了5张表格:学院表,学生表,学生详情表,选课表,课程表
学生表和学生详情表是一对一关系,
通过主键stu_id与主键sda_id产生联系----主键与主键
学生表和学院表是一对多关系,
通过在学生表新建字段sc_id与学院表主键col_id产生联系----新建字段与主键
课程表和学院表也是一对多的关系
通过在课程表新建字段cc_id与学院表主键col_id产生联系----新建字段和主键
学生表和课程表是多对多关系,通过新建中间表(选课表:choose)并设定联合主键primary key(stu_id,cho_id),
将choose的联合主键stu_id作为student表主键stu_id的外键进行关联
将choose的联合主键cou_id作为course表主键cou_id的外键进行关联