数据库设计三大范式

数据三大范式:建立科学的,规范的的数据库是需要满足一些条件。

理解三大范式

第一范式

第一范式是表中的所有字段值都是不可分解的原子值否则,将有很多基本操作在这样的关系模式中实现不了。

第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到地址这个属性,本来直接将地址属性设计成一个数据库表的字段就行。但是如果系统经常会访问地址属性中的城 市部分,那么就非要将地址这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算 满足了数据库的第一范式。

 第二范式对象的单一性

确保表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。在一个表中,一个表中只能保存一种数据

比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示。

 

 

这样就产生一个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。

而如果把这个订单信息表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中,就非常完美了。如下所示。

第三范式[对象的纯粹性]

 个属性都跟主键有直接关系而不是间接关系。像:a-->b-->c  属性之间含有这样的传递关系,是不符合第三范式的。

比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)学号--> 所在院校 --> (院校地址,院校电话)

这样的表结构,我们应该拆开来,如下。(学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)

 

原文地址:https://www.cnblogs.com/sdpdf/p/4199145.html