面试时候问:数据库设计范式的理解

如题,面试的时候,被问到:数据库设计范式的理解?只记得在大学的离散数学中学过第一范式,第二范式,这些定义,工作中还没有舍身处地的使用过这些范式,也不知道在表结构的设计当中,应当如何注意这部分的内容?

麻烦这方面的大神指点一二,非常感谢~~~

阅读 4.6k
3 个回答
  • 第一范式:所有字段值都是不可分解的原子值。如人员信息地址这样的字段不满足第一范式,因为地址可以再细分为省份,城市等字段。

  • 第二范式:每一列都和主键相关,而不能只与主键(联合主键)的某一部分相关。

  • 第三范式:第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

其实不仅仅只有三个范式,学校只教了三大范式。
对于理解的范式我觉得可以从以下几个方面入手

范式的作用

  • 减少了数据的冗余,硬盘占有量下降,即提高了存储效率(范式出来的那个年代存储空间还是挺贵的)

  • 增加数据的一致性。

  • 抽象化,方便理解(实体-联系)

范式的缺点

  • 增加了查询检索的难度(那么多关联,写SQL想想也是醉了)

  • 查询效率低

反范式的出现

  • 反范式到第一范式或者第二范式,通过冗余数据,加快查询数据

  • 虽然存储效率低了,但是现在的存储空间成本还是比较低的。

  • 增加查询速度,低价值的数据冗余了,对查询数据有很大提升

无范式的出现

  • 文档型数据库的出现(例如:mongodb),对于关系型数据库的冲击不言而喻。

就写这么多,有不对的地方还望指教。

三大范式就像定义一样使用即可,
即在数据库表设计时, 最基础的要考虑这三个范式, 第一 表字段final化,即 设计数据库表中字段时,一般不考虑抽象字段,即不考虑可再细分字段 如: 地址(不详细),信息(不详细) 地址可再分 国 市到具体 信息 也可有 姓名,年龄 等
字段关联化,无冗余, 该表独立,相关属性关联,使表为一体,映射良好, 不可表中字段混杂, 如 用户信息表中有购买记录,订单表中有年龄

最后一范式是直接关联, 范式考虑为递增有序,再满足前两范式,再考虑第三范式, 表中数据是否相互直接关联,字段直接是否存在依赖, 如有依赖一般不考虑

而有些特殊情况,又可以设计反三范式的表结构,这里就不多阐述了 也抛砖引玉一下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题