2023年7月27日发(作者:)
数据库设计概述(参考:[1]84-87,[2]8-31,[11]203-241,[4]100-122)
数据库设计就是针对应用需求和环境,建立合理的数据库模式和存储结构,保证数据的高效存取,并满足应用的任务处理要求。数据库设计是应用系统建设的核心技术,是数据库应用领域的主要研究课题。
数据库设计的任务
建立面向数据存储的模式(表、序列、同义词、索引、集聚、数据库链等)
设计物理存储结构(表空间、数据块、范围、段;数据文件、日志文件、控制文件)
设计面向任务处理的模式(包、存储过程、函数、触发器、视图等)
面向数据存储、任务处理和环境调整数据库设计(模式和存储结构)
数据库设计应考虑的因素
数据库的大小(内存和外存)
ORACLE支持超大型数据库(数据文件32GB、表空间数据文件数1022、表空间32TB)
启动数据库实例所需的内存
数据库(文件)所需的磁盘空间
文件装入所需的临时空间(内存和外存)
数据库的发展
性能
磁盘I/O是引起性能瓶颈的主要因素(7200转/秒SCSI:连续I/O为100个/驱动器;随机I/O为60-70个/驱动器)
隔离连续存取的数据(重做日志文件和存档日志文件)
分布随机存取的数据(多磁盘或RAID,因性能增加的磁盘驱动器比因空间增加的多)
增加内存(并行I/O)
设置缓存(减少I/O)
功能
数据库分割为多个表空间,便于备份和恢复
模式设计与处理任务(任务分解与面向任务处理的模式)
1 内码设计与功能实现(编程与运行效率)
应用类型与存储结构(OLTP与DSS对日志存放要求不同)
数据保护
重做日志文件和存档日志文件需要完整保护
软件故障容错使用少,硬件故障容错使用多(RAID1和RAID5)
RAID1(Mirroring)提供最快的故障容错和最大的保护,需要双倍磁盘(空间)(OS和日志文件)
RAID5(Data Guarding)跨磁盘写入奇偶校验信息,可避免一个磁盘故障,读最快,写最慢(数据文件)
分区
表可以根据数据的范围分区
分区在表空间级实现,表空间由数据文件组成(建立数据文件之前规划分区)
ORACLE支持范围分区、哈西分区、组合分区,分区在提高性能方面有明显作用
字符集
建立数据库前要选择字符集
不重建数据库就不允许修改字符集
客户端字符集应该与数据库字符集相同或是其子集
数据库设计中的原则
实体、属性和关系
实体是数据模型中存储信息的对象,用户工作环境中可标识出的事物或业务元素。实体可以是具体的对象、抽象的概念、虚幻的东西等;
实体是现实世界中具有相同性质的一类事物,实例是实体的具体例子;
实体的每个实例都必须可以唯一标识;
每个实体之间都是互斥的;
属性是描述实体的状态与特征的指标。属性包括强制属性和可选属性
关系是实体之间有意义的关联。关系包括强制关系和可选关系
一对一、一对多、多对多、依赖、递归、分类、排斥
对象命名规范
ORACLE表名和列名最大长度为30个字符;
2 ORACLE忽略表名和列名的大小写,以大写形式将表名和列名存储在数据字典中;
ORACLE用大写存储数据比较容易(*);
命名有意义
层次命名完整性(域名.数据库实例名.所有者.对象名.字段名)
采用英文(避免用拼音*)
单数形式
简洁又清晰(短词、缩写词、自定义缩写词)
一致性(不同表中属性名一致性、一致使用或不使用下划线、一致使用首字母大写)
分类性(密切相关的一组属性采用同一的前缀)
别名不要加(双)引号
建立对象名称词典(不同于数据库内部的数据字典)
规范化及设计范式
规范化是把有问题的关系转化为没有问题的关系的过程,设计要求规范化,但规范化不是设计。规范化应该在物理层进行,但在概念和逻辑层也可以使用。规范化的主要目的有三个:
保持数据完整性
建立尽可能与应用无关的模型(关系模型应该是数据驱动的,而不是程序驱动的,即改变处理需求时数据库结构能保持稳定;应用程序的要求应该与数据库的逻辑设计无关,但应用程序功能要求对数据库物理设计很有意义)
减少存储需求(消除或减少冗余、搜索数据少可能提高性能)
范式 要 求
“当且仅当所有的基础域仅包含原子值”。
所有属性的数据为不可分的数据项,即某个属性不能同时有多个1NF
值或不能有重复的值,同一属性的所有记录值为同一类型、单值(与唯一值不同),任意两个记录不能完全相同(即关键字确定其它属性)。
规范化措施:分解同时具有多个值的属性,去掉重复的属性。
“当且仅当满足1NF,且所有非关键字属性都依赖于整个主关键2NF
字”。
主关键字有单个属性关键字或多个属性组合关键字。
规范化措施:分离仅依赖部分主关键字的属性构成新实体,与原 3 实体建立一对多的关系。
“当且仅当满足2NF,且所有非关键字属性都是非传递地依赖主关键字”。
3NF
传递依赖指实体中存在依赖其它非关键字属性的属性。
规范化措施:分离依赖其它非关键字属性的属性构成新实体,新实体的关键字属性就是原实体中被依赖的属性。
“当且仅当所有的决定因素都是侯选关键字”。
两个或多个可作为关键字的属性或属性组合称作侯选关键字,任BCNF
意一个选作关键字的后选关键字称作主关键字。
规范化措施:分离出新实体,使每个实体的决定因素都是后选关键字。
4NF
5NF
“当且仅当满足BCNF,且没有多值依赖”。
依赖关系模糊,有关分解为自关系的关系要求。(参考)
不规范化存在的共同问题:插入异常、删除异常、数据冗余修改复杂。
例1NF:分解同时具有多个值的属性,去掉重复的属性
个人信息身份证号国籍生卒日姓名1姓名2姓名3新个人信息身份证号国籍常用名出生日出世日姓名信息身份证号国籍别名
例2NF:分离仅依赖部分主关键字的属性构成新实体,与原实体建立一对多关系
问 题:关键字(StdCode,Activity),属性Fee只依赖Activity
插入异常:插入(9910002, Golf, 50)记录,若表中无Glof活动记录,则无法知道Glof活动价格信息
删除异常:删除(9910002, Golf, 50)记录,也删除了Golf活动价格信息50
数据冗余:插入和修改复杂(如修改活动时要同时修改价格)
4
StdCode Activity Fee
9910001 Basketball 10
9910001 Swimming 20
9910002 Golg 50
9910003 Swimming 20
9910003 Basketball 10
9910004 Basketball 10
9910004 Swimming 20
StdCode Activity
9910001 Basketball
9910001 Swimming
9910002 Golg
9910003 Swimming
9910003 Basketball
9910004 Basketball
9910004 Swimming
Activity Fee
Basketball 10
Swimming 20
Golg 50
例3NF:分离依赖其它非关键字属性的属性构成新实体,新实体的关键字属性就是原实体中被依赖的属性(消除传递依赖关系)
规 则:每个学生只住一栋楼内,每栋楼价格唯一
问 题:StdCode是关键字,Fee依赖于非关键字Building
StdCode Building Fee
9910001 Building1 1000
9910002 Building2 1500
9910003 Building2 1500
9910004 Building1 1000
StdCode Building
9910001 Building1
9910002 Building2
9910003 Building2
9910004 Building1
Building Fee
Building1 1000
Building2 1500
例BCNF:分离出新实体,使每个实体的决定因素都是后选关键字
规 则:每个学生可以修多个专业,每个教师只指导一个专业的学生。StdCode不能决定Major和Teacher,(StdCode,Major)决定Teacher,(StdCode,Teacher)决定Major,但给定Teacher就确定了Major(二者间是函数依赖关系)
删除异常:如9910002退学,删除其记录则删除T1指导Physical的事实
5
StdCode Major Teacher
9910001 Math T1
9910002 Physical T2
9910002 Math T1
9910004 SoftWare T3
StdCode Major
9910001 Math
9910002 Physical
9910002 Math
9910004 SoftWare
Teacher Major
T1 Math
T2 Physical
T3 SoftWare 例4NF:消除多值依赖关系
StdCode Major Activity
9910001 Math Tennis
9910001 Music Golf
9910001 Music Boxing
9910001 Math Golf
Tennis
9910004 Math
参考:, An Introduction to Database Systems(Ed.6), Addison-Wesley, 1995
, Principles of Database Systems, New York: Computer Scientce
Press, 1982
, An Relational Model of Data for Lange Shared Databanks,
Communications of the ACM, June 1970, pp377-387
StdCode Major
9910001 Math
9910001 Music
9910004 Math
StdCode Activity
9910001 Tennis
9910001 Golf
9910001 Boxing
9910004 Tennis
逆规范化
查询具有冗余数据的单表比表连接要快的多,规范化与逆规范化的选择是一种艺术;
规范化避免了异常、减少了冗余,但针对实际应用来说,并非模型规范化程度越高越好;
为了改进应用的性能,需要进行逆规范化或保留非规范化的关系,以数据冗余和异常来换取高速度;
逆规范化存在数据完整性问题,需要程序或人工控制来克服数据完整性问题,所花的代价和所冒的风险与所换取的性能改进相比应该是值得的;
在创建仅用做报表和决策支持目的的数据表时,数据冗余对提高性能和简化编程难度两方面作用明显。
数据库设计的过程
需求分析(数据分析、功能分析)
概念设计(概念模型E-R图、数据词典)
逻辑设计(针对DBMS的逻辑结构、模式对象)
物理设计(存储结构、存取方法—建立索引)
实施维护(组织数据、装入初始数据、试运行、监控、管理)
6 (错误:概念在脑中、逻辑在字面、物理在机器中;只有逻辑设计!)
需求分析(艺术+技术)
需求分析包括数据分析和任务分析,结果是业务与功能描述、数据字典
数据分析:数据项(基本数据、生成数据;类型、格式、编码、值)、数据流(基础数据关系、生成数据关系)、数据处理(业务和功能对应的数据及处理方法、方式、速度)
任务分析:业务及业务关系、功能及功能关系、功能与业务关系、业务和功能与用户权限
需求分析步骤(具体问题具体分析)
需求分析方法(具体问题具体分析)
数据字典(数据项、数据流、数据存取、数据处理)
数据库概念设计
需求分析结果抽象为概念模型(E-R图)的过程,独立于数据模型或具体DBMS
概念设计方法:自顶向下、自底向上、逐步扩展、混合策略
几个实用原则:
业务和功能一般化、全行业化和通用化,有预见性
先一般基础数据,再特殊数据(特殊任务相关数据和中间生成数据)
先主要数据(关键业务相关数据),再次要数据(特殊业务相关数据)
先规范化,再逆规范化
数据库逻辑设计
概念设计结果(E-R图)转换为与选定DBMS产品的数据模型相符的逻辑结构(模式对象及其关系、数据缺省值、数据约束、关系约束等),按需要调整模式结构,建立基本的数据视图等外模式
转换原则:
实体与模式对应
实体关系与模式关系对应
数据库物理设计
结合特定的物理设备(磁盘、CPU、内存)选择合适的存储结构,并建立合理的 7 存取方法(索引)
实用原则:
合理使用内码(存储与处理、编程综合考虑)
建立适当类型和数量的索引(数据处理性质、数据量大小、数据处理速度、数据处理频度)
合理分布数据存储(磁盘结构、数据处理性质、数据量大小、数据处理速度、数据处理频度、用户数量;模式的大小、结构、位置)
充分进行后期设计(处理任务分解,建立包、存储过程、函数、视图、触发器)
充分分析物理结构(时空效率),适时调整物理结构
数据库实施与维护
根据业务关系组织数据(编码)、检查和校验数据
装入初始数据和基本数据(初始用户信息、参数、控制、基本设置、基本信息)
试运行(应用程序和数据库:发现和分析问题,确定修改方案,集中综合修改)
监控(利用跟踪工具、跟踪文件、报警信息)
管理(安全、备份、恢复、定期诊断)
8
发布者:admin,转转请注明出处:http://www.yc00.com/news/1690431681a348973.html
评论列表(0条)