mysql多表之间的关系及其建表原则

Posted 只要不兔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql多表之间的关系及其建表原则相关的知识,希望对你有一定的参考价值。

表与表之间的三种关系

1)一对多:最常用的关系 部门和员工,1个部门有多个员工

2)多对多:学生选课表 和 学生表, 一门课程可以有多个学生选择,一个学生选择多门课程

3)一对一:相对使用比较少。员工表 简历表, 公民表 护照表

1.1 一对多

一对多(1:n) 例如:班级和学生,部门和员工,客户和订单,分类和商品

一对多建表原则: 在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键

1.2 多对多

多对多(m:n) 例如:老师和学生,学生和课程,用户和角色

多对多关系建表原则: 需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键。

1.3 一对一

一对一(1:1) 在实际的开发中应用不多.因为一对一可以创建成一张表。

一对一两种建表原则:

1)外键唯一 :主表的主键和从表的外键(唯一),形成主外键关系,外键唯一 UNIQUE

2)外键是主键 :主表的主键和从表的主键,形成主外键关系

一对多关系案例:

需求:一个旅游线路分类中有多个旅游线路

-- 创建旅游线路分类表 tab_category

-- cid 旅游线路分类主键,自动增长

-- cname 旅游线路分类名称非空,唯一,字符串 100

create table tab_category (

cid int primary key auto_increment,

cname varchar(100) not null unique

)

-- 创建旅游线路表 tab_route

/*

rid 旅游线路主键,自动增长

rname 旅游线路名称非空,唯一,字符串 100

price 价格

rdate 上架时间,日期类型

cid 外键,所属分类

*/

create table tab_route(

rid int primary key auto_increment,

rname varchar(100) not null unique,

price double,

rdate date,

cid int,

foreign key (cid) references tab_category(cid)

)

多对多关系案例

需求:一个用户收藏多个线路,一个线路被多个用户收藏

创建用户表 tab_user

create table tab_user (

uid int primary key auto_increment,

username varchar(100) unique not null,

password varchar(30) not null,

name varchar(100),

birthday date,

sex char(1) default \'男\',

telephone varchar(11),

email varchar(100)

)

创建收藏表 tab_favorite

/*

rid 旅游线路 id,外键

date 收藏时间

uid 用户 id,外键

rid 和 uid 不能重复,设置复合主键,同一个用户不能收藏同一个线路两次

*/

create table tab_favorite (

rid int,

date datetime,

uid int,

-- 创建复合主键

primary key(rid,uid),

foreign key (rid) references tab_route(rid),

foreign key(uid) references tab_user(uid)

)

以上是关于mysql多表之间的关系及其建表原则的主要内容,如果未能解决你的问题,请参考以下文章

建表原则

MySQL高级:掌握表关系及建表原则

数据库建表原则

数据库建表原则

Hibernate映射

三大框架 之 Hibernate查询(一对多多对多查询关系)