之前在大学期间也学过三大范式清楚理论,但是在实际的工作中关于一些表的设计还是模棱两可;我方思自己应该是设计中的一些原则丢了,今天重新复习,将丢掉的原则找回来。
数据库设计的三大范式:
第一范式 1NF:
数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性;
自己的理解:主要是在列的维度看,在建立表的时候要保证每一列的值都是单一的、简单的; 如:手机号、邮箱; 如果出现一列如地址列不仅出现了地址还出现了电话,这样的设计存在违反第一范式
第二范式 2NF:
满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情
自己理解:主要是在单表的维度看,比如说一张订单表,一张订单表只能描述订单的信息,而且要知道订单的信息,只能通过订单id查询。
第三范式 3NF:
必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键)
自己理解:只要是从多表联合的情况来看, 比如一个订单表关联产品只能关联产品的id去查找产品的信息,不能包括初产品id外的其他产品信息。
小结: 通常情况下这种设计能够保证数据库表结构的简洁,表的关系对开发人员友好,但实际中我们开发的产品是给用户服务的,用户需要更好的体验其中就包括了响应速度,我们在范式原则设计的标志,需要关联各种关系进行查询,这样的情况导致了性能方面出现问题,导致出现矛盾。
结合实际情况:
- 在符合范式的基础上我们可以根据用户的操作,对于热点的一些数据,可以进行逆范式的设计;通过逆范式的实际来减少关联表的查询,从而提高响应速度,实际中多加权衡。