从第一范式(2nf)到第二范式(3nf)_认识数据表的3个范式,轻松建立规范数据表

Access 数据表从外观上与 Excel电子表格十分相似, 而实际上, 两者有着本质上的区别。 因为, Access 数据表和 Excel 电子表格面向的对象是完全不同的。

Excel 完全面向电子表格, 它鼓励用户尽量将所有的数据都放在一个表格之中, 如果 Access 数据表也跟Excel 一样, 就会出现以下问题。

  • 表不可控制地增长: 例如, 将所有的信息都包含在同一个表中,如果表中的某个字段又包含若干个属性, 这些属性又需要分别用字段表示出来, 就会使表中的字段不可控制地增长。
  • 数据维护和更新困难: 如果需要对某个字段进行修改, 就需要对整个表进行搜索, 然后逐一修改。如果需要输入一条新的记录, 需要输入的字段就很多, 但是其中大部分都是重复无用的数据。
  • 极大的资源浪费: 在一个表中保存所有的数据, 必定会存在大量的冗余数据, 会浪费磁盘的空间。在使用数据时, 对数据进行操作时, 也会大量浪费内存、 网络等资源。

所以, 在设计数据库中使用的表时, 需要对其进行一定的规范化处理,只有这样, 才能设计出性能优良的数据库应用程序。

在关系型数据库中, 设计数据库必须遵循一定的规则, 这些规则就是范式。 目前, 关系型数据库有 6 种范式, 分别是第一范式(1NF)、 第二范式(2NF)、 第三范式(3NF)、第四范式(4NF)、 第五范式(5NF)和第六范式(6NF)。

满足最低要求的范式称为第一范式, 在第一范式的基础上, 满足更多条件的称为第二范式, 以此类推。

虽然关系型数据库有 6 种范式,但是在实际的使用过程中, 一般只需要满足前 3 种范式就可以制作出性能优良的数据库, 所以只需要了解前 3种范式。

1.第一范式

规范化的第一个阶段为第一范式, 这是所有关系型数据库必须满足的基本条件, 具体的要求是: 表中的每一个元素只能包含一个唯一值。

1NF 包含有两层含义。第一层含义是表中的第一个字段只能包含一个属性, 即每一个字段只能有一个值。

如下图所示, 该表中的联系方式字段中包含了两个值, 就是一个不满足 1NF 的表。

47c91005eab1737cf9c3ec994a86b563.png

如果要让上表满足 1NF, 解决的方法有两种。

第一种: 将联系方式字段拆分为两个字段, 如下图所示。

ea9a48e4effb191a7213484cf2c63356.png

第二种: 将包含两个联系方式的记录拆分为两条记录,如下图所示。

834d94e7c328f24b2b32cabd65e7c6b4.png

1NF 的第二层含义是不能有两个完全相同的字段, 如第一种的图片所示的【联系方式】 字段, 如果直接拆分为两个联系方式字段, 就不能满足要求。

2.第二范式

满足 1NF 之后的表就可以在关系数据库中使用了, 但仅满足 1NF的表还是会存在诸多问题。

例如,下图中的销售表, 由货号、 工号、 姓名、 部门、 商品名称、 销售数量、 价格和总价几个字段组成, 主键由货号和工号构成, 每一个字段都是一个完全独立的属性, 符合 1NF。

dbc6948c6472876bd56e404a9144bd6c.png

虽 然 上图的 表 格 看 似 符 合1NF, 但在使用时仍然会出现诸多问题, 简单分析一下, 可能会出现的问题有以下几个。

¬ 数据冗余: 某些员工的姓名出现了多次, 商品名称也出现了多次,导致同一种商品的价格也出现了多次。

  • 更新异常: 如果需要对其中的某些数据进行更新, 则需要对整个表格进行搜索, 否则就可能出现异常。 例如, 要将洗发水的价格更改为"45", 则需要对所有销售了洗发水的员工进行查找和修改,否则就会出现一种商品对应两个价格的情况。
  • 插入异常: 如果某个员工没有销售某件商品, 则销售数量为空,这个员工的信息就不能被输入到表格中。
  • 删除异常: 如果某个员工的销售记录错误, 需要删除, 在删除这条记录的时候, 会将员工的基本信息一起删除。

想要避免销售表中出现这些问题, 就需要了解数据库第二个规范化的要求, 即第二范式(2NF)。

第二范式的具体内容是: 每一个非主键关键字完全依赖于主键。

根据 2NF 来分析销售表可以发现,【价格】字段完全依赖于主键【货号】 和【销售数量】, 而【姓名】【部门】 字段依赖于【工号】, 而【总价】依赖于【销售数量】 和【价格】, 所以【销售表】 并不符合 2NF。

如果想让销售表符合 2NF, 需要将其拆分为员工、 商品和各产品的销售情况这样几张表, 拆分后的效果如下图所示。

22d40962cc67e5d892f13d56f11a389a.png

3.第三范式

规范化的最后一步称为第三范式(3NF), 它要求移除所有可以派生自表中其他字段包含的数据的字段。

满足 2NF 的表已经是一个合格的数据表, 但是, 满足了 2NF 的表仍然可能会存在一定的问题。

如下图中的【商品信息表】中,主键为商品编码, 其余所有字段数据都依赖于商品编码。

a94b79e94a8a99564c16bac1aa34c029.png

但是, 分析表中的字段时, 还可以发现除【分厂地址】 和【分厂电话】依赖于主键外, 其中不包含其他表中已包含的非主键字段。

所以,上图中的表并不符合3NF, 如果数据库中没有其他表, 要使该表符合 3NF, 可以将其拆分为如下图的【商品信息】 表和下图所示的【分厂信息】 表。

82fdd2e7c31417382a68a81fcccece1d.png
4d833f508bf07526c78fc6ae3dc77194.png
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值