数据库设计三大范式
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
最常用的有三大范式 1NF 2NF 3NF
一.第一范式(确保每列保持原子性)
属性为原子性,不可拆分 或 无重复的列(通俗的说就是列不能再次划分) ,简单的表都属于第一范式。
二 .第二范式(属性完全依赖于主键)确保一个表只说明一个事物
函数依赖和完全依赖
所谓完全依赖是指不能存在仅依赖主关键字一部分的属性(设有函数依赖
W→A,若存在XW,有X→A成立,那么称W→A是局部依赖,否则就称
W→A是完全函数依赖)。如果存在,那么这个属性和主关键字的这一部
分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关
系。
部分函数依赖,就是多个属性决定另一个属性,但事实上,这多个属性是
有冗余的。例如,(学号,班级)->姓名,事实上,只需要学号就能决定
姓名,因此班级是冗余的,应该去掉。
重点详例:判断条件:
表:学号、课程号、姓名、学分;
这个表明显说明了两个事务:学生信息, 课程信息;由于非主键字段必须依赖
主键,这里学分依赖课程号,姓名依赖与学号,所以不符合二范式
满足第二范式的数据库设计必须先满足第一范式。
因此第二范式的目标就是消除函数依赖关系中左边存在的冗余属性。
三 .重点内容第三范式(非主键字段不能相互依赖)每列都与主键有直接关系,不存在传递的依赖
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关
也就是,数据库中的属性依赖仅能依赖于主属性,不存在于其他非主属性的关联。
重点详例:例如,图书,图书室的关系。图书包括编号、出版商、页码等信息,图书
室包括图书室编号、所存图书(外键)。其中,图书室的表中不应该存储
任何图书的具体信息(例如,出版商。。),而只能通过主键图书编号来
获得对应图书的信息。