数据库三大范式和反范式

查阅数据库三大范式相关理论知识的过程中,我想起了某一次面试,面试官问我要设计一个学生管理系统,数据库这方面你想怎么设计。我当时噼里啪啦讲了好多具体怎么做,有什么表呀,什么字段呀,根据业务来具体决定之类的。面试官当时笑眯眯的,也不给个提示。现在想起来,大写的尴尬。其实业务上,你没做过相关行业,很难说的比较准确的。面试主要还是一些经验理论的解决方案,规范之类的,比如数据库表怎么设计,参数怎么调,字段怎么定义。实际工作中,我们设计数据库表也是会尽量多思考实际业务情况,尽量把表设计得好一点,可是工作归工作,面试归面试。做出来的东西都是需要理论等其他知识支撑的。

第一范式

每一列都是不可分割的原子项数据。这个很好理解,就是分得不能再分了。

比如详细地址,省市区街道,如果实际业务上是要具体到某一个省,某一个市,那么详细地址就要拆分出来具体到省、市,单独存省、市字段。

第二范式

实体唯一性,不存在部分依赖。

比如表: 学号,课程号,姓名, 学分

很明显,姓名是依赖于学号的,但是学分是依赖于课程号的,这种就需要单独的拆分出来。

变成表1:学号,姓名;表2:课程号,学分

第三范式

不能有传递依赖。

比如表:设备编号,设备名称,所属机构,所属机构名称

存在依赖(设备编号)-》(设备)-》(所属机构)-》(所属机构名称)

这样数据冗余,更新异常(同时修改多条记录)

所以这种情况也应该要拆分出来。

变成表1:设备编号,设备名称;表2:所属机构,所属机构名称

反范式

但实际工作中,往往不能尽善尽美。比如因为某个字段造成查询慢的问题,我们不得不把这个字段的信息冗余到一个表中,这就违反了三范式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值