史上最简单的 MySQL 教程(十八)「关系」

来源:互联网 发布:unity3d 超级玛丽 编辑:程序博客网 时间:2022/07/04 22:39

关系

在数据库中,将实体与实体的关系反应到表的设计上来,可以细分为 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

表 2:不常用数据

ID 身高 体重 籍贯 居住地 1 182 75 中国 北京 2 172 50 美国 纽约

如上面表1表2所示,通过字段ID表1中的一条记录只能匹配表2中的一条记录,反之亦然,这就是一对一的关系。

一对多/多对一

一对多,即一张表中的记录可以对应另外一张表中的多条记录,但是反过来,另外一张表中的一条记录只能对应第一张表中的一条记录

例如,咱们设计「国家城市表」,其包含两个实体,即国家和城市。

表 3:国家表

COUNTRY_ID 国家 位置 1 中国 亚洲 2 美国 北美洲 3 俄罗斯 亚洲和欧洲

表 4:城市表

CITY_ID 城市 国家 1 北京 中国 2 深圳 中国 3 纽约 美国 4 莫斯科 俄罗斯

如上面表3表4所示,通过字段国家表3中的一条记录可以匹配表4中的多条记录,但反过来,表4中的一条记录只能匹配表3中的一条记录,这就是典型的一对多的关系。

多对多

多对多,即一张表中的记录可以对应另外一张表中的多条记录,反过来,另外一张表中的一条记录也可以对应第一张表中的多条记录

例如,咱们设计「教师学生表」,其包含两个实体,即教师和学生。

表 5:教师表

TEA_ID 姓名 性别 1 刘涛 女 2 刘亦菲 女 3 刘德华 男

表 6:学生表

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(hasnumbering).parent().append(numbering); for (i = 1; i
阅读全文
0 0
原创粉丝点击