第十一章 数据库设计
1、数据库设计概述:数据库设计属于系统设计的范畴。参照软件工程对生命周期的定义,也把数据库设计分为6个步骤:数据库规划、需求收集分析、数据库设计与应用程序设计、实现、测试、运行与维护。
数据库设计:数据库的设计是对用户数据的组织和存储设计;应用程序的设计是在数据库设计的基础上对数据操作及业务实现的设计,包括事务设计和用户界面设计。
实现:依照设计使用DBMS支持的DDL语言实现数据库的定义,用高级程序语言编写应用程序。
2、系统需求分析,是用户和设计人员对数据库应用系统所涉及的内容和功能的理解和描述。
用户对系统的需求包括:数据需求、围绕这些数据的业务处理需求、数据安全性需求、数据完整性需求。
需求分析阶段是以调查和分析为主要手段的,以此获得用户对系统的信息要求和处理要求。
需求分析阶段要完成的主要工作是建立数据字典和数据流图。
需求分析的方法和步骤:使用数据字典描述用户的信息要求,使用数据流图描述业务处理过程。
数据字典包括,数据项、数据结构、数据流、数据存储、处理过程。
数据项:是数据的最小单位,一般包括项名、含义和说明、别名、类型、长度、取值范围及该项与其它项的逻辑关系。如采购单号;
数据结构:是若干有意义的数据项的集合,包括数据结构名、含义和组成成分。如采购单;
数据流:既可以是数据项也可以是数据结构,它表示某一次处理的输入输出数据,包括数据流名、说明、数据来源和去向及需要的数据项和数据结构。如采购计划数据流;
数据存储:加工中需要存储的数据,包括数据存储名、说明、输入数据流、输出数据流、组成成分、数据量、存取方式以及存取频度等。如原材料的价目表,在计算成本和支付采购费用的处理过程中要用到这些数据;
处理过程:是加工处理过程的定义和说明,包括处理名称、输入数据、输出数据、数据存储及响应时间等,如采购支付处理。
------------------------
处理过程名: 采购支付
说明: 根据采购单、原材料价目表,计算出应付原材料采购费用
输入数据: 采购单
数据存储: 原材料价目表
输出数据: 支付费用表
------------------------
3、概念结构设计,是在需求分析的基础上,对用户信息加以分类、聚集和概括,建立信息模型,并依照选定的数据库管理系统软件把它们转换为数据的逻辑结构,再依照软硬件环境,最终实现数据的合理存储。这一过程被称为“数据建模”。
数据建模的过程,可以分为3个阶段:概念结构设计、逻辑结构设计、物理结构设计。
概念结构设计的策略有4种:自顶而下、自底而上、逐步扩张、混合策略。
概念结构设计最常用的方法是1976年由一位华人学者提出的E-R方法。将现实世界的信息结构统一由实体、属性及实体之间的联系来描述。
使用E-R方法时,需要对现实事物抽象并以E-R图的形式描述出来,有3种抽象的方法:
分类, 将现实世界中具有共同特征和行为的事物定义为一种类型。个体与类型关系是is member of
聚集, 定义某一类型所具有的属性。各个属性是所属类型的一个成分,is part of
概括, 由一种已知类型定义新的类型。已知类称为超类,新定义类称为子类,关系为is subset of
4、用E-R方法建立概念模型
步骤:选择局部应用;逐一设计分E-R图;E-R图合并。
注意属性与实体的区别:属性不可再分;属性不能与其它实体发生联系。
分E-R图的合并方法就是将具有相同实体的两个或多个E-R图合而为一。合并过程中可能会发生的冲突有:属性冲突、命名冲突、结构冲突。
对合并后的E-R进行优化的方法有3个:
1)实体类型的合并, 凡具有1:1或1:n联系的实体都可以合并,减少实体个数;
2)冗余属性的消除;
3)冗余联系的消除, 合并后的E-R图中可能会出现实体联系的环状结构,消除直接联系,保留间接联系。
5、逻辑结构设计,是在概念结构设计基础上进行的数据模型设计,可以是层次、网状和关系模型。逻辑结构设计的主要任务是:
确定数据模型;
将E-R图转换为指定的数据模型;
确定完整性约束;
确定用户视图。
6、E-R图向关系模式的转换:
1)实体向关系模式的转换
将E-R图中的实体逐一转换为一个关系模式,其中实体名对应关系模式的名称,实体的属性转换成关系的属性,实体标识符就是关系的码。
2)联系向关系模式的转换
一对一联系的转换:有2种方式。
一种方式,是将联系转换成一个独立的关系模式,关系模式的名称取联系的名称,关系的属性包括该联系所关联的两个实体的码和联系的属性,关系的码可以取自任一方实体的码;
另一种方式,是将联系归并到关联的两个实体的任一方,在一方实体属性集中增加另一方实体的码和该联系的属性,归并后的实体码保持不变。
一对多联系的转换:有2种方式。
第一种方式,是将联系转换成一个独立的关系,关系的名称取联系的名称,关系的属性包括该联系所关联的两个实体的码和联系的属性,关系的码是多方实体的码;
第二种方式,是将联系归并到关联的两个实体的多方,在待归并的多方实体属性集中增加一方实体的码和该联系的属性,归并后的多方实体的码保持不变。
多对多联系的转换:只有1种方式。
那就是将该联系转换成一个独立的关系,关系的名称取联系的名称,关系的属性包括该联系所关联的两个多方实体的码及该联系的属性,关系的码是两个多方实体的码构成的属性组。
7、关系模式的规范化
由E-R图转换得来的初始关系模式可能会有数据冗余或更新异常,需要进一步得进行规范化处理:
1)根据语义确定各关系的数据依赖;
2)根据数据依赖确定关系的范式;
3)对不合要求的范式进行分解,达到3NF、BCNF或4NF;
4)对关系进行评价和修正。因为最规范的关系不一定是最合适的关系。
关系的完整性约束有:主码约束、检查约束、参照性约束
8、数据库的物理设计
物理设计一般应做这些工作:
确定数据分布;
确定存储结构;
确定存取方式。
存储结构是指数据文件中记录之间的物理结构,可以是顺序存储、哈希存储、堆存储或B+树存储等。要根据数据的处理要求和变更频度,选定合理的物理结构。
为提高数据的访问速度,会采用索引技术。同样也要根据数据处理和修改要求,选择恰当的索引字段和类型。
数据的存取方式,是由其存储结构决定了的。
9、数据系统的实现,是根据设计,由开发人员编写代码程序来完成的,包括数据库的操作程序和应用程序。
数据库的操作程序使用SQL语言实现,主要有:DDL、DML、事务处理程序、存储过程、触发器。
嵌入式SQL因为其复杂性,已逐惭被ODBC、ADO接口技术取代。
10、数据库系统的实施方法:
建立实际的数据库结构(DDL)
装载测试数据试运行
装载数据,即卸载实验数据,加载用户数据,正式运行。
11、数据库的保护,是通过数据库的恢复、安全性控制、完整性控制、并发控制,来实现的。
事务,是数据库处理的基本逻辑单位,事物的原子性、一致性、隔离性和持久性(简称ACID)保证了数据更新的正确性。面向数据更新的应用程序的编写,必须以事务为单位进行数据的操作。
数据库的备份与恢复:
数据备份与日志备份是数据库恢复技术的主要依据。数据备份又称为数据转储,分为静态和动态两种方式。日志备份用来记录对数据库系统的更新操作,写日志的次序严格按照并发事务执行的时间次序,必须先写日志后写数据库。
数据库系统中的故障类型:事务故障、系统故障、介质故障。
恢复策略:有2种操作,分别是撤销事务(UNDO)和重做事务。
事务故障的恢复:可以UNDO产生故障的事务,回到该事务执行前的正确状态;
系统故障的恢复:系统故障会导致数据库不一致,恢复方法是先UNDO未完成的事务,再REDO已提交的事务;
介质故障的恢复:需要DBA参与,重装数据库、装入数据库的备份和日志文件的副本,再由系统完成UNDO、REDO操作。
数据库的安全性,是保证数据库不被非法用户访问和破坏的机制。包括:权限机制(GRANT)、视图机制、数据加密。数据加密可以防止数据在存储和传输过程中失密。
数据库的完整性,是保证数据库不被合法用户的错误操作而破坏。完整性是指数据的正确性和相容性。
数据库的并发控制:
1)并发操作,可能会带来数据的不一致性有3种,丢失修改、不可重复读和读脏数据。
2)加锁:控制的手段就是加锁。排他锁(写锁X)和共享锁(读锁S)。X锁将独占数据,数据上有S锁时事务只能加S锁读而不能加X锁写。
3)封锁协议:
一级封锁协议,事务T在修改数据A前必须先对A加X锁,直到事务结束才能释放X锁。这样解决了丢失修改的问题;
二级封锁协议,在一级封锁协议基础上,事务T在读数据A前必须对其加上S锁,读完即释放S锁。这样使得一个事务不能读取其他事物修改中的数据,解决了读脏数据问题;
三级封锁协议,在一级封锁协议基础上,事务T在读数据A前必须对其加上S锁,直到事务T结束才释放S锁。这样使得一个事务在读取数据期间,其他事务只能读取该数据而不能修改,所以解决了不可重复读的问题;
两段锁协议,对任何数据进行读写前都必须加锁,在释放一个封锁后,事务不再申请和获得任何其它封锁。这样可以缩短持锁时间,提高并发性,同时解决了数据的不一致性。