mysql 设计三范式

你别看我平时对你,一副漠不关心的样子,其实背地里说了你很多坏话。

 

mysql 数据库设计规范一般遵循三大范式 NF(Normal Form),数据库的范式设计得越高阶,冗余度就越低,同时高阶的范式一定满足低阶的范式的要求。

第一范式

1NF,强调的是列的原子性,也就是列不能再被分割。

例如:如电话列可进行拆分---家庭电话、公司电话

 

第二范式

2NF,首先是 1NF,另外包含两部分内容,一是表必须有主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。

例如:订单表(订单编号、产品编号、定购日期、价格、……),"订单编号"为主键,"产品编号"和主键列没有直接的关系,即"产品编号"列不依赖于主键列,应删除该列。

 

第三范式

3NF,首先是 2NF,目标是确保每列都和主键列直接相关,而不是间接相关(另外非主键列必须直接依赖于主键,不能存在传递依赖)。

例如:为了理解第三范式,需要根据Armstrong公里之一定义传递依赖。假设A、B和C是关系R的三个属性,如果A-〉B且B-〉C,则从这些函数依赖中,可以得出A-〉C,如上所述,依赖A-〉C是传递依赖。例如:订单表(订单编号,定购日期,顾客编号,顾客姓名,……),初看该表没有问题,满足第二范式,每列都和主键列"订单编号"相关,再细看你会发现"顾客姓名"和"顾客编号"相关,"顾客编号"和"订单编号"又相关,最后经过传递依赖,"顾客姓名"也和"订单编号"相关。为了满足第三范式,应去掉"顾客姓名"列,放入客户表中。

 

总结:

第一范式:确保每列的原子性
第二范式:非主键列完全依赖着主键列
第三范式:非主键列之间不存在依赖关系

 

范式的优缺点:

优点:范式可以避免数据冗余,减少数据库的空间,减少维护数据完整性的麻烦;

缺点:按照范式的规范设计出来的表,等级越高的范式设计出来的表越多;

 

反范式

故名思义,跟范式所要求的正好相反,在反范式的设计模式,我们可以允许适当的数据的冗余,用这个冗余去取操作数据时间的缩短。也就是用空间来换取时间,把数据冗余在多个表中,当查询时可以减少或者是避免表之间的关联。

 

反范式的优缺点:

优点:查询时可以减少表的关联,可以更好的进行索引优化;

缺点:存在数据冗余以及数据维护异常;对数据的修改需要更多的成本;

 

posted @ 2022-01-18 08:56  方达达  阅读(17)  评论(0编辑  收藏  举报