数据库物理设计
设计的第一步是进行物理数据库表的设计,它不仅考虑功能性需求,还要考虑非功能性需求——响应时间和事务吞吐量。
物理表的设计基于之前
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
的E-R模型。物理数据库设计包括设计域,其中包括它们的数据类型和约束。还包括对实象的有效访问,可能需要分割类或者合并类,还需要增强性能的技术,比如索引。
一个关系数据库是一组相关的表。一个表可以表示一个实体类的数据部分。
一般地将E-R模型中的一个实体类对应一张物理表;但是也有很多例外。为了达到有效访问,可能要将两个或多个实体类合并为一个物理表,即“反
规范
编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载
化”。
一、设计域
域是由系统软件比如编程语言或数据库管理系统识别的应用数据的最小单位。在逻辑数据库设计(E-R模型)期间一般使用术语“属性”,在物理数据库设计期间一般使用术语“域”。
一个属性通常映射到一个域。然而,也有例外,有时一个属性需要映射为多个域。如姓名可以映射成“姓”和“名”;逻辑数据库模型(E-R)中的一个组合属性一般也映射成若干个域。
【例1】 一个EMPLOYEE关系:EMPLOYEE(Emp_ID,Name,……)
其中EMPNAME(雇员姓名)属性可能被表示为两个域: 姓、名:
Emp_ID 姓 名 …
或三个域:LASTNAME、FIRSTNAME和MIDDLEINIT:
Emp_ID LASTNAME FIRSTNAME MIDDLING …
【例2】 组合属性Address (地址〉,可以与主类存放在一张表中,创建为5个域: STATE、PROVINCE、CITY、STREET和ZIP。
1
EMPLOYEE_ID EMPLOYEENAME … STATE PROVINCE CITY STREET ZIP …
在对象关系数据库(如Oracle9i/10g)中,组合属性由类型表示。例如,NAME和ADDRESS各自可以被定义为类型。 在关系数据库中没有类型的定义。
二、选择数据类型
数据类型是由系统软件识别的表示数据的一种编码模式。编码模式对系统分析员通常无关紧要,但是存储数据的空间和访问数据所需的速度在数据库设计中很重要。
系统设计员需要熟悉软件可用的数据类型。如果Java和Oracle交互,它们两个中的数据类型有所不同,如果没有明确地处理,会导致不匹配错误。
选择一个数据类型要均衡下面4个目标,它们的重要程度将根据应用的不同而不同:
1.最小化存储空间。
2.表示域的所有可能值。
3.提高域的数据完整性。
4.支持域上想要的所有数据操作。
系统设计员要思考为一个域选择一个数据类型,能最小化空间、表示相关属性的每个可能的合法值,并且允许数据如需要的那样被操作。
2
三、控制数据完整性
通过限制一个域的值的可能范围来帮助控制数据完整性。5种普遍的数据完整性控制方法是:默认值、
格式
pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载
控制、范围控制、参照完整性和空值控制。
1.默认值。默认值是没有明确输入一个域的值时该域将采用的值(初值)。
2.格式控制。有些数据必须遵从
规定
关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定
的模式。格式是一种代码模式,它限制了一个域中的各个位置的宽度和可能值。
例如,一个产品号是4位字母数字字符,第一位是字母,接下来三位是数字,用格式A999定义,其中A的意思是只接受字母宇符,9的意思是只接受数字。
其他类型的格式控制可以用于格式化货币值、指明如何显示负数、消除前导 零,或对齐显示域空间中的值。
3.范围控制。数字和字母数据具有一个有限集合的允许值。
例如,一个售出产品域,其单位数量有一个下界0。
4.参照完整性。参照完整性最常见的是关系由外键维护时的对象关系之间的交叉引用。
例如,顾客订单 (CUST_ORDER)中的外键Customer_ID的值必须被限制于来自顾客(CUSTOMER)关系的Customer_ID值的集合。
, 顾客:CUSTOMER(Customer_ID,Cust_Name,Cust_Address)
, 顾客订单:CUST_ORDER(Order_Id,Customer_ID,Order_Date,……)
5.空值控制。空值是一个特殊的域值,不同于0、空白或任何其他值,它表明缺少,或者不知道该域的值。
四、设计物理表和反规范化
如果使用关系方法,表通过引用主键的外键联系在一起。
如果使用对象关系方法,那么表还可以用引用(或指针)联系起来。但是在数据库领域,它只是刚开始获得赞同。外键方法仍然是物理数据库设计的主题。
物理数据库的设计有两个不同于规范化的目标:
3
, 有效使用主存储器(内存)
, 数据处理快速
主存储器比辅助存储器(硬盘)的速度快得多,任何可能的时候,DBMS都尽量将数据保存在主存中。当数据所在的磁盘物理位置彼此接近时,操作系统执行的磁盘I/O操作最小,数据的处理最有效。一张物理表中的数据(所有行和行中的列)在磁盘上被靠近在一起存储。两张物理表,它们可能是被分开不同地方存放的,那么,进行跨两表的数据操纵所花的系统代价是很高的。
反规范化是根据行和域使用的密切关系并根据表的检索和更新频率将规范化关系合并为物理表的过程。
负面影响,反规范化增加了错误的可能性,和规范化尽力避免的不一致性。它以其他功能为代价,优化了某些数据处理功能。如果不同处理活动的频率改变了,那么反规范化的益处可能就不存在了。
在不同表的合并中,当表中的检索超过更新很多时,反规范化最有用。
考虑P328所示的反规范化表。这个表合并了来自P321所示的表EMP table和DEPT table
4
的数据。现在可以从一个表得到涉及来自两个表的数据的查询结果。
但是,反规范化的表有一些问题:它违反了第三范式,在域DNAME和LOC中有冗余,部门40的信息不能被表示,而且会有更新异常。
因而,考虑反规范化需要着眼于易访问和冗余与异常之间的折衷。
下面是反规范化可能合理的三种常见情况:
1. 一对一的两个实体关系,可以考虑将它们反
规划
污水管网监理规划下载职业规划大学生职业规划个人职业规划职业规划论文
为一张表。唯一的问题是,来自可选实体的域在反规范化关系中可能具有空值。
图11.6,学生(Student)与奖学金申请(ScholarshipApplication)两个一对一关系,
, Student(student_Id,stuName,application_Id)
, ScholarshipApplication(application_Id,applicationDate,qualifications资格证书)
反规划后,设计为一个表:
5
, Student(student_Id,stuName,application_Id,applicationDate,qualifications)
唯一的问题是,可能不是每个学生都申请一个奖学金。因为这些空值可能会造成一些浪费的空间。但是,不会因为合并引起冗余或异常问题,所以,一对一关系是反规范化的理想情形。
2.有非主键属性的一个多对多关系(关联关系),可以考虑将关联关系与其中一个多方反规划为一张表。
图11. 7显示了来自不同生产商的不同产品的最优报价。
有三个关系:
, Vendor(vendorId,vendorName,vendorAddress)
, Item(itemId,description)
, CanSupply(vendorId,itemId,bestPrice)
来自Item(商品)和CanSupply(能够供应)关系的域可能被合并为一个物理表CanSupplyDR,合并的原因可能是这两个表经常被一起访问,可以避免连接使用。
反规划后,设计为两个表:
, Vendor(vendorId,vendorName,vendorAddress)
, CanSupplyDR(vendorId,itemId,description ,bestPrice)
3.一个一对多关系,可以考虑将一方与多方反规划为一张表。
6
图11.8显示,一个顾客(Customer)属于一个地区(Region) ,一个地区可以有多个顾客。
, Customer(custId,custName,custAddress,custPhone,regionName)
, Region(regionName,regionManager)
Region数据应该被存储在Customer表中,反规划为一个:
, Customer(custId,custName,custAddress,custPhone,regionName,regionManager)
合并表的优点是避免了连接。不只是违反了第三范式,可能由于插入、更新导致完整性问题。
系和多对如果检索的数量远远超过插入和更新,反规范化将是有益的;否则,在一对多关多关系的情况中应该避免反规范化。
7