三大范式及存储方式

数据库三大范式

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

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

姓名思想道德素质测评(20%) 专业素质测评(60%) 
基础分奖励分惩罚分最后得分排名 必修课成绩 奖励分惩罚分最后得分排名
得分排名
张三780078271.7100.071.71
王五780078271.3240.00.071.32
李四780078270.8250.02.068.83

而这样设计是可以的:

姓名C语言javaMySQLOracle
张三78886878
王五78558778
李四78869156


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

student_idcourse_idgradebirthday
201016611561991,07,14
201016623581993,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_idcourse_idbirthdaySD(所在系的名称)SL(所在宿舍楼)
2010166111991,07,14软件学院1栋
2010166231993,7,25经管学院2栋

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

grade(student_id, course_id,SD);

department(SD, SL);

SD为联系grade表的主键


数据库的存储方式

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

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

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

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



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值