何为关系型数据库
关系型数据库就是通过关系模型来建立的一种数据库,其能够很好的反映出各实体之间的关系,从而更将客观、科学的存储数据。
下面先说一说关系型数据库的一些概念和特点:
- 元 组
在我们的数据库表格中,一行就可以看成是我们的元组,又可以看为一个实体,为什么呢? 我们可以从表格的每一列看,是不是每一列就代表实体的一个属性?综合起来是不是就可以看做一个实体了呢?元组的任意两行是不能相同的,为了标识,就引入了主键与符合主键的概念,等下再细讲。。。
- 属 性
如上图,在数据库表格中的每一列就代表一个属性,属性是具有原子性的,即这个属性不可再分割,就如我们有个名字叫human的表格,我们可以加身高,体重为属性,但是不能把身体作为属性,因为身体是包含身高,体重等属性的,可以再分割,不具备原子性。
- 主键、复合主键、外键
主 键:一个表格有多个决定其元组唯一的属性,我们称其为“候选码”,我们选取其中一个候选码,作为标识唯一性的主键。
复合主键:主键是唯一的索引,通常会用GUID最为主键,但是并不是每个表都存在ID字段,例如学生表(姓名,生日,性别,班级),这里面每一个值都可能重复,无法使用单一字段作为主键,这时 我们可以将多个字段设置为复合主键,由复合主键标识唯一性。
外 键:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。
- 实体关系
在现实生活中,不同实体之间有着不同的关系,比如说一个学生能被多个老师教,一个老师能教多个学生,那么,学生和老师之间就形成了多对多的关系,这只是其中的一种关系。
一对一:对于实体集A中的每一个实体,在B中最多只有一个实体能和他对应,反之亦然,这就说明A和B具有一对一的关系
一对多:对于实体集A中的每一个实体,在B中多个实体能和他对应;而对于实体集B中的每一个实体,在A中最多只有一个实体能和他对应,这就说明具有一对多的关系
多对多:对于实体集A中的每一个实体,在B中多个实体能和他对应;对于实体集B中的每一个实体,在A中多个实体能和他对应,这就说明有多对多的关系。
- 三大范式
借用连接 http://c.biancheng.net/view/8266.html
下面以某酒店的客人住宿信息表为例来介绍,该表用于保存酒店提供住宿的客房信息,如表 1 所示。
客人编号 | 姓名 | 地址 | 客房号 | ... | 客房描述 | 客房类型 | 客房状态 | 床位数 | 价格 | 入住人数 |
---|---|---|---|---|---|---|---|---|---|---|
C1001 | 张三 | Addr1 | 1001 | ... | A栋1层 | 单人间 | 入住 | 1 | 128.00 | 1 |
C1002 | 李四 | Addr2 | 2002 | ... | B栋2层 | 标准间 | 入住 | 2 | 158.00 | 2 |
C1003 | 王五 | Addr3 | 2002 | ... | B栋2层 | 标准间 | 入住 | 2 | 168.00 | 2 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
C8006 | A1 | Addrm | 8006 | ... | C栋3层 | 总统套房 | 入住 | 3 | 1080.00 | 3 |
C8008 | A2 | Addrn | 8008 | ... | C栋3层 | 总统套房 | 空闲 | 3 | 1080.00 | 0 |
1. 信息重复(冗余)
上表中“客房类型”“客房状态”和“床位数”列中有许多重复的信息,如“标准间”“入住”等。信息重复会造成存储空间的浪费及一些其他的问题。比如,不小心输入了“标准间”和“标间”或“总统套房”和 “总统套”,那么它们在数据库中将表示四种不同的客房类型。
2. 更新异常
冗余信息不仅浪费存储空间,还会增加更新的难度。如果需要将“客房类型”修改为“标间”而不是“标准间”,则需要修改所有包含该值的行。如果由于某种原因,没有更新所有行,那么数据库中会 出现两种客房类型,一个是“标准间”,另一个是“标间”,这种情况被称为更新异常。
3. 插入异常(无法表示某些信息)
从表 1 中我们会发现 2002 和 2003 客房的居住价格分别是 168 元和 158 元。尽管这两间客房都是标准间类型,但它们的“价格”出现了不同,这样就造成了同一个酒店相同类型的客房价格不 同,这种问题被称为插入异常。
4. 删除异常(丢失有用的信息)
在某些情况下,当删除一行时,可能会丢失有用的信息。例如,如果删除客房类型为“1001”的行,就会丢失客房类型为“单人间”的账户的信息,该表只剩下两种客房类型,即“标准间”和“总统套 房”。当查询有哪些客房类型时,将会误以为只有“标准间”和“总统套房”两种客房类型,这种情况被称为删除异常。
基于这写情况,就研究出了三大范式
第一范式:用通俗的话来说就是属性不可再分割,要有原子性。
第二范式:在第一范式的基础上,有新增了实体属性,完全依赖于主属性的规则。举个例子:https://baike.baidu.com/item/第二范式/3193760?fr=aladdin
不符合第二范式的例子
货物类型
|
货物ID
|
货物名称
|
注意事项
|
瓷碗
|
1
|
白色瓷碗
|
易碎品
|
瓷碗
|
2
|
青花瓷碗
|
易碎品
|
瓷碗
|
3
|
雕花瓷碗
|
易碎品
|
三合板
|
4
|
普通三合板
|
易燃物品,注意防火
|
货物类型
|
货物ID
|
货物名称
|
瓷碗
|
1
|
白色瓷碗
|
瓷碗
|
2
|
青花瓷碗
|
瓷碗
|
3
|
雕花瓷碗
|
三合板
|
4
|
普通三合板
|