本文介绍: 1NF:使属性具有原子性;2NF:消除非主属性对主键(主码)的部分依赖;3NF:消除非主属性对主建(主码)的传递依赖;BCNF:消除主属性对主键(主码)的部分依赖;4NF:消除属性间的多值依赖;【数据库范式讲解(从1Nf到4NF)】 https://www.bilibili.com/video/BV1iU4y157JG/?【320-数据库范式之第二范式讲解】 https://www.bilibili.com/video/BV19y4y1v7sy/?
码和属性
第一范式(1NF)
下面例子中,属性 课程编号 存储的是一个可以再分割的集合,非原子项,违背了第一范式;
第二范式(2NF)
在1NF基础上,一个关系(表)必须有一个主键(主码),且非主属性(非主码属性)必须完全依赖于主键(主码)。
例一
在这个关系(表)中
主码(主键)X = {货物类型,货物ID}
,包含了主属性货物类型
和主属性货物ID
Y、Z都是非主属性(也是非码属性)
现在的关系是通过主码X
确定Y
和Z
但是现在存在的问题是:Z其实只和X中的货物类型
这个字段有关,也就是Z只依赖部分X;
说人话就是Z只需要X的一部分就能确定下来,而不用X的完整体才能确定;
这就不满足2NF,所以接下来拆分成两个表:
这样拆分后,形成了一下关系:
表一:X{货物类型,货物ID} → Y{货物名称},即Y完全依赖X才能确定
表二:X{货物类型)}→ Z{注意事项},即Z完全依赖X才能确定
这样就满足了第二范式
例二
在这个表中,主键(主属性)是{学生学号,课程编号},由两个字段组成
为什么主键不是{学生学号}?
因为单凭{学生学号}定位不了{成绩}这个属性;
也就是说{成绩}完全依赖于主属性{学生学号,课程编号};
再看{学生姓名}{班级}{院系}这三个非主属性,只需要{学生学号}就能确定,也就是只依赖部分主属性,因此这个表(关系)也不符合2NF;
于是,把这个关系拆分:
好了,这下ojbk了
表一:非主属性{学生姓名}{班级}{院系}完全依赖主属性{学生学号}
表二:非主属性{成绩}完全依赖主属性{学生学号,课程编号}
完美
第三范式(3NF)
在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
巴斯科德范式(BCNF)
第四范式
总结
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。