数据库设计三大范式

数据库设计三大范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

                 

在实际开发中最为常见的设计范式有三个:

1.第一范式(确保每列保持原子性)

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

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

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

符合第一范式式的特点:

1)有主关键字

2)主键不能为空,

3)主键不能重复,

4)字段不可以再分

               

2.第二范式(确保表中的每列都和主键相关),消除部分依赖(某一字段的值依赖联合主键的其中部分字段)

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

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

 订单信息表

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

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

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

                 

3.第三范式(确保每列都和主键列直接相关,而不是间接相关),消除传递依赖(某一列依赖非主键的另外一列)

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关

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

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

http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html

http://www.cnblogs.com/GISerYang/archive/2012/05/09/2491996.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库设计三⼤范式 数据的概念 数据的概念 对象object,也称为实体型。在现实世界具有相同性质、遵循相同规则的⼀类事物的抽象称为对象。对象是实体集数据化的结果,⽐如学 ⽣、⽼师、课程等是对象。 实例instance 是指对象的每⼀个具体的事物,例如学⽣张三、李四。 属性attribute 是实体的某⼀⽅⾯特征的抽象表⽰,例如学⽣的姓名、性别、班级、年龄等。 主码primary key 能够唯⼀标识⼀个实体。 次码secondary key 指实体不能唯⼀标识实体的属性。 域domain 指属性的取值范围,⽐如性别的男、⼥。 完整性 指存储在数据库的所有数据值均正确的状态。如果数据库存储有不正确的数据值,则该数据库称为已丧失数据完整性。 什么是范式 什么是范式 当⼀个关系的所有分类都是不可再分的数据项时,该关系是规范化的。不可再分的数据项,即不存在组合数据项和多项数据项。⼀ 个低⼀级的关系模式,通过模式分解可以转换为若⼲⾼⼀级范式的关系模式的集合,这个过程就叫规范化。⼆维数据表可以分为5级范式为 1NF、2NF、3NF、4NF、5NF。第⼀范式满⾜最低的要求条件,第五范式满⾜最⾼要求的条件。 第⼀范式条件:必须不包含重复组的关系,即每⼀列都是不可拆分的原⼦项。 如以下表存在可再分项(⾼级职称),所以不满⾜第⼀范式 ⾮规范化转换为规范化的第⼀范式⽅法很简单,将表分别从横向、纵向展开即可。将⾼级职称横向展开即可以得到满⾜第⼀范式的表结构。 第⼆范式条件:关系模式必须满⾜第⼀范式,并且所有⾮主属性都完全依赖于主码。注意,符合第⼆范式的关系模型可能还存在数据冗余、 更新异常等问题。 举例如关系模型(职⼯号,姓名,职称,项⽬号,项⽬名称),职⼯号->姓名,职⼯号->职称,⽽项⽬号->项⽬名称。显然依赖关 系不满⾜第⼆范式,常⽤的解决办法是差分表格,⽐如拆分为职⼯信息表和项⽬信息表。 第三范式的条件:关系模型满⾜第⼆范式,所有⾮主属性对任何候选关键字都不存在传递依赖。即每个属性都跟主键有直接关系⽽不是间接 关系,像:a-->b-->c。⼀般数据库设计,⼀般要求达到3NF,第四第五较少涉及。 ⽐如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)这样⼀个表结构,就存在上述关系。 学号--> 所在院校 --> (院校地址,院校电话)。我们应该拆开来,如下: (学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话) 数据库的事务性 数据库的事务性 除了数据库设计三⼤范式之外,事务处理也是保证数据完整性的重要⼿段。事务是单独的⼯作单元,该单元可以包含多个操作以完成 ⼀个完整的任务。锁是在多⽤户环境对数据访问的限制。事务和锁确保了数据的完整性。 事务处理 提交commit,当所有的操作步骤都被完整执⾏后,称该事务被提交。 回滚rollback,由于某⼀操作步骤执⾏失败,导致所有步骤都没有被提交,则事务必须回滚,即回到事务执⾏前的状态。 事务ACID属性 事务处理的特性,每⼀个事务都有他们所共有的特性,叫做ACID特性,分别是原⼦性atomicity,⼀致性consistency、隔离性 Isolation,持久性Durability。 1. 原⼦性,事务的原⼦性表⽰事务执⾏过程,把事务作为⼀个⼯作单元处理,⼀个⼯作单元可能包括若⼲个操作步骤,每个操作步骤 都必须完成才算完成,若因任何原因导致其的⼀个步骤操作失败,则所有步骤操作失败,前⾯的步骤必须回滚。 2. ⼀致性,事务的⼀致性保证数据处于⼀致状态。如果事务开始时系统处于⼀致状态,则事务结束时系统也应处于⼀致状态,不管事务 成功还是失败。 3. 隔离性,事务的隔离性保证事务访问的任何数据不会受到其他事务所做的任何改变的影响,直到该事务完成。 4. 持久性,事务的持久性保证加⼊事务执⾏成功,则它在系统产⽣的结果应该是持久的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值