数据库设计规范(详细)

15 篇文章 2 订阅
11 篇文章 1 订阅

数据规范化设计

一、数据规范化

  仅有好的RDBMS并不足以避免数据冗余,必须在数据库的设计中创建好的表结构
Dr E.F.codd 最初定义了规范化的三个级别,范式是具有最小冗余的表结构
这些范式是:
1、第一范式(1st NF -First Normal Fromate)
2、第二范式(2nd NF-Second Normal Fromate)
3、 第三范式(3rd NF- Third Normal Fromate)

第一范式 (1st NF):
在这里插入图片描述
第一范式的目标是确保每列的原子性
如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)
 
第二范式 (2nd NF):
在这里插入图片描述
如果一个关系满足1NF,并且除了主键以外的其他列,都依赖与该主键,则满足第二范式(2NF)
第二范式要求每个表只描述一件事情
 
第三范式 (3rd NF):
在这里插入图片描述
如果一个关系满足2NF,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式(3NF)

二、规范化实例

假设某建筑公司要设计一个数据库,公司的业务规则概括说明如下:

1、公司承担多个工程项目,每一项工程有:工程号、工程名称、施工人员等
2、公司有多名职工,每一名职工有:职工号、姓名、性别、职务(工程师、技术员)等
3、公司按照工时和小时工资率支付工资,小时工资率由职工的职务决定(例如,技术员的小时工资率与
工程师不同)
4、公司定期制定一个工资报表

如图所示(工资表):
在这里插入图片描述
如图所示(工时表):
在这里插入图片描述
表中包含大量的冗余,可能会导致数据异常:
更新异常 :
------例如,修改职工号=1001的职务,则必须修改所有职工号=1001的行

添加异常:
------若要增加一个新的职工时,首先必须给这名职工分配一个工程。或者为了添加一名新职工的数据,先给这名职工分配一个虚拟的工程。(因为主关键字不能为空)

删除异常:
------例如,1001号职工要辞职,则必须删除所有职工号=1001的数据行。这样的删除操作,很可能丢失了其它有用的数据

采用这种方法设计表的结构,虽然很容易产生工资报表,但是每当一名职工分配一个工程时,都要重复输入大量的数据。这种重复的输入操作,很可能导致数据的不一致性。
 
应用范式规范化设计
一张表描述了多件事情
在这里插入图片描述
应用第二范式规范化
在这里插入图片描述
应用第三范式规范化
在这里插入图片描述

四、规范化和性能的关系

1、为满足某种商业目标,数据库性能比规范化数据库更重要
------通过在给定的表中添加额外的字段,以大量减少需要从中搜索信息所需的时间
------通过在给定的表中插入计算列(如成绩总分),以方便查询

2、进行规范化的同时,还需要综合考虑数据库的性能


请添加图片描述

  • 14
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值