数据库设计教程系列——数据库范式2014-09-17 17:44:33 请关注唯心的个人微信公众号:craft6-cn(中划线,也可以搜索:领域驱动业务建模)一、概述设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式. 各种范式呈递次规范,越高的范式数据库冗余越小。 目前关系数据库有六种范式: 第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,还又称完美范式)。 范式的严格程度按上面的位置依次递增,后面的范式必须在满足前面范式的基础上增加该范式独有规范才能称为该范式。
各范式的关系如下图: 二、第一范式 第一范式:确保每一列的值的原子性、不可分割性。或者说:每个属性仅包含一个单一值。
如电子商务的购物车表,设计成如下图: 一个产品SKU ID + 数量 就是一组,从表中可以看到,顾客最多只能选购3个产品,从数据模型的角度 三、第二范式 第二范式:所有非主码属性完全依赖候选码。 (注:候选码就是唯一决定一条记录的1个字段或多个字段的组合,所以可以是主键、复合主键 或 唯一键等) 检查是否满足第二范式有下面几种方式:
四、第三范式 第三范式:所有非主码属性都是相互独立的,或者说非主码属性对主码的依赖是直接的,而不能间接的。 比如 A、B 是非主码,C是主码。不可以A 依赖 B,B 依赖 C。必须A 、B 均直接依赖 C。A 、B 之间 相互独立,不存在依赖关系。 检查是否满足第三范式有下面几种方式:
增加派生属性、冗余属性都有利于提高查询效率,但是有些时候需要通过代码来维护数据的完整性。 在实践中,第三范式往往会因为查询效率而违反,而这个违反有时是有益的。 五、BCNF范式BCNF范式是基于第三范式的基础上,满足下列条件:
如下图:
六、第四范式 第四范式:独立的重复组不应该被组合在一个关系中。 简单而言,就是不要设计多值属性。 在实际设计中,我们会使用字符串类型来维护一个多值,比如可选尺寸,可选数量等。 值之间通过逗号(或其它符号)分隔等。这种设计是不符合第四范式的。 解决的方法就是将多值属性分离成一个独立的表来管理。 比如下图: 对于C6_EAV_ATTR【属性】表而言,当数据类型是可选项时,如果设计一个字段通过逗号分隔的方式 维护可选值,则不符合第四范式。如果按图中所示,将选项独立出来(属性选项表),则符合第四范式。 在实践中,是否要满足第四范式,还是要看该多值属性的数据复杂度,以及以后扩展要求是否高。 如果比较复杂,扩展要求高,则建议分离出来,满足第四范式。 七、第五范式 第五范式用来处理“连接依赖”的情况,该情况很少出现,所以一般我们都用不到第五范式。 第五范式:当存在3个实体存在循环连接时,将该循环连接产生的三元关系分解而3个二元关系。 如下图: 如果业务满足这些约定:客户在商家购买产品(在商家购买的只能是产品,产品只能从商家购买), 则该联系是成立的。但是如果业务并不仅是如此,比如客户可以从其它途径(如平台)购买产品, 或者客户从商家可以购买服务(而服务并没有设计为产品的一类),那么该联系就不成立了, 就不符合第五范式了。 解决方式,就是中间的三元关系,拆分为3张二元关系表,分别是客户-商家、客户-产品、商家-产品。 这里就不再贴图了。 ![]() 1 数据库设计教程系列——相关知识点整理 2 数据库设计教程系列——基本概念(关系模型、实体、联系、域和属性) 3 数据库设计教程系列——数据库范式 4 数据库设计教程系列——数据库设计流程 5 数据库设计教程系列——数据流图 6 数据库设计教程——数据字典 7 数据库设计教程——E-R实体联系图 8 数据库设计教程——物理模型和表创建 9 数据库设计教程——物理模型设计模式 分享到: 为您推荐这些文章,如果感兴趣,请继续阅读吧:数据库设计教程系列——数据库范式数据库设计范式,第一范式,第二范式,第三范式,BCNF范式,第四范式,第五范式本文阐述了数据库设计中的六种范式,包括对各个范式的定义、 检查方式、解决方式等说明。同时也说明了在实践中,对于各个 范式的使用情况。 |
粤ICP备14060523号 Copyright @2014 -唯心六艺软件 |