如题,面试的时候,被问到:数据库设计范式的理解?只记得在大学的离散数学中学过第一范式,第二范式,这些定义,工作中还没有舍身处地的使用过这些范式,也不知道在表结构的设计当中,应当如何注意这部分的内容?
麻烦这方面的大神指点一二,非常感谢~~~
如题,面试的时候,被问到:数据库设计范式的理解?只记得在大学的离散数学中学过第一范式,第二范式,这些定义,工作中还没有舍身处地的使用过这些范式,也不知道在表结构的设计当中,应当如何注意这部分的内容?
麻烦这方面的大神指点一二,非常感谢~~~
其实不仅仅只有三个范式,学校只教了三大范式。
对于理解的范式我觉得可以从以下几个方面入手
减少了数据的冗余,硬盘占有量下降,即提高了存储效率(范式出来的那个年代存储空间还是挺贵的)
增加数据的一致性。
抽象化,方便理解(实体-联系)
增加了查询检索的难度(那么多关联,写SQL想想也是醉了)
查询效率低
反范式到第一范式或者第二范式,通过冗余数据,加快查询数据
虽然存储效率低了,但是现在的存储空间成本还是比较低的。
增加查询速度,低价值的数据冗余了,对查询数据有很大提升
文档型数据库的出现(例如:mongodb),对于关系型数据库的冲击不言而喻。
就写这么多,有不对的地方还望指教。
三大范式就像定义一样使用即可,
即在数据库表设计时, 最基础的要考虑这三个范式, 第一 表字段final化,即 设计数据库表中字段时,一般不考虑抽象字段,即不考虑可再细分字段 如: 地址(不详细),信息(不详细) 地址可再分 国 市到具体 信息 也可有 姓名,年龄 等
字段关联化,无冗余, 该表独立,相关属性关联,使表为一体,映射良好, 不可表中字段混杂, 如 用户信息表中有购买记录,订单表中有年龄
最后一范式是直接关联, 范式考虑为递增有序,再满足前两范式,再考虑第三范式, 表中数据是否相互直接关联,字段直接是否存在依赖, 如有依赖一般不考虑
而有些特殊情况,又可以设计反三范式的表结构,这里就不多阐述了 也抛砖引玉一下
15 回答8.4k 阅读
8 回答6.2k 阅读
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
2 回答2.8k 阅读✓ 已解决
第一范式:所有字段值都是不可分解的原子值。如人员信息,地址这样的字段不满足第一范式,因为地址可以再细分为省份,城市等字段。
第二范式:每一列都和主键相关,而不能只与主键(联合主键)的某一部分相关。
第三范式:第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。