高内聚
一对一
可以把班级放在学生表里
学生表 (一个学生只能有一个id)
学生id | 姓名 | 班级id |
---|---|---|
1001 | 小明 | 4002 |
1002 | 小方 | 4002 |
班级表
班级id | 名称 |
---|---|
4002 | 入门1班 |
也可以单独建立关联表
中间建一个表 让他们关联起来
学生表
学生id | 姓名 |
---|---|
1001 | 小明 |
学生班级表(单独建立的关系表)
id | 学生id | 班级id |
---|---|---|
2003 | 1001 | 4002 |
班级表
班级id | 名称 |
---|---|
4002 | 入门1班 |
一对多
假设一个作者能写多本书
把书放在作者表里
某些DBMS支持数组,可以存两个id到一个字段
作者id | 姓名 | books |
---|---|---|
1001 | 大牛 | [2001,3002] |
2001,3002为书的编号
但是,如果DBMS不支持数组,就不能这样做了
单独建立关系表(推荐)
作者表
作者id | 姓名 |
---|---|
1001 | 大牛 |
出版表 (单独建立的关系表)
id | 作者id | 书id | 出版社id |
---|---|---|---|
2001 | 1001 | 4002 | 902 |
2002 | 1001 | 4003 | 766 |
书表
书id | 名称 |
---|---|
4002 | JS入门 |
4003 | 起飞 |
多对多
假设一个学生可以加入多个班级
当然每个班级可以有多个学生
把班级放进学生表里
- 某些DBMS支持数组就可以放
- 如果不支持数组,就不能放
单独建立关系表(推荐)
学生表
学生id | 姓名 |
---|---|
1001 | 小明 |
学生班级表(单独建立的关系表)
id | 学生id | 班级id | 有效期 |
---|---|---|---|
2001 | 1001 | 4002 | |
2002 | 1001 | 4003 |
(有效期 指毕业了就删了之类的)
班级表
班级id | 名称 |
---|---|
4002 | 入门1班 |
什么时候建关联表
当关联自身存在属性时
- 比如关联的有效期,有效期为一年
- 比如关联的级别,店铺会员分为vip1~6
:一个店铺有多个会员,一个会员可以有多个店铺,它们之间的关系可以分等级,同样是这个店铺的会员,可以分vip1和vip6