数据库设计范式实例:假设某建筑公司要设计一个数据库。公司的业务规则概括说明如下:
公司承担多个工程项目,每一项工程有:工程号、工程名称、施工人员等;
公司有多名职工,每一名职工有:职工号、姓名、性别、职务(工程师、技术员)等;
公司按照工时和小时工资率支付工资,小时工资率由职工的职务决定(例如,技术员的小时工资率与工程师不同)。
公司定期制定一个工资报表,如图-1所示。
显然上表并不是一个数据库中的表,只是一个书面的表格。现对其设计成为数据库中间的表。如下图在数据库中有一个这样的表。
但是该表也存在如下问题:
表中包含大量的冗余,可能会导致数据异常:
a.更新异常 例如,修改职工号=1001的职务,则必须修改所有职工号=1001的行。
b.添加异常 若要增加一个新的职工时,首先必须给这名职工分配一个工程。或者为了添加一名新职工的数据,先给这名职工分配一个虚拟的工程。(因为主关键字不能为空)
c.删除异常 例如,1001号职工要辞职,则必须删除所有职工号=1001的数据行。这样的删除操作,很可能丢失了其它有用的数据。
现可以对以上表进行重新设计:
用函数依赖图表示所有属性之间存在的函数依赖关系,如图3所示。
1. 图上方的箭头表示关键属性决定非关键属性。
2. 图下方的箭头表示属性之间的函数依赖性。
职工信息表:
职工号 |
姓名 |
职务 |
1001 |
齐光明 |
Q01 |
1002 |
李思岐 |
Q02 |
1003 |
鞠明亮 |
Q03 |
1004 |
葛宇洪 |
Q04 |
职务工资表
职务编号 |
职务名称 |
小时工资率 |
Q01 |
工程师 |
65 |
Q02 |
技术员 |
60 |
Q03 |
工人 |
55 |
工程项目表:
工程号 |
工程名 |
A1 |
花园大厦 |
A2 |
立交桥 |
A3 |
临江饭店 |
职工参与工程项目表
编号 |
工程号 |
职工号 |
工时 |
1 |
A1 |
1001 |
13 |
2 |
A1 |
1002 |
16 |
3 |
A1 |
1004 |
19 |
4 |
A2 |
1001 |
15 |
5 |
A2 |
1003 |
17 |
6 |
A3 |
1002 |
18 |
7 |
A3 |
1004 |
14 |
另外,
数据库的物理设计要从优化操作系统、磁盘布局优化和配置、数据库初始化参数的选择、设置和管理内存、设置和管理CPU、设置和管理表空间、设置和管理回滚段、设置和管理联机重做日志、设置和管理归档重做日志、设置和管理控制文件等几个方面来考虑。
时间: 2024-10-13 21:18:28