设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须先遵循前边的所有范式要求
前置知识
相关概念
超键:唯一标识记录的字段集
候选键:超键 - 多余的字段 的 超键
主属性:在候选键中的字段
依赖
函数依赖:A-->B,如果通过A属性(属性组)的值,可以确定唯一B属性的值。则称B依赖于A
例如:学号-->姓名;(学号,课程名称) --> 分数完全函数依赖:A-->B, 如果A是一个属性组,则B属性值得确定需要依赖于A属性组中所有的属性值。
例如:(学号,课程名称) --> 分数部分函数依赖:A-->B, 如果A是一个属性组,则B属性值得确定只需要依赖于A属性组中某一些值即可。
例如:(学号,课程名称) -- > 姓名传递函数依赖:A-->B, B -- >C . 如果通过A属性(属性组)的值,可以确定唯一B属性的值,在通过B属性(属性组)的值可以确定唯一C属性的值,则称 C 传递函数依赖于A
例如:学号-->系名,系名-->系主任
数据库的三范式
1NF:字段含义单一 不可再分。即不能以集合、序列等作为属性。
2NF:在1NF基础上,数据表中每一条记录可唯一标识,所有非主键字段必须完全依赖于主键,不能部分依赖于主键
2NF设计原则:一张表只表达一个意思, 对于部分依赖于主键的字段,将这 部分字段 与 依赖的部分主键 抽取出来建立新表
3NF:在2NF基础上,非主属性之间不能相互依赖,非主属性之间相互独立
范式化的设计使得表逐渐细粒度化,跨表查询比较多
反范式
有时数据看似冗余,但对业务十分重要,应遵循业务优先的原则
特别是查询数据业务比较多时,可以适当增加冗余字段来提高读性能,