数据库设计三大范式

数据库设计三大范式

数据的概念

对象object,也称为实体型。在现实世界中具有相同性质、遵循相同规则的一类事物的抽象称为对象。对象是实体集数据化的结果,比如学生、老师、课程等是对象。

实例instance 是指对象中的每一个具体的事物,例如学生张三、李四。

属性attribute 是实体的某一方面特征的抽象表示,例如学生的姓名、性别、班级、年龄等。

主码primary key 能够唯一标识一个实体。

次码secondary key 指实体中不能唯一标识实体的属性。

域domain 指属性的取值范围,比如性别中的男、女。

完整性 指存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。

 


数据库三范式的意义:

      这也是为了数据库设计做准备,对于表设计而言,我们需求何种程度的设计,这完全取决你数据的规模,好比你建房子,要是建个一两层,基本上不需要什么设计,直接开工就行,要是建个这样的房子还找设计公司的话,这无疑是大材小用,浪费;但是,对建一座大厦来说,不做规划,不请教不咨询设计公司,后果难以想象了。

      当然,为了设计结构合理的数据库,必须遵循一定的规则,在关系数据库中这种规则就称为范式,范式是符合某一种设计要求的总结。

1.第一范式(1NF):确保每列保持原子性即列不可分


第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库满足第一范式。

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

上图所示的用户信息遵循第一范式的要求,这样对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能。

2.第二范式(2NF):属性完全依赖于主键(属性都是该对象拥有的)

第二范式在第一范式的基础上更进一层,第二范式需要确保数据库表中每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

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

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

利用对象之间的关系设计表,确认表的个数:而如果把这个订单信息表进行拆分,把商品信息分离到另一个表中,把订单项目表也分离到另一个表中,就非常完美了,如下图。

这里这样设计,在很大程度上减小了数据库的冗余,如果要获取订单的商品信息,使用商品编号到商品信息表中查询即可。

3.第三范式(3NF):属性和主键不能间接相关(减少数据冗余,这样就可以通过主外键进行表之间连接)

第三范式:数据不能存在传递关系,即每个属性都跟主键有直接关系而不是间接关系。像:a-->b-->c  属性之间含有这样的关系,是不符合第三范式的。第三范式是对第二范式的细化。

    比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系,而不可以在订单表中添加关于客户其他信息(比如姓名、所属公司)的字段,如下面这两个表所示的设计就是一个满足第三范式的数据库表。
比如在设计一个订单数据表的时候,可以将客户编号作为一个外键和订单表建立相应的关系,而不可以在订单表中添加关于客户其他信息(比如姓名、所属公司)的字段,如下面这两个表所示的设计就是一个满足第三范式的数据库表。

这样在查询订单信息的时候,就可以使用客户编号来引用客户信息表中的记录,也不必再订单信息表中多次输入客户信息的内容,减小了数据冗余。

例子:儿子的玩具车与玩具枪和爸爸是间接关系,应该拆为 两个表,通过儿子将两个表关联起来:

      

 因为上表的玩具车与玩具枪属于儿子,因此不符合第三范式,对上表进行拆分

    

————————————————
版权声明:本文为CSDN博主「dosthing」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dosthing/article/details/87954213

————————————————
版权声明:本文为CSDN博主「Bill Joy」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq30211478/article/details/78040519

原文地址:https://www.cnblogs.com/ryelqy/p/11592012.html