- 设计数据库系统:需求分析、概念设计、逻辑设计、物理设计、数据库实施、数据库的运行和维护。
- 需求分析:根据用户需求收集数据。
- 概念设计:概念模型(实体-联系模型),E-R图。消除局部E-R图冲突,去冗余。【做E-R图】
- 属性冲突:属性值冲突、取值单位冲突。【学号:int/char。单位:kg/g】
- 命名冲突:同名异义、异名同义。【单位:单位部门/衡量数据。教室/宿舍:房间】
- 结构冲突:同一对象不同应用中的抽象意义,可为实体,也可为属性。在局部1:1,另一局部1:n。同一实体在不同局部属性个数、排列次序不同。
- 冗余:冗余的存在容易破坏数据库的完整性。【同一数据多次出现】
- 逻辑设计:关系模式,数据模型,关系模式规范化,二维表。【将E-R图转化为关系模式,做二维表】
- E-R图–>二维表转换规则:实体转换,每个实体类型转换为一个关系模式。联系转换,相同键的关系可以合并。
- 1:1联系:任一个关系模式中加入另一个关系模式的键和联系的属性。【任选一个实体,加入另一个实体的键和联系的属性】
- 1:n联系:在n端实体类型转换的关系模式中加入1端实体类型的键和联系类型的属性。【n端实体,都加入1端实体的键和联系的属性】
- m:n联系:将联系类型也转换为关系模式,属性为两端实体的键加上联系类型的属性,键为两端实体键的组合。
- 属性间的数据依赖:属性值之间相互依赖又相互制约,是数据内在的性质。【一个学号只能有一个人,一个学院可以有多个人】
- 函数依赖:给定一个属性值,可以查找到唯一的另一个属性值。对于任意记录都满足。
- 关系模式R(U),X,Y均属于U的自己,r是R的任一具体关系,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则X函数决定Y,Y函数依赖于X,记作X—>Y。X为决定因素,Y为依赖因素。【任意两个元组t和s,t[X]=s[X],则t[Y]=s[Y]。X—>Y】
- 关系模式规范化:通过依赖关系识别数据表中的潜在冗余,规范化过程就是在函数依赖的基础上,识别和消除部分依赖和传递依赖来优化表结果。确保所有非主属性逗能函数依赖于主键或复合主键。
- 非平凡的函数依赖:X—>Y,X不包含Y 。
- 平凡的函数依赖: X—>Y,X包含Y。
- 完全函数依赖:若 X—>Y,对于任一X真子集X’,都有Y不函数依赖于X’。
- 部分函数依赖:若 X—>Y,存在某一X真子集X’,有Y函数依赖于X’。【部分依赖会导致数据冗余和更新异常】
- 部分依赖缺陷举例:复合主键的情况下,在选课表中,学号和课程号是复合主键,但是课程名只依赖于课程号,而不是复合主键。所以多名学生选课时,课程名这一属性会多次记录,造成冗余,增加修改工作。
【举个栗子,上千个学生选5门课程,有了课程号这一列就足够了,课程名这一列无需记录上千次,只需要再做个5元组的课程表。当学生毕业后,新生未录入数据库,删除选课表之后,课程号和课程名会出现丢失。而成绩这一属性,必须知道学号和课程号才能知道对应唯一的成绩,完全依赖于复合主键。】
student-id | course-id | course-name |
---|---|---|
202401 | c01 | 数据库原理 |
202402 | c01 | 数据库原理 |
202401 | c02 | 数据结构 |
- 传递函数依赖: X—>Y,且Y不函数依赖于X,X—>Z。【传递函数依赖会导致数据冗余和数据一致性问题。】
- 传递函数依赖缺陷举例:员工表中非主属性依赖于另一个非主属性,间接依赖于主键。虽然主键可以唯一确定该非主属性,但会造成冗余【与部分依赖同理,部门名称明显冗余。可单独列表】
employee-id | name | department-id | department-name |
---|---|---|---|
202401 | 张三 | d01 | 销售部 |
202402 | 李四 | d01 | 技术部 |
- 范式:1NF、2NF、3NF(BCNF)、4NF、5NF。
- 1NF:关系模式R中不包含多值属性。【每个属性必不可分】
- 2NF:1NF基础上,R中的非主属性完全函数依赖于候选键。【消除部分依赖,避免数据冗余和更新异常】
- 3NF:2NF基础上,R中非主属性不传递函数依赖于任何候选键。【非主属性不能通过非主属性间接依赖于主键,减少数据冗余,提高数据结构的稳定性】
- BCNF:3NF基础上,每个决定因素都包含主键。【主属性对主键不能存在部分依赖。不存在主属性决定主属性的情况】
- 满足3NF不BCNF的反例:主键为(仓库id,商品id)或(管理员id,商品id)可推出另外两个属性。存在着情况(仓库id)–>(管理员id),(管理员id)–>(仓库id)。【仓库和管理员是一一对应关系,可以单独做表】
仓库-id | 商品id | 管理员id | 商品数量 |
---|---|---|---|
202401 | 001 | m01 | 200 |
202402 | 001 | m02 | 300 |
- 应用的范式等级越高,则表越多。表多会带来很多问题:查询时要连接多个表,增加了查询的复杂度,降低了数据库查询性能。
【现今,磁盘空间成本基本可以忽略不计,数据冗余所造成的问题并直接决定应用数据库范式。并不是应用的范式越高越好,看实际情况而定。第三范式很大程度上减少了数据冗余,减少了造成插入异常,更新异常,和删除异常。大多数情况应用第三范式足够,一定情况下2NF也可以。】 - 物理设计:存储结构,索引方法(一个属性经常使用,则建立索引)、聚簇方法(某些属性值的重复率高,某关系经常出现连接操作)、哈希方法。