数据库设计
规律:三分技术,七分管理,十二分基础数据
基本步骤:
- 需求分析;
- 概念结构分析;(概念模型 E-R图;数据字典)
- 逻辑结构分析;(关系数据模型)
- 物理结构分析;(存储安排;存取路径建立;存取方法选择)
- 数据库实施;
- 数据库运行和维护;
E-R图
实体和联系的三种情况:
- 一对一联系:(1:1)
- 一对多联系:(1:n)
- 多对多联系:(m:n)
数据冗余
三大范式
一、部分函数依赖
设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
例:AB->C , A->C , B->C ; 则C部分依赖于AB。
二、完全函数依赖
设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。
例:AB->C , 但是A!->C,B!->C ; 则C完全依赖于AB.
成绩依赖于学号和课程号两个字段的组合;但只知道学号无法确定成绩,同理只知道课程号也无法确定成绩;只有学号和课程号组合在一起才能标识哪个学生哪门课程的成绩;
因此(学号,课程号)——>成绩 是“完全函数依赖”。
三、传递函数依赖
设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。
例:A->B , B->C 但是 C!->B , B!->A ;则C传递依赖于A
班主任依赖于班级,与学号无关,与课程号也无关
又因班级依赖于学号所以班主任间接依赖于学号
因此,(学号,课程号)——->班主任是“传递函数依赖”
四、范式
1、第一范式(1NF):所有属性都是不可分的基本数据项,即表中的每个列都不可以再进行拆分。
id | name | sex_code | sex_desc | contact |
---|---|---|---|---|
001 | 张三 | 0 | 男 | 17835201234_山西省运城市xx村 |
002 | 李四 | 0 | 男 | 17735204567_山西省吕梁市yy村 |
003 | 王五 | 1 | 女 | 18835207890_山西省太原市zz村 |
应该将联系方式(contact)这一列分为电话号(phone)和地址(address)两列,这样才符合第一范式。
2、第二范式(2NF):满足第一范式,非主属性不存在部份依赖。
(码是由单个属性构成的,则至少为2NF)
stu_id | kc_id | score | kc_name |
---|---|---|---|
001 | 1011 | 85 | 高数3-1 |
001 | 1022 | 79 | 计算机组成原理 |
002 | 1011 | 59.9 | 高数3-1 |
kc_name只依赖于kc_id,与stu_id没有依赖关系,它不完全依赖于主键,只依赖于主键的一部分,不符合2NF。
3、第三范式(3NF): 满足第二范式,非主属性不存在传递依赖和部分依赖。
id | name | sex_code | sex_desc | phone | address |
---|---|---|---|---|---|
001 | 张三 | 0 | 男 | 17835201234 | 山西省运城市xx村 |
002 | 李四 | 0 | 男 | 17735204567 | 山西省吕梁市yy村 |
003 | 王五 | 1 | 女 | 18835207890 | 山西省太原市zz村 |
表中sex_desc依赖于sex_code,而sex_code依赖于id(主键),从而推出sex_desc依赖于id(主键);sex_desc不直接依赖于主键,而是通过依赖于非主键列而依赖于主键,属于传递依赖,不符合3NF。
4、BC范式(BCNF) :满足3NF且不允许主键的一部分被另一部分或其它部分所决定(即满足3范式,并且主属性之间没有依赖关系)。