数据库设计需遵守的三大范式
大家好,我是猿猴小冷,今天给大家分享一下数据库设计需遵守的三大范式
文章目录
一、三大范式是什么?
第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。
第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。
第三范式:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF.
二、三大范式
1. 第一范式:要求数据库表的每一列都是不可分割的原子数据项
反例:以下表存在可再分项,一条订单存储了多个商品,不符合第一范式
修改后:把表拆分成订单表和订单细节表
2. 第二范式:要求一个表中只能存储一种数据,需要确保数据库表中的每一列都和主键相关
每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来,两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。
反例:如以下表出现冗余,不符合第二范式。
修改后:拆分成 订单细节表和产品表
3. 第三范式:需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
反例:以下表没有主键直接相关,不符合第三范式
修改后:拆分成 订单表和用户表
三、数据库的事务性
除了数据库设计三大范式之外,事务处理也是保证数据完整性的重要手段。事务是单独的工作单元,该单元可以包含多个操作以完成一个完整的任务。锁是在多用户环境中对数据访问的限制。事务和锁确保了数据的完整性。
1. 事务处理
提交commit,当所有的操作步骤都被完整执行后,称该事务被提交。
回滚rollback,由于某一操作步骤执行失败,导致所有步骤都没有被提交,则事务必须回滚,即回到事务执行前的状态。
2. 事务ACID属性
事务处理的特性,每一个事务都有他们所共有的特性,叫做ACID特性,分别是原子性atomicity,一致性consistency、隔离性Isolation,持久性Durability。
a. 原子性: 事务的原子性表示事务执行过程中,把事务作为一个工作单元处理,一个工作单元可能包括若干个操作步骤,每个操作步骤都必须完成才算完成,若因任何原因导致其中的一个步骤操作失败,则所有步骤操作失败,前面的步骤必须回滚。
b. 一致性: 事务的一致性保证数据处于一致状态。如果事务开始时系统处于一致状态,则事务结束时系统也应处于一致状态,不管事务成功还是失败。
c. 隔离性: 事务的隔离性保证事务访问的任何数据不会受到其他事务所做的任何改变的影响,直到该事务完成。
d. 持久性: 事务的持久性保证加入事务执行成功,则它在系统中产生的结果应该是持久的。