三大范式及存储方式

系统 1857 0

 

数据库三大范式

第一范式(1NF):
是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。 个人总结: 不能有表中表。

如数据表不能这样设计,因为数据表的一个二维表:

 

姓名 思想道德素质测评(20%)  专业素质测评(60%) 
基础分 奖励分 惩罚分 最后得分 排名  必修课成绩  奖励分 惩罚分 最后得分 排名
得分 排名
张三 78 0 0 78 2 71.7 1 0 0.0 71.7 1
王五 78 0 0 78 2 71.3 24 0.0 0.0 71.3 2
李四 78 0 0 78 2 70.8 25 0.0 2.0 68.8 3


而这样设计是可以的:

 

 

姓名 C语言 java MySQL Oracle
张三 78 88 68 78
王五 78 55 87 78
李四 78 86 91 56

 


第二范式(2NF):
要求数据库表中的每个实例或行必须可以被惟一地区分,数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。 个人总结: 非主属性依赖于主属性
如以下成绩表

 

student_id course_id grade birthday
20101661 1 56 1991,07,14
20101662 3 58 1993,7,25

这样设计不行,因为grade完全依赖于主码student_id、course_id,而birthday只依赖于部分主码student_id。所以要将其拆分成两个表

 

student(student_id, birdthday);

grade(student_id, course_id, birthday); 

course_id为联系student表的外键



第三范式(3NF):
要求一个数据库表中不包含已在其它表中已包含的非主关键字信息,在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。 个人总结: 不能有传递性

如以下表

 

student_id course_id birthday SD(所在系的名称) SL(所在宿舍楼)
20101661 1 1991,07,14 软件学院 1栋
20101662 3 1993,7,25 经管学院 2栋

 

student_id为主码,SL依赖于student_id,但可以从非主码属性SD导出,即知道了SD,也就知道了SL。可以奖这个表拆分成两个表,如下:

grade(student_id, course_id,SD);

department(SD, SL);

SD为 联系 grade表的主键


数据库的存储方式

顺序存放,平均查询次数为关系的记录个数的1/2;

杂凑存入,平均查询次数由杂凑算法决定;

索引存放,要确定建立何种索引,及建立索引的表和属性;

聚簇存放,记录聚簇是指将不同类型的记录分配到相同的物理区域中,以充分利用顺序性的优点,提高访问速度。



 

三大范式及存储方式


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论