史上最简单的 MySQL 教程(十八)「关系」
2017-06-07 10:37
776 查看
关系
在数据库中,将实体与实体的关系反应到表的设计上来,可以细分为 3 种,分别为:一对一(1:1),一对多
(1:N)(或多对一
(N:1))和多对多
(N:N)。
在此,所有的关系都是指表与表之间的关系。
一对一
一对一,即一张表的一条记录只能与另外一张表的一条记录相对应,反之亦然。例如,咱们设计一张「个人信息表」,其字段包含:姓名、性别、年龄、身高、体重、籍贯和居住地等。
ID | 姓名 | 性别 | 年龄 | 身高 | 体重 | 籍贯 | 居住地 |
---|---|---|---|---|---|---|---|
1 | Charies | 男 | 18 | 182 | 75 | 中国 | 北京 |
2 | Swift | 女 | 18 | 172 | 50 | 美国 | 纽约 |
表 1:常用数据
ID | 姓名 | 性别 | 年龄 |
---|---|---|---|
1 | Charies | 男 | 18 |
2 | Swift | 女 | 18 |
ID | 身高 | 体重 | 籍贯 | 居住地 |
---|---|---|---|---|
1 | 182 | 75 | 中国 | 北京 |
2 | 172 | 50 | 美国 | 纽约 |
表1和
表2所示,通过字段
ID,
表1中的一条记录只能匹配
表2中的一条记录,反之亦然,这就是
一对一的关系。
一对多/多对一
一对多,即一张表中的记录可以对应另外一张表中的多条记录,但是反过来,另外一张表中的一条记录只能对应第一张表中的一条记录。例如,咱们设计「国家城市表」,其包含两个实体,即国家和城市。
表 3:国家表
COUNTRY_ID | 国家 | 位置 |
---|---|---|
1 | 中国 | 亚洲 |
2 | 美国 | 北美洲 |
3 | 俄罗斯 | 亚洲和欧洲 |
CITY_ID | 城市 | 国家 |
---|---|---|
1 | 北京 | 中国 |
2 | 深圳 | 中国 |
3 | 纽约 | 美国 |
4 | 莫斯科 | 俄罗斯 |
表3和
表4所示,通过字段
国家,
表3中的一条记录可以匹配
表4中的多条记录,但反过来,
表4中的一条记录只能匹配
表3中的一条记录,这就是典型的
一对多的关系。
多对多
多对多,即一张表中的记录可以对应另外一张表中的多条记录,反过来,另外一张表中的一条记录也可以对应第一张表中的多条记录。例如,咱们设计「教师学生表」,其包含两个实体,即教师和学生。
表 5:教师表
TEA_ID | 姓名 | 性别 |
---|---|---|
1 | 刘涛 | 女 |
2 | 刘亦菲 | 女 |
3 | 刘德华 | 男 |
STU_ID | 姓名 | 性别 |
---|---|---|
1 | 齐岳 | 男 |
2 | 杜康 | 男 |
表5和
表6,咱们会发现:
表5和
表6的设计满足了实体的属性,但没有维护实体之间的关系,即一个老师教过多个学生,一个学生也被多个老师教过。但是无论咱们在
表5中还是在
表6中增加字段,都会出现一个问题,那就是:该字段要保存多个数据,并且还是与其他表有关系的字段,不符合设计规范。因此,咱们可以再设计一张「中间表」,专门用来维护
表5和
表6的关系。
表 7:中间表
ID | STU_ID | STU_ID |
---|---|---|
1 | 1 | 1 |
2 | 1 | 2 |
3 | 2 | 1 |
4 | 3 | 2 |
表5、
表6和
表7,咱们会发现增加
表7之后,咱们维护
表5和
表6的关系更加方便啦!无论是想从
表5通过
表7查到
表6,还是想从
表6通过
表7查到
表5,都非常容易啦!这就是典型的
多对多的关系。
———— ☆☆☆ —— 返回 -> 史上最简单的 MySQL 教程 <- 目录 —— ☆☆☆ ————
(function () {('pre.prettyprint code').each(function () {
var lines = (this).text().split(′\n′).length;varnumbering = $('').addClass('pre-numbering').hide();
(this).addClass(′has−numbering′).parent().append(numbering);
for (i = 1; i
相关文章推荐
- 史上最简单的 MySQL 教程(十八)「关系」
- flash+php+mysql打造简单留言本教程第1/3页
- Flash+PHP+Mysql简单留言本制作实例教程
- MySQL 使用方法简单教程
- 在MySQL中使用序列的简单教程
- MySQL 使用方法简单教程
- Qt 4 访问 mysql 数据库的简单教程
- lighttpd mysql php简单教程
- JSP+Servlet+mysql简单示例【图文教程】
- 在MySQL中使用mysqlbinlog flashback的简单教程
- Qt 4 访问 mysql 数据库的简单教程
- MySQL简单入门教程
- Qt 4 访问 mysql 数据库的简单教程
- MySQL 使用方法简单教程
- flash+php+mysql打造简单留言本教程第1/3页
- Qt 4 访问 mysql 数据库的简单教程 收藏
- Mysqlslap MySQL压力测试工具 简单教程
- Navicat for mysql 简单使用教程
- 在MySQL中使用序列的简单教程
- Qt 4 访问 mysql 数据库的简单教程