数据库范式
数据库范式
数据库的设计可以分为以下几类:
-
第一范式
-
第二范式
-
第三范式
-
Boyce-Codd 范式
这些类别就像代理人一样,对设计的好坏进行分类
第一范式( 确保每列保持原子性)
第一范式是最基本的范式,简而言之,第一范式就是无重复的列。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式
第一范式的合理遵循需要根据系统的实际需求来 定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城 市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算 满足了数据库的第一范式,如下表所示。

第二范式(2NF) 属性完全依赖于主键( 消除部分子函数依赖)
第二范式
比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示。

这样就产生一个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。而如果把这个订单信息表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中,就非常完美了。如下所示。

第三范式(3NF) 属性不依赖于其它非主属性[ 消除传递依赖]
满足第三范式