数据依赖
函数依赖FD:一个属性或者一组属性的值可以决定另一个属性的值
多值依赖MVD:一个属性或者一组属性的值可以决定另一个属性的值的集合。FD是MVD的特例
符号表示:Name->->Course,课程多值依赖于姓名
连接依赖:一个表可以分解成几个子表,并将这几个子表拼接起来以后仍然是原来那个表。(无损连接分解)则称原来的那些属性之间具有连接依赖。
第一范式1NF:关系里面每一个属性是原子的,不能再分。关系型数据库的基本要求
第二范式2NF:不存在属性对主键的部分函数依赖(一些属性只依赖于主键中的部分属性)。即要求一个表中的主键必须一起决定其他属性
不满足2NF的后果:
- 可能产生插入异常(部分属性只依赖于主键部分属性,意味着其他属性不存在的时候那些属性就不能存在,而实际上这样做一般是不合理的)和删除异常
- 产生数据冗余,产生更新困难
所以应该满足:一张表只用来描述一件事情
第三范式3NF:不存在属性对主键的传递依赖
不满足3NF的后果:
- 可能产生插入异常和删除异常
- 产生数据冗余,更新困难
BCNF:大概和3NF相同。要求函数依赖的决定子必须是主键
3NF一般就是追求的目标
第四范式4NF:消除属性多值依赖
第五范式5NF:消除属性连接依赖
ER图:
- 方框表示实体
- 菱形表示联系
- 圆形表示属性
数据库设计方法:
- 以过程为中心‘
- 以数据为中心
- 仅仅在结构上达到3NF是不够的
- “一事一地”包括每项信息的唯一,要提取出问题的本质,识别出本质上属于同一概念的信息项
- 对于表达类似信息,模式相似只是取值不同的表,应尽量合并
- 考虑到效率、用途等因素,该分开的表还应该分开
- 结合DBMS内部实现技术,合理涉及索引和文件结构,为查询优化做好存取路径
- 在结构规范化、减少数据冗余和提高数据库访问性能之间仔细权衡,适当折中