大型数据库的设计原则与开发技巧
随着计算机技术越来越广泛地应用于国民经济的各个领域 在计算机硬件不断微型化的同时 应用系统向着复杂化 大型化的方向发展 数据库是整个系统的核心 它的设计直接关系系统执行的效率和系统的稳定性 因此在软件系统开发中 数据库设计应遵循必要的数据库范式理论 以减少冗余 保证数据的完整性与正确性 只有在合适的数据库产品上设计出合理的数据库模型 才能降低整个系统的编程和维护难度 提高系统的实际运行效率 虽然对于小项目或中等规模的项目开发人员可以很容易地利用范式理论设计出一套符合要求的数据库 但对于一个包含大型数据库的软件项目 就必须有一套完整的设计原则与技巧
一 成立数据小组
大型数据库数据元素多 在设计上有必要成立专门的数据小组 由于数据库设计者不一定是使用者 对系统设计中的数据元素不可能考虑周全 数据库设计出来后 往往难以找到所需的库表 因此数据小组最好由熟悉业务的项目骨干组成
数据小组的职能并非是设计数据库 而是通过需求分析 在参考其他相似系统的基础上 提取系统的基本数据元素 担负对数据库的审核 审核内容包括审核新的数据库元素是否完全 能否实现全部业务需求 对旧数据库(如果存在旧系统)的分析及数据转换 数据库设计的审核 控制及必要调整
二 设计原则
规范命名 所有的库名 表名 域名必须遵循统一的命名规则 并进行必要说明 以方便设计 维护 查询
控制字段的引用 在设计时 可以选择适当的数据库设计管理工具 以方便开发人员的分布式设计和数据小组的集中审核管理 采用统一的命名规则 如果设计的字段已经存在 可直接引用 否则 应重新设计
库表重复控制 在设计过程中 如果发现大部分字段都已存在 开发人员应怀疑所设计的库表是否已存在 通过对字段所在库表及相应设计人员的查询 可以确认库表是否确实重复
并发控制 设计中应进行并发控制 即对于同一个库表 在同一时间只有一个人有控制权 其他人只能进行查询
必要的讨论 数据库设计完成后 数据小组应与相关人员进行讨论 通过讨论来熟悉数据库 从而对设计中存在的问题进行控制或从中获取数据库设计的必要信息
数据小组的审核 库表的定版 修改最终都要通过数据小组的审核 以保证符合必要的要求
头文件处理 每次数据修改后 数据小组要对相应的头文件进行修改(可由管理软件自动完成) 并通知相关的开发人员 以便进行相应的程序修改
三 设计技巧
分类拆分数据量大的表 对于经常使用的表(如某些参数表或代码对照表) 由于其使用频率很高 要尽量减少表中的记录数量 例如 银行的户主账表原来设计成一张表 虽然可以方便程序的设计与维护 但经过分析发现 由于数据量太大 会影响数据的迅速定位 如果将户主账表分别设计为活期户主账 定期户主账及对公户主账等 则可以大大提高查询效率
索引设计 对于大的数据库表 合理的索引能够提高整个数据库的操作效率 在索引设计中 索引字段应挑选重复值较少的字段 在对建有复合索引的字段进行检索时 应注意按照复合索引字段建立的顺序进行 例如 如果对一个 万多条记录的流水表以日期和流水号为序建立复合索引 由于在该表中日期的重复值接近整个表的记录数 用流水号进行查询所用的时间接近 秒 而如果以流水号为索引字段建立索引进行相同的查询 所用时间不到 秒 因此在大型数据库设计中 只有进行合理的索引字段选择 才能有效提高整个数据库的操作效率
数据操作的优化 在大型数据库中 如何提高数据操作效率值得关注 例如 每在数据库流水表中增加一笔业务 就必须从流水控制表中取出流水号 并将其流水号的数值加一 正常情况下 单笔操作的反应速度尚属正常 但当用它进行批量业务处理时 速度会明显减慢 经过分析发现 每次对流水控制表中的流水号数值加一时都要锁定该表 而该表却是整个系统操作的核心 有可能在操作时被其他进程锁定 因而使整个事务操作速度变慢 对这一问题的解决的办法是 根据批量业务的总笔数批量申请流水号 并对流水控制表进行一次更新 即可提高批量业务处理的速度 另一个例子是对插表的优化 对于大批量的业务处理 如果在插入数据库表时用普通的Insert语句 速度会很慢 其原因在于 每次插表都要进行一次I/O操作 花费较长的时间 改进后 可以用Put语句等缓冲区形式等满页后再进行I/O操作 从而提高效率 对大的数据库表进行删除时 一般会直接用Delete语句 这个语句虽然可以进行小表操作 但对大表却会因带来大事务而导致删除速度很慢甚至失败 解决的方法是去掉事务 但更有效的办法是先进行Drop操作再进行重建
数据库参数的调整 数据库参数的调整是一个经验不断积累的过程 应由有经验的系统管理员完成 以Informix数据库为例 记录锁的数目太少会造成锁表的失败 逻辑日志的文件数目太少会造成插入大表失败等 这些问题都应根据实际情况进行必要的调整
必要的工具 在整个数据库的开发与设计过程中 可以先开发一些小的应用工具 如自动生成库表的头文件 插入数据的初始化 数据插入的函数封装 错误跟踪或自动显示等 以此提高数据库的设计与开发效率
避免长事务 对单个大表的删除或插入操作会带来大事务 解决的办法是对参数进行调整 也可以在插入时对文件进行分割 对于一个由一系列小事务顺序操作共同构成的长事务(如银行交易系统的日终交易) 可以由一系列操作完成整个事务 但其缺点是有可能因整个事务太大而使不能完成 或者 由于偶然的意外而使事务重做所需的时间太长 较好的解决方法是 把整个事务分解成几个较小的事务 再由应用程序控制整个系统的流程 这样 如果其中某个事务不成功 则只需重做该事务 因而既可节约时间 又可避免长事务
适当超前 计算机技术发展日新月异 数据库的设计必须具有一定前瞻性 不但要满足当前的应用要求 还要考虑未来的业务发展 同时必须有利于扩展或增加应用系统的处理功能
lishixinzhi/Article/program/SQL/201311/16498
数据库设计
1、数据库需求分析
1)针对超市进销存管理系统,分别对采购部门、销售部门和库存保管部门进行详细的调研和分析,总结出如下的需求信息:
商品按类管理,所以需要有一商品类型信息。
商品必须属于一个商品类型。
如果一个商品类型存在商品,或存在下级商品类型,则该类型不可删除。
需要记录供应商品信息。
在涉及商品数量的地方,要给出相应的单位。
商品销售信息单中要包含登记商品销售数量、单价等信息。
在进货信息中要包含商品供应商等信息。
商品报损要有报损原因。
进货、销售、报损操作要有相应操作员信息。
只有管理员登录之后才可以使用系统。
默认的管理员不可以删除。
进货、销售、库存、报损信息都要可以添加、修改、删除、分类查找。
当进行进货、销售和报损操作后,能相应更新库存。
需要对进货、销售、库存、报损进行分析,总结热门商品。
2)经上述系统功能分析和需求总结,考虑到将来功能的扩展,设计如下的数据项和数据结构:
商品类型信息,包括数据项有:商品类型编号、商品类型名称等。
商品信息,包括的数据项有:商品编号、商品名称、商品介绍、库存量等。
商品单位信息,包括单位编号、单位名称等。
供应商信息,包括供应商名称、介绍等。
进货信息,包括进货商品、数量、单位、单价、进货时间经手人等。
销售信息,包括销售商品、数量、单位、单价、登记时间等。
报损信息,包括报损商品、数量、单位、原因、登记时间等。
管理员信息,包括管理员账号、密码、是否是默认账号等。
2、数据库概念结构设计
本系统根据以上的设计规划出的实体有:商品类型信息实体、商品信息实体、商品单位信息实体、供应商信息实体、进货信息实体、销售信息实体、报损信息实体和管理员信息实体。
数据库设计需求
1 需求概述
建立完善的数据库结构管理设备的基本参数、运行状态和各种工作计划。
数据库的框架和结构必须根据设备和运行状态而设计,方便提供强大的录入、查询、统计、分析和报表等各种功能操作,较好的反映平台业务的基本情况和运行状况,满足平台的基本要求。
2 外部设计需求
21 标识符和状态
数据库表前缀:根据模块名定义(如用户模块:sys_)
用户名:root
密码:待定
权限:全部
有效时间:开发阶段
说明:系统正式发布后,可能更改数据库用户/密码。
22 使用它的程序
本系统主要利用java作为后端的应用开发工具,使用MySQL作为后台的数据库, Linux或Windows均可作为系统平台。
23 约定
所有命名一定要具有描述性,杜绝一切拼音、或拼音英文混杂的命名方式。
字符集采用 UTF-8,请注意字符的转换。
所有数据表第一个字段都是系统内部使用主键列,自增字段,不可空,名称为:id,确保不把此字段暴露给最终用户。
除特别说明外,所有日期格式都采用date格式。
除特别说明外,所有字段默认都设置不充许为空, 需要设置默认值。
所有普通缩影的命名都是表名加设置缩影的字段名组合,例如用户表User中name字段设置普通所以,则缩影名称命名方式为user_name_index。
24 专门指导
对本系统的开发者、使用这、测试员和维护人员,提出以下参考意见:
在使用数据库时,首先要参考上面的约定内容,做好软件的安装以及表格的建立。
数据库的输入统一采用键盘。对于数据库的使用权限,请参考本系统其他相关文档。
数据库的后台管理员没用等级差异,可根据实际情况添加删除管理员。
25 支持软件
操作系统: Linux / Windows
数据库系统:MySQL
查询浏览工具:Navicat Premium
命令行工具:mysql
注意:mysql 命令行环境下对中文支持不好,可能无法书写带有中文的 SQL 语句。
3 结构设计需求
31 概念结构设计需求
概念数据库的设计是进行具体数据库设计的第一步,概念数据库设计的好坏直接影响到逻辑数据库的设计,影响到整个数据库的好坏。
我们已经得到了系统的数据流程图和数据字典,现在就是要结合数据规范化的理论,用一种模型将用户的数据要求明确地表示出来。
概念数据库的设计应该极易于转换为逻辑数据库模式,又容易被用户所理解。概念数据库设计中最主要的就是采用“实体-关系数据”模型来确定数据库的结构。
数据是表达信息的一种重要的量化符号,是信息存在的一种重要形式。数据模型则是数据特征的一种抽象。它描述的是数据的共性,而不是描述个别的数据。一般来说,数据模型包含两方面内容:
数据的静态特性:主要包括数据的基本结构、数据间的关系和数据之间的相互约束等特性。
数据的动态特性:主要包括对数据进行操作的方法。
在数据库系统设计中,建立反映客观信息的数据模型,是设计中最为重要的,也最基本的步骤之一。
数据模型是连接客观信息世界和数据库系统数据逻辑组织的桥梁,也是数据库设计人员与用户之间进行交流的共同基础。概念数据库中采用的实体-关系模型,与传统的数据模型有所不同。“实体-关系”模型是面向现实世界,而不是面向实现方法的,它主要是用使用方便,因而在数据库系统应用的设计中,得到了广泛应用。“实体-关系”模型可以用来说明数据库中实体的等级和属性。
以下是实体-关系模型中的重要标识:
在数据库中存在的实体;
实体的属性;
实体之间的关系;
32 逻辑结构设计需求
物理结构设计需求
1)定义数据库、表及字段的命名规范:
数据库、表及字段的命名要遵守可读性原则。
数据库、表及字段的命名要遵守表意性原则。
数据库、表及字段的命名要遵守长名原则。
2)选择合适的存储引擎:
3)为表中的字段选择合适的数据类型。
4)建立数据库结构
4 运用设计需求
41 表名的命名规范
表名以英文单词、单词缩写、简写、下划线构成,总长度要求小于30位。
42 表字段的命名规范
字段名以英文单词、单词缩写、简写、下划线构成,总长度要求不超过30位。
字段名以名词或名词短语,字段采用单数形式。若表名由多个单词组成,则取各个单词的缩写组成,单词缩写间使用下划线作为分隔。
若某个字段是引用某个表的外键,则字段名应尽量与源表的字段名保持一致,一面混淆。
5 安全保密设计需求
51 防止用户直接操作数据库的方法
通过把关键应用服务器和数据库服务器进行分离,防止用户对数据库服务器的直接操作,保证数据库安全。
52 应用系统的用户口令进行加密
在软件系统中,对于数据的保护、业务操作的许可是通过识别用户身份和权限来完成的。用户口令相比较,相同的话系统将该用户的操作权限分配给用户,用户再根据所分配的权限对系统进行操作。
由以上过程可知,用户口令在传输过程中容易被窃取泄漏,另外如果数据库被非法进入则其中保存的口令能够被非法查看。因此,在传输过程中和数据库中的口令记录字段不应使用明文传递和保存,应该在口令被传递前对其明文口令使用有效的主流技术,对传输数据进行加密部分描述的加密算法进行加密,在加密后传输到系统。系统将用户提交的经过加密的口令数据保存的加密口令进行比较,相一致则进行后续操作。
・学术论坛・
数字技术与应用
林业资源信息管理系统的分析与设计
张 月 张晋宁
(北京林业大学 北京 100083)
摘 要:森林资源的信息构成非常复杂, 为实现对这些复杂的数据信息进行快速动态的可视化处理, 人们设计了森林资源信息管理系统。本文从该系统的基本概念出发, 重点阐述林业资源管理信息系统的基本原理、特点、结构以及功能。
关键词:信息系统 模块设计 林业资源 分析 设计中图分类号:TP311文献标识码:A文章编号
:1007-9416(2011)01-0123-02
森林是人类生存和发展的一种重要的自然资源,它的变化会深刻影响全球的气候和环境,以及地球生命支持系统的健康和稳定[1]。如何扩大森林资源数量,提高其质量,加强森林资源管理,实现森林资源的可持续,已经成为全球关注的热点和共识。以信息化推动工业化、现代化,实现跨越式发展,是我国重大战略部署。信息化己经成为对传统行业进行改造的必然趋势,也是提高生产力的必然手段,本研究就是要充分利用信息化这一先进的生产力,通过分析设计森林资源信息管理系统提高森林资源的管理水平,加快林业行业信息化的进程。
数据类型复杂、庞大,森林资源调查数据可多达几十项,其数据量规模相当可观。因此对各项指标统计分析的项目多,同时也提高了对数据加工处理的要求。(3)林业资源数据是处于变化之中的,不能以静止的观点来分析和设计森林资源管理信息系统。(4)资源数据的获取时间较集中,使用单位分散。在对硬件平台及管理信息系统的设计和实施中都要从林业的实际特点出发,使得整个系统能与林业实际特点很好的结合,发挥它应有的作用。
保护区规划设计,生态公益林、防护林规划设计等。
3、系统设计
3.1 总体架构
本系统采用了C/S(Client/Server)二层体系结构,即客户层(Client)和数据库服务器层(Database Server)。客户端(Client)存放应用软件,实现用户界面和业务逻辑;数据库服务器(Database Server)负责数据的存储管理。客户机与服务器通过请求——回答的方式协同工作:客户端程序将用户的要求提交给数据库服务器,进行访问操作,再将数据库服务器程序返回的结果以特定的形式显示给用户;数据库服务器接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序。
客户端/服务器系统结构如图1所示:
2、系统分析
2.1 用户分析
该系统主要有四层使用对象,分别是国家林业局森林资源管理司、省林业厅森林资源管理处、地(市)林业局森林资源管理处和县(区)林业局森林资源管理科(股)。另外,社会公众也可以成为该系统的使用对象,比如通过该系统查询林业基本信息及林业生态建设各大工程动态信息等。
1、林业行业森林资源信息管理的概念和特点
1.1 森林资源信息管理的概念
森林资源信息是表达和控制森林资源运动状态和方式的数据。森林资源信息管理是对森林资源信息在社会实践活动过程中的管理。它是利用各种方法与手段,运用计划、组织、指挥、控制和协调的管理职能,对信息进行收集、储存和处理并提供服务的过程,以有效地利用人、财、物,控制森林资源按预定目标发展的活动。它是社会发展到一定历史阶段的产物,是社会发展的需要,是人类进步的表现,是信息时代下森林资源管理与信息科学、计算机科学结合的产物。它涵盖了森林资源信息的采集、组织、加工、储
[2]
存、分配与服务的全过程。
3.2 系统流程设计
本系统用户分为普通用户、信息管理员
和系统管理员。普通用户只具有信息查询、统计和查看报表的权限;信息管理员拥有普通用户的所有权限,此外还能够对相关信息进行录入、修改等管理。系统管理员是总管理员,拥有信息管理员的所有权限,还可以管理所有系统用户,可以对其进行添加、修改、删除操作。系统流程图如图2所示:
2.2 基本功能分析
系统从总体上应具有四方面的功能,
以满足森林资源整体管理的需要。(1)系统基本功能:主要包括数据采集、信息发布、信息查询、信息上传服务、数据分析处理、数据汇总与上报、数据打印、系统安全管理与系统维护等。(2)系统监控功能:主要利用“3S”技术对林业重点工程、森林资源破坏严重区实施监控,对木材采伐、运输,木材加工企业发展等情况进行监控。(3)系统分析与评价功能:通过对森林资源基础数据的分析,实施林地、林木的质量与数量的评价,帮助决策者制定森林资源经营方案及林业工程建设计划。(4)规划与设计功能:根据规划区域大小,选用不同比例尺的数字化地图进行造林规划设计,采伐设计,自然
3.3 功能模块设计
根据需求,本系统划分为森林资源信息查询、综合数据管理、工程信息管理、资源林政管理、用户管理以及权限组管理五大模块。
3.3.1 森林资源信息查询
信息查询是在数据管理的基础上,为管理决策提供各种可用的信息。信息查询主要利用地理信息系统设置兴趣区域即可统计出该区域林业基本信息,或者按需要输入省名、县名,查询林业基本信息。两种查询方式描述如下:(1)用鼠标圈定感兴趣区域,选择查询者感兴趣的区域,点击后即可查询出所需信息,可实现分层逐级查询。(2)输入要查询的地名选定查询条件及要查询的内容就可以查询出该县、区域的林业基本信息、森林资源信息、林业工程信息等。
3.3.2 综合数据管理
对森林资源连续清查(一类调查)属性数据、图像数据分析成果及逐级统计上报数据进行统一管理,形成宏观森林资源数据库。
3.3.3 工程信息管理
该功能模块主要是对林业工程信息进行管理,主要包括:各林业工程项目及其建设时间、范围、地点以及工程进展情况等。
3.3.4 资源林政管理
该功能模块主要是对全国林地、林木
1.2 森林资源信息管理的特点
与其他行业的信息化管理相比,林业行
业的森林资源信息管理有以下特点:
(1)森林生长缓慢,生产周期长。这就要求对数据的保存要更加稳定,数据保存位置与地点的分布要更加合理。同时也造成森林资源信息管理时效性不强一特点。(2)
图1 客户端/服务器系统结构图
Fig.1 Structured chart of Client/Server system
Digital technology and application 数字技术与应用123
数字技术与应用
・学术论坛・
图2 系统流程图
Fig.2 System flow chart
(竹)及采伐、木材经营(加工)与运输管理等有关林政的数据进行管理。其主要功能是:审批数据和各种林政业务数据的接收、数据查询、统计分析、审批、森林采伐限额管理等,具体描述如下:(1)将林权证、采伐证、运输证数据分类录入到计算机中进行统一管理。(2)三证查询能够方便查询并打印三证情况,调节木材采伐、运输,并调解林地纠纷。(3)将下级部门上报的林政案件信息数据录入到计算机中进行统一管理,以便及时分析处理。(4)下级部门上报的需要审批的各种林政数据,进行统一管理、及时处理。(5)采伐限额管理管理,并依此对采伐进行检查验收,及时监督采伐具体实施情况。
3.3.5 用户管理以及权限组管理该功能模块由系统管理员使用。系统管理员能添加,删除各编限单位的用户信息,查看并修改各用户的信息和权限组。权限组管理模块可以定义本系统的权限组,即形成角色,赋予用户,实现灵活的权限管理。
的E-R图。②逻辑数据库设计。在逻辑数据库阶段,首先要考虑实现数据库的数据库管理系统所支持的数据模型是什么。应该选择最适于描述与表达相应概念结构的数据模型,然后选择最合适的DBMS,向特定DBMS支持下的数据模型转换。③规范化理论的应用。用规范化的标准(3NF、BCNF、4NF)来检测目前所得到的关系模式是否达到了规范化的要求,并对没有达到规范化的模式进行分解。④物理数据库设计。数据库最终是要存储在物理设备上的。为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构(存储结构与存取方法)的过程,就是数据库的物理设计。物理结构依赖于给定的DBMS和和硬件系统,因此设计人员必须充分了解所用DBMS的内部特征,特别是存储结构和存取方法;充分了解应用环境,特别是应用的处理频率和响应时间要求;以及充分了解外存设备的特性。
参考文献
[1]方陆明,唐丽华,徐爱俊.县级林业资源管
理信息系统的结构研究与应用[J].浙江林学院学报,2005,22(3).
[2]方陆明,徐爱俊,楼雄伟等.县级林业资源
管理信息系统技术标准研究与应用[J].浙江林学院学报,2006,23(2).
[3]兰樟仁,张东水,戴永聪等.基于SuperMap
的县级林业资源管理信息系统——以漳浦县为例[J].福建农林大学学报(自然科学版),2006,35(5).
[4]何涛,张世禄.基于ArcGIS的县级林业资
源管理信息系统研究[J].计算机技术与发展,2009,19(2).
[5]苏宇航.基于J2EE的林业安全管理信息
系统[J].林业劳动安全,2009,22(4).
[6]王周,刘勇,袁强.青海省林业资源管理信
息系统数据库设计方案[J].林业调查规划,2008,33(2).
[7]古邦雄,陈启传.林业资源管理信息系统
的设计与实现[J].广西科学院学报,2007,23(3).
[8]贾永刚,吴保国,陈昌鹏.森林资源管理信
息系统体系结构的探讨[J].林业资源管理,2004,(3).
[9]高宝.建立森林资源管理信息化网络平
台方法的研究[J].西北林学院学报,2002,17(4).
[10]商渤海.轻量级的林业调查信息共享平
台[D].2007.
[11]陈端吕.森林资源管理信息系统的研究
现状及发展[J].林业资源管理,2001,(6).[12]柴敏,唐志蕴,张颖等.基于3S技术的数字
林业管理信息系统的研发——以惠州南油HLMIS为例[J].农业网络信息,2007,(12).
4、系统实现
整个系统是通过使用C#语言,结合ADO.Net技术和Microsoft SQL Server2000来实现的。林产品贸易信息的数据存储在数据库中,程序根据用户的操作通过数据库存取技术ADO.NET访问数据库完成用户的指定操作。
3.4 数据库设计
该系统采用Microsoft SQL Server 2000作为数据库服务器,它是一个高性能、多用户的关系型数据库管理系统;它是专为客户/服务器计算环境设计的,是当前最流行的数据库服务器系统之一;它提供的内置数据复制功能、强大的管理工具和开放式的系统体系结构为基于事务的信息管理方案提供了一个卓越的平台。
数据库设计一般可分为四个步骤:①概念模型设计。数据库设计同样是从需求分析开始的,将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计。概念模型设计独立于数据库逻辑结构,它不依赖于任何数据库管理系统。这一步的过程至少要包括:确定实体;确定实体的属性;确定实体的标识属性(关键字);确定实体间的联系和联系类型;画出概念模型124
5、结语
森林资源管理本身是一个复杂的、多功能、多目标的过程,本论文只是在森林资源管理信息化方面做出的一次尝试。在以后的工作中,还需要对系统的建设做大量的工作来不断加以完善。进一步需要做的研究工作具体如本系统目前只是实现了林业资源管理信息系统的大部分功能设计,下一步系统开发,可以根据林业部门的工作流程和工作需求,进一步完善。
作者简介:张月(1987-),女, 河南人, 硕士研究生, 主要研究方向:林业资源信息管理。
数字技术与应用 Digital technology and application
数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。 在数据库领域内,常常把使用数据库的各类系统统称为数据库数据库设计(database design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。 在数据库领域内,常常把使用数据库的各类系统统称为数据库应用系统。 一、数据库和信息系统 (1)数据库是信息系统的核心和基础,把信息系统中大量的数据按一定的模型组织起来,提供存储、维护、检索数据的 功能,使信息系统可以方便、及时、准确地从数据库中获得所需的信息。 (2)数据库是信息系统的各个部分能否紧密地结合在一起以及如何结合的关键所在。 (3)数据库设计是信息系统开发和建设的重要组成部分。 (4)数据库设计人员应该具备的技术和知识: 数据库的基本知识和数据库设计技术 计算机科学的基础知识和程序设计的方法和技巧 软件工程的原理和方法 应用领域的知识 二、数据库设计的特点 数据库建设是硬件、软件和干件的结合 三分技术,七分管理,十二分基础数据 技术与管理的界面称之为“干件” 数据库设计应该与应用系统设计相结合 结构(数据)设计:设计数据库框架或数据库结构 行为(处理)设计:设计应用程序、事务处理等 结构和行为分离的设计 传统的软件工程忽视对应用中数据语义的分析和抽象,只要有可能就尽量推迟数据结构设计的决策早期的数据库设计致力于数据模型和建模方法研究,忽视了对行为的设计 如图: 三、数据库设计方法简述 手工试凑法 设计质量与设计人员的经验和水平有直接关系 缺乏科学理论和工程方法的支持,工程的质量难以保证 数据库运行一段时间后常常又不同程度地发现各种问题,增加了维护代价 规范设计法 手工设计方 基本思想 过程迭代和逐步求精 规范设计法(续) 典型方法: (1)新奥尔良(new orleans)方法:将数据库设计分为四个阶段 sbyao方法:将数据库设计分为五个步骤 irpalmer方法:把数据库设计当成一步接一步的过程 (2)计算机辅助设计 oracle designer 2000 sybase powerdesigner 四、数据库设计的基本步骤 数据库设计的过程(六个阶段) 1需求分析阶段 准确了解与分析用户需求(包括数据与处理) 是整个设计过程的基础,是最困难、最耗费时间的一步 2概念结构设计阶段 是整个数据库设计的关键 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体dbms的概念模型 3逻辑结构设计阶段 将概念结构转换为某个dbms所支持的数据模型 对其进行优化 4数据库物理设计阶段 为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法) 5数据库实施阶段 运用dbms提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果 建立数据库,编制与调试应用程序,组织数据入库,并进行试运行 6数据库运行和维护阶段 数据库应用系统经过试运行后即可投入正式运行。 在数据库系统运行过程中必须不断地对其进行评价、调整与修改 设计特点: 在设计过程中把数据库的设计和对数据库中数据处理的设计紧密结合起来将这两个方面的需求分析、抽象、设计、实现在各个阶段同时进行,相互参照,相互补充,以完善两方面的设计 设计过程各个阶段的设计描述: 如图: 五、数据库各级模式的形成过程 1需求分析阶段:综合各个用户的应用需求 2概念设计阶段:形成独立于机器特点,独立于各个dbms产品的概念模式(e-r图) 3逻辑设计阶段:首先将e-r图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式;然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图(view),形成数据的外模式 4物理设计阶段:根据dbms特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式 六、数据库设计技巧 1 设计数据库之前(需求分析阶段) 1) 理解客户需求,询问用户如何看待未来需求变化。让客户解释其需求,而且随着开发的继续,还要经常询问客户保证其需求仍然在开发的目的之中。 2) 了解企业业务可以在以后的开发阶段节约大量的时间。 3) 重视输入输出。 在定义数据库表和字段需求(输入)时,首先应检查现有的或者已经设计出的报表、查询和视图(输出)以决定为了支持这些输出哪些是必要的表和字段。 举例:假如客户需要一个报表按照邮政编码排序、分段和求和,你要保证其中包括了单独的邮政编码字段而不要把邮政编码糅进地址字段里。 4) 创建数据字典和er 图表 er 图表和数据字典可以让任何了解数据库的人都明确如何从数据库中获得数据。er图对表明表之间关系很有用,而数据字典则说明了每个字段的用途以及任何可能存在的别名。对sql 表达式的文档化来说这是完全必要的。 5) 定义标准的对象命名规范 数据库各种对象的命名必须规范。 2 表和字段的设计(数据库逻辑设计) 表设计原则 1) 标准化和规范化 数据的标准化有助于消除数据库中的数据冗余。标准化有好几种形式,但third normal form(3nf)通常被认为在性能、扩展性和数据完整性方面达到了最好平衡。简单来说,遵守3nf 标准的数据库的表设计原则是:“one fact in one place”即某个表只包括其本身基本的属性,当不是它们本身所具有的属性时需进行分解。表之间的关系通过外键相连接。它具有以下特点:有一组表专门存放通过键连接起来的关联数据。 举例:某个存放客户及其有关定单的3nf 数据库就可能有两个表:customer 和order。order 表不包含定单关联客户的任何信息,但表内会存放一个键值,该键指向customer 表里包含该客户信息的那一行。 事实上,为了效率的缘故,对表不进行标准化有时也是必要的。 2) 数据驱动 采用数据驱动而非硬编码的方式,许多策略变更和维护都会方便得多,大大增强系统的灵活性和扩展性。 举例,假如用户界面要访问外部数据源(文件、xml 文档、其他数据库等),不妨把相应的连接和路径信息存储在用户界面支持表里。还有,如果用户界面执行工作流之类的任务(发送邮件、打印信笺、修改记录状态等),那么产生工作流的数据也可以存放在数据库里。角色权限管理也可以通过数据驱动来完成。事实上,如果过程是数据驱动的,你就可以把相当大的责任推给用户,由用户来维护自己的工作流过程。 3) 考虑各种变化 在设计数据库的时候考虑到哪些数据字段将来可能会发生变更。 举例,姓氏就是如此(注意是西方人的姓氏,比如女性结婚后从夫姓等)。所以,在建立系统存储客户信息时,在单独的一个数据表里存储姓氏字段,而且还附加起始日和终止日等字段,这样就可以跟踪这一数据条目的变化。 字段设计原则 4) 每个表中都应该添加的3 个有用的字段 drecordcreationdate,在vb 下默认是now(),而在sql server 下默认为getdate() srecordcreator,在sql server 下默认为not null default user nrecordversion,记录的版本标记;有助于准确说明记录中出现null 数据或者丢失数据的原因 5) 对地址和电话采用多个字段 描述街道地址就短短一行记录是不够的。address_line1、address_line2 和address_line3 可以提供更大的灵活性。还有,电话号码和邮件地址最好拥有自己的数据表,其间具有自身的类型和标记类别。 6) 使用角色实体定义属于某类别的列 在需要对属于特定类别或者具有特定角色的事物做定义时,可以用角色实体来创建特定的时间关联关系,从而可以实现自我文档化。 举例:用person 实体和person_type 实体来描述人员。比方说,当john smith, engineer 提升为john smith, director 乃至最后爬到john smith, cio 的高位,而所有你要做的不过是改变两个表person 和person_type 之间关系的键值,同时增加一个日期/时间字段来知道变化是何时发生的。这样,你的person_type 表就包含了所有person 的可能类型,比如associate、engineer、director、cio 或者ceo 等。还有个替代办法就是改变person 记录来反映新头衔的变化,不过这样一来在时间上无法跟踪个人所处位置的具体时间。 7) 选择数字类型和文本类型尽量充足 在sql 中使用smallint 和tinyint 类型要特别小心。比如,假如想看看月销售总额,总额字段类型是smallint,那么,如果总额超过了$32,767 就不能进行计算操作了。 而id 类型的文本字段,比如客户id 或定单号等等都应该设置得比一般想象更大。假设客户id 为10 位数长。那你应该把数据库表字段的长度设为12 或者13 个字符长。但这额外占据的空间却无需将来重构整个数据库就可以实现数据库规模的增长了。 8) 增加删除标记字段 在表中包含一个“删除标记”字段,这样就可以把行标记为删除。在关系数据库里不要单独删除某一行;最好采用清除数据程序而且要仔细维护索引整体性。 3 选择键和索引(数据库逻辑设计) 键选择原则: 1) 键设计4 原则 为关联字段创建外键。 所有的键都必须唯一。 避免使用复合键。 外键总是关联唯一的键字段。 2) 使用系统生成的主键 设计数据库的时候采用系统生成的键作为主键,那么实际控制了数据库的索引完整性。这样,数据库和非人工机制就有效地控制了对存储数据中每一行的访问。采用系统生成键作为主键还有一个优点:当拥有一致的键结构时,找到逻辑缺陷很容易。 3) 不要用用户的键(不让主键具有可更新性) 在确定采用什么字段作为表的键的时候,可一定要小心用户将要编辑的字段。通常的情况下不要选择用户可编辑的字段作为键。 4) 可选键有时可做主键 把可选键进一步用做主键,可以拥有建立强大索引的能力。 索引使用原则: 索引是从数据库中获取数据的最高效方式之一。95%的数据库性能问题都可以采用索引技术得到解决。 1) 逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对任何外键列采用非成组索引。考虑数据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写。 2) 大多数数据库都索引自动创建的主键字段,但是可别忘了索引外键,它们也是经常使用的键,比如运行查询显示主表和所有关联表的某条记录就用得上。 3) 不要索引memo/note 字段,不要索引大型字段(有很多字符),这样作会让索引占用太多的存储空间。 4) 不要索引常用的小型表 不要为小型数据表设置任何键,假如它们经常有插入和删除操作就更别这样作了。对这些插入和删除操作的索引维护可能比扫描表空间消耗更多的时间。 4 数据完整性设计(数据库逻辑设计) 1) 完整性实现机制: 实体完整性:主键 参照完整性: 父表中删除数据:级联删除;受限删除;置空值 父表中插入数据:受限插入;递归插入 父表中更新数据:级联更新;受限更新;置空值 dbms对参照完整性可以有两种方法实现:外键实现机制(约束规则)和触发器实现机制 用户定义完整性: not null;check;触发器 2) 用约束而非商务规则强制数据完整性 采用数据库系统实现数据的完整性。这不但包括通过标准化实现的完整性而且还包括数据的功能性。在写数据的时候还可以增加触发器来保证数据的正确性。不要依赖于商务层保证数据完整性;它不能保证表之间(外键)的完整性所以不能强加于其他完整性规则之上。 3) 强制指示完整性 在有害数据进入数据库之前将其剔除。激活数据库系统的指示完整性特性。这样可以保持数据的清洁而能迫使开发人员投入更多的时间处理错误条件。 4) 使用查找控制数据完整性 控制数据完整性的最佳方式就是限制用户的选择。只要有可能都应该提供给用户一个清晰的价值列表供其选择。这样将减少键入代码的错误和误解同时提供数据的一致性。某些公共数据特别适合查找:国家代码、状态代码等。 5) 采用视图 为了在数据库和应用程序代码之间提供另一层抽象,可以为应用程序建立专门的视图而不必非要应用程序直接访问数据表。这样做还等于在处理数据库变更时给你提供了更多的自由。 5 其他设计技巧 1) 避免使用触发器 触发器的功能通常可以用其他方式实现。在调试程序时触发器可能成为干扰。假如你确实需要采用触发器,你最好集中对它文档化。 2) 使用常用英语(或者其他任何语言)而不要使用编码 在创建下拉菜单、列表、报表时最好按照英语名排序。假如需要编码,可以在编码旁附上用户知道的英语。 3) 保存常用信息 让一个表专门存放一般数据库信息非常有用。在这个表里存放数据库当前版本、最近检查/修复(对access)、关联设计文档的名称、客户等信息。这样可以实现一种简单机制跟踪数据库,当客户抱怨他们的数据库没有达到希望的要求而与你联系时,这样做对非客户机/服务器环境特别有用。 4) 包含版本机制 在数据库中引入版本控制机制来确定使用中的数据库的版本。时间一长,用户的需求总是会改变的。最终可能会要求修改数据库结构。把版本信息直接存放到数据库中更为方便。 5) 编制文档 对所有的快捷方式、命名规范、限制和函数都要编制文档。 采用给表、列、触发器等加注释的数据库工具。对开发、支持和跟踪修改非常有用。 对数据库文档化,或者在数据库自身的内部或者单独建立文档。这样,当过了一年多时间后再回过头来做第2 个版本,犯错的机会将大大减少。 6) 测试、测试、反复测试 建立或者修订数据库之后,必须用用户新输入的数据测试数据字段。最重要的是,让用户进行测试并且同用户一道保证选择的数据类型满足商业要求。测试需要在把新数据库投入实际服务之前完成。 7) 检查设计 在开发期间检查数据库设计的常用技术是通过其所支持的应用程序原型检查数据库。换句话说,针对每一种最终表达数据的原型应用,保证你检查了数据模型并且查看如何取出数据。
答:(1)需求分析阶段:需求收集和分析,得到数据字典和数据流图。 (2)概念结构设计阶段:对用户需求综合、归纳与抽象,形成概念模型,用E-R图表示。(3)逻辑结构设计阶段:将概念结构转换为某个DBMS所支持的数据模型。(4)数据库物理设计阶段:为逻辑数据模型选取一个最适合应用环境的物理结构。(5)数据库实施阶段:建立数据库,编制与调试应用程序,组织数据入库,程序试运行。(6)数据库运行和维护阶段:对数据库系统进行评价、调整与修改。
大型数据库的设计原则与开发技巧
本文2023-10-31 11:26:41发表“古籍资讯”栏目。
本文链接:https://www.yizhai.net/article/186878.html