版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据库设计规范、技巧与命名规范一、数据库设计过程数据库技术是信息资源管理最有效伎俩。数据库设计是指:对于一个给定应用环境,结构最优数据库模式,建立数据库及其应用系统,有效存放数据,满足用户信息要求和处理要求。数据库设计各阶段:A、需求分析阶段:综合各个用户应用需求(现实世界需求)。B、在概念设计阶段:形成独立于机器和各DBMS产品概念模式(信息世界模型),用E-R图来描述。C、在逻辑设计阶段:将E-R图转换成详细数据库产品支持数据模型,如关系模型,形成数据库逻辑模式。然后依照用户处理要求,安全性考虑,在基本表基础上再建立必要视图(VIEW)形成数据外模式。D、在物理设计阶段:依照DBMS特点和处理需要,进行物理存放安排,设计索引,形成数据库内模式。1.需求分析阶段需求搜集和分析,结果得到数据字典描述数据需求(和数据流图描述处理需求)。需求分析重点:调查、搜集与分析用户在数据管理中信息要求、处理要求、安全性与完整性要求。需求分析方法:调查组织机构情况、各部门业务活动情况、帮助用户明确对新系统各种要求、确定新系统边界。常见调查方法有:跟班作业、开调查会、请专员介绍、问询、设计调查表请用户填写、查阅统计。分析和表示用户需求方法主要包含自顶向下和自底向上两类方法。自顶向下结构化分析方法(StructuredAnalysis,简称SA方法)从最上层系统组织机构入手,采取逐层分解方式分析系统,并把每一层用数据流图和数据字典描述。数据流图表示了数据和处理过程关系。系统中数据则借助数据字典(DataDictionary,简称DD)来描述。2.概念结构设计阶段经过对用户需求进行综合、归纳与抽象,形成一个独立于详细DBMS概念模型,能够用E-R图表示。概念模型用于信息世界建模。概念模型不依赖于某一个DBMS支持数据模型。概念模型能够转换为计算机上某一DBMS支持特定数据模型。概念模型特点:(1)具备较强语义表示能力,能够方便、直接地表示应用中各种语义知识。(2)应该简单、清楚、易于用户了解,是用户与数据库设计人员之间进行交流语言。概念模型设计一个常见方法为IDEF1X方法,它就是把实体-联络方法应用到语义数据模型中一个语义模型化技术,用于建立系统信息模型。使用IDEF1X方法创建E-R模型步骤以下所表示:2.1初始化工程这个阶段任务是从目标描述和范围描述开始,确定建模目标,开发建模计划,组织建模队伍,搜集源材料,制订约束和规范。搜集源材料是这阶段重点。经过调查和观察结果,业务流程,原有系统输入输出,各种报表,搜集原始数据,形成了基本数据资料表。2.2定义实体实体集组员都有一个共同特征和属性集,能够从搜集源材料——基本数据资料表中直接或间接标识出大部分实体。依照源材料名字表中表示物术语以及具备”代码”结尾术语,如客户代码、代理商代码、产品代码等将其名词部分代表实体标识出来,从而初步找出潜在实体,形成初步实体表。2.3定义联络IDEF1X模型中只允许二元联络,n元联络必须定义为n个二元联络。依照实际业务需求和规则,使用实体联络矩阵来标识实体间二元关系,然后依照实际情况确定出连接关系势、关系名和说明,确定关系类型,是标识关系、非标识关系(强制或可选)还是非确定关系、分类关系。假如子实体每个实例都需要经过和父实体关系来标识,则为标识关系,不然为非标识关系。非标识关系中,假如每个子实体实例都与而且只与一个父实体关联,则为强制,不然为非强制。假如父实体与子实体代表是同一现实对象,那么它们为分类关系。2.4定义码经过引入交叉实体除去上一阶段产生非确定关系,然后从非交叉实体和独立实体开始标识侯选码属性,方便唯一识别每个实体实例,再从侯选码中确定主码。为了确定主码和关系有效性,经过非空规则和非多值规则来确保,即一个实体实例一个属性不能是空值,也不能在同一个时刻有一个以上值。找出误认确实定关系,将实体深入分解,最终结构出IDEF1X模型键基视图(KB图)。2.5定义属性从源数据表中抽取说明性名词开发出属性表,确定属性全部者。定义非主码属性,检验属性非空及非多值规则。另外,还要检验完全依赖函数规则和非传递依赖规则,确保一个非主码属性必须依赖于主码、整个主码、仅仅是主码。以此得到了最少符合关系理论第三范式改进IDEF1X模型全属性视图。2.6定义其它对象和规则定义属性数据类型、长度、精度、非空、缺省值、约束规则等。定义触发器、存放过程、视图、角色、同义词、序列等对象信息。3.逻辑结构设计阶段将概念结构转换为某个DBMS所支持数据模型(比如关系模型),并对其进行优化。设计逻辑结构应该选择最适于描述与表示对应概念结构数据模型,然后选择最适宜DBMS。将E-R图转换为关系模型实际上就是要将实体、实体属性和实体之间联络转化为关系模式,这种转换通常遵照以下标准:一个实体型转换为一个关系模式。实体属性就是关系属性。实体码就是关系码。数据模型优化,确定数据依赖,消除冗余联络,确定各关系模式分别属于第几范式。确定是否要对它们进行合并或分解。通常来说将关系分解为3NF标准,即:表内每一个值都只能被表示一次。表内每一行都应该被唯一标识(有唯一键)。表内不应该存放依赖于其它键非键信息。4.数据库物理设计阶段为逻辑数据模型选取一个最适合应用环境物理结构(包含存放结构和存取方法)。依照DBMS特点和处理需要,进行物理存放安排,设计索引,形成数据库内模式。5.数据库实施阶段利用DBMS提供数据语言(比如SQL)及其宿主语言(比如C),依照逻辑设计和物理设计结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。数据库实施主要包含以下工作:用DDL定义数据库结构、组织数据入库、编制与调试应用程序、数据库试运行,(DataDefinitionLanguage(DDL数据定义语言)用作开新数据表、设定字段、删除数据表、删除字段,管理全部关于数据库结构东西)●Create(新增关于数据库结构东西,属DDL)●Drop(删除关于数据库结构东西,属DDL)●Alter(更改结构,属DDL)6.数据库运行和维护阶段在数据库系统运行过程中必须不停地对其进行评价、调整与修改。内容包含:数据库转储和恢复、数据库安全性、完整性控制、数据库性能监督、分析和改进、数据库重组织和重结构。7.建模工具使用为加紧数据库设计速度,当前有很多数据库辅助工具(CASE工具),如Rational企业RationalRose,CA企业Erwin和Bpwin,Sybase企业PowerDesigner以及Oracle企业oracleDesigner等。ERwin主要用来建立数据库概念模型和物理模型。它能用图形化方式,描述出实体、联络及实体属性。ERwin支持IDEF1X方法。经过使用ERwin建模工具自动生成、更改和分析IDEF1X模型,不但能得到优异业务功效和数据需求模型,而且能够实现从IDEF1X模型到数据库物理设计转变。ERwin工具绘制模型对应于逻辑模型和物理模型两种。在逻辑模型中,IDEF1X工具箱能够方便地用图形化方式构建和绘制实体联络及实体属性。在物理模型中,ERwin能够定义对应表、列,并可针对各种数据库管理系统自动转换为适当类型。设计人员可依照需要选取对应数据库设计建模工具。比如需求分析完成之后,设计人员能够使用Erwin画ER图,将ER图转换为关系数据模型,生成数据库结构;画数据流图,生成应用程序。二、数据库设计技巧1.设计数据库之前(需求分析阶段)1.1客户需求,包含用户未来需求改变。1.2了解企业业务类型,能够在开发阶段节约大量时间。1.3重视输入(要统计数据)、输出(报表、查询、视图)。1.4创建数据字典和ER图表数据字典(DataDictionary,简称DD)是各类数据描述集合,是关于数据库中数据描述,即元数据,不是数据本身。(最少应该包含每个字段数据类型和在每个表内主外键)。数据项描述:数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其它数据项逻辑关系数据结构描述:数据结构名,含义说明,组成:[数据项或数据结构]数据流描述:数据流名,说明,数据流起源,数据流去向,组成:[数据结构],平均流量,高峰期流量数据存放描述:数据存放名,说明,编号,流入数据流,流出数据流,组成:[数据结构],数据量,存取方式处理过程描述:处理过程名,说明,输入:[数据流],输出:[数据流],处理:[简明说明]ER图表和数据字典能够让任何了解数据库人都明确怎样从数据库中取得数据。ER图对表明表之间关系很有用,而数据字典则说明了每个字段用途以及任何可能存在别名。对SQL表示式文档化来说这是完全必要。1.5定义标准对象命名规范数据库各种对象命名必须规范。2.表和字段设计(数据库逻辑设计)表设计标准1准化和规范化数据标准化有利于消除数据库中数据冗余。标准化有好几个形式,但ThirdNormalForm(3NF)通常被认为在性能、扩展性和数据完整性方面达成了最好平衡。简单来说,恪守3NF标准数据库表设计标准是:”OneFactinOnePlace”即某个表只包含其本身基本属性,当不是它们本身所具备属性时需进行分解。表之间关系经过外键相连接。它具备以下特点:有一组表专门存放经过键连接起来关联数据。2数据驱动采取数据驱动而非硬编码方式,许多策略变更和维护都会方便得多,大大增强系统灵活性和扩展性。举例,假如用户界面要访问外部数据源(文件、XML文档、其它数据库等),不妨把对应连接和路径信息存放在用户界面支持表里。假如用户界面执行工作流之类任务(发送邮件、打印信笺、修改统计状态等),那么产生工作流数据也能够存放在数据库里。角色权限管理也能够经过数据驱动来完成。实际上,假如过程是数据驱动,你就能够把相当大责任推给用户,由用户来维护自己工作流过程。3考虑各种改变在设计数据库时候考虑到哪些数据字段未来可能会发生变更。4表名、报表名和查询名命名规范(采取前缀命名)检验表名、报表名和查询名之间命名规范。你可能会很快就被这些不一样数据库要素名称搞糊涂了。你能够统一地命名这些数据库不一样组成部分,最少你应该在这些对象名字开头用Table、Query或者Report等前缀加以区分。假如采取了MicrosoftAccess,你能够用qry、rpt、tbl和mod等符号来标识对象(比如tbl_Employees)。用sp_company标识存放过程,用udf_(或者类似标识)标识自定义编写函数。字段设计标准:1每个表中都应该添加3个有用字段。dRecordCreationDate,在SQLServer下默认为GETDATE()sRecordCreator,在SQLServer下默认为NOTNULLDEFAULTUSERnRecordVersion,统计版本标识;有利于准确说明统计中出现null数据或者丢失数据原因时效性数据应包含”最近更新日期/时间”字段。时间标识对查找数据问题原因、按日期重新处理/重载数据和去除旧数据尤其有用。2对地址和电话采取多个字段描述街道地址就短短一行统计是不够。Address_Line1、Address_Line2和Address_Line3能够提供更大灵活性。还有,电话号码和邮件地址最好拥有自己数据表,其间具备本身类型和标识类别。3表内列[字段]命名规则(采取前缀/后缀命名)、采取有意义字段名对列[字段]名应该采取标准前缀和后缀。如键是数字类型:用_N后缀;字符类型:_C后缀;日期类型:_D后缀。再如,假如你表里有好多”money”字段,你不妨给每个列[字段]增加一个_M后缀。假设有两个表:Customer和Order。Customer表前缀是cu_,所以该表内子段名以下:cu_name_id、cu_surname、cu_initials和cu_address等。Order表前缀是or_,所以子段名是:or_order_id、or_cust_name_id、or_quantity和or_description等。这么从数据库中选出全部数据SQL语句能够写成以下所表示:Select*FromCustomer,OrderWherecu_surname="MYNAME";andcu_name_id=or_cust_name_idandor_quantity=1在没有这些前缀情况下则写成这个样子(用别名来区分):Select*FromCustomer,OrderWhereCustomer.surname="MYNAME";andC_id=Order.cust_name_idandOrder.quantity=1第1个SQL语句没少键入多少字符。但假如查询包括到5个表乃至更多列[字段]你就知道这个技巧多有用了。5选择数字类型和文本类型长度应尽可能充分假设客户ID为10位数长。那你应该把数据库表字段长度设为12或者13个字符长。但这额外占据空间却无需未来重构整个数据库就能够实现数据库规模增加了。6增加删除标识字段在表中包含一个”删除标识”字段,这么就能够把行标识为删除。在关系数据库里不要单独删除某一行;最好采取去除数据程序而且要仔细维护索引整体性。7提防大小写混用对象名和特殊字符采取全部大写而且包含下划符名字具备愈加好可读性(CUSTOMER_DATA),绝对不要在对象名字符之间留空格。8小心保留词要确保你字段名没有和保留词、数据库系统或者常见访问方法冲突,比如,用DESC作为说明字段名。后果可想而知!DESC是DESCENDING缩写后保留词。表里一个SELECT*语句倒是能用,但得到却是一大堆毫无用处信息。9保持字段名和类型一致性在命名字段并为其指定数据类型时候一定要确保一致性。假如字段在表1中叫做”agreement_number”,就别在表2里把名字改成”ref1”。假如数据类型在表1里是整数,那在表2里可就别变成字符型了。当然在表1(ABC)有处键ID,则为了可读性,在表2做关联时能够命名为ABC_ID。10防止使用触发器触发器功效通常能够用其它方式实现。在调试程序时触发器可能成为干扰。假如你确实需要采取触发器,你最好集中对它文档化。3.选择键和索引(数据库逻辑设计)参考:《SQL优化-索引》一文4.数据完整性设计(数据库逻辑设计)1完整性实现机制:实体完整性:主键参考完整性:父表中删除数据:级联删除;受限删除;置空值父表中插入数据:受限插入;递归插入父表中更新数据:级联更新;受限更新;置空值DBMS对参考完整性能够有两种方法实现:外键实现机制(约束规则)和触发器实现机制用户定义完整性:NOTNULL;CHECK;触发器2用约束而非商务规则强制数据完整性采取数据库系统实现数据完整性。这不但包含经过标准化实现完整性而且还包含数据功效性。不要依赖于商务层确保数据完整性;它不能确保表之间(外键)完整性所以不能强加于其它完整性规则之上。假如你在数据层确实采取了约束,你要确保有方法把更新不能经过约束检验原因采取用户了解语言通知用户界面。3强制指示完整性在有害数据进入数据库之前将其剔除。激活数据库系统指示完整性特征。这么能够保持数据清洁而能迫使开发人员投入更多时间处理错误条件。4使用查找控制数据完整性控制数据完整性最好方式就是限制用户选择。只要有可能都应该提供给用户一个清楚价值列表供其选择。这么将降低键入代码错误和误解同时提供数据一致性。一些公共数据尤其适合查找:国家代码、状态代码等。5采取视图为了在数据库和应用程序代码之间提供另一层抽象,能够为应用程序建立专门视图而无须非要应用程序直接访问数据表。这么做还等于在处理数据库变更时给你提供了更多自由。6分布式数据系统对分布式系统而言,在你决定是否在各个站点复制全部数据还是把数据保留在一个地方之前应该估量一下未来5年或者10年数据量。当你把数据传送到其它站点时候,最好在数据库字段中设置一些标识,在目标站点收到你数据之后更新你标识。为了进行这种数据传输,请写下你自己批处理或者调度程序以特定时间间隔运行而不要让用户在天天工作后传输数据。当地拷贝你维护数据,比如计算常数和利息率等,设置版本号确保数据在每个站点都完全一致。7关系假如两个实体之间存在多对一关系,而且还有可能转化为多对多关系,那么你最好一开始就设置成多对多关系。从现有多对一关系转变为多对多关系比一开始就是多对多关系要难得多。8给数据保有和恢复制订计划考虑数据保留策略并包含在设计过程中,预先设计你数据恢复过程。采取能够公布给用户/开发人员数据字典实现方便数据识别同时确保对数据源文档化。编写在线更新来”更新查询”供以后万一数据丢失能够重新处理更新。9用存放过程让系统做重活提供一整套常规存放过程来访问各组方便加紧速度和简化客户程序代码开发。数据库不只是一个存放数据地方,它也是简化编码之地。5.其它设计技巧1防止使用触发器触发器功效通常能够用其它方式实现。在调试程序时触发器可能成为干扰。假如你确实需要采取触发器,你最好集中对它文档化。2使用常见英语(或者其它任何语言)而不要使用编码在创建下拉菜单、列表、报表时最好按照英语名排序。假如需要编码,能够在编码旁附上用户知道英语。3保留常见信息让一个表专门存放通常数据库信息非常有用。在这个表里存放数据库当前版本、最近检验/修复(对Access)、关联设计文档名称、客户等信息。这么能够实现一个简单机制跟踪数据库,当客户埋怨她们数据库没有达成希望要求而与你联络时,这么做对非客户机/服务器环境尤其有用。4包含版本机制在数据库中引入版本控制机制来确定使用中数据库版本。时间一长,用户需求总是会改变。最终可能会要求修改数据库结构。把版本信息直接存放到数据库中更为方便。5编制文档对全部快捷方式、命名规范、限制和函数都要编制文档。采取给表、列、触发器等加注释数据库工具。对开发、支持和跟踪修改非常有用。对数据库文档化,或者在数据库本身内部或者单独建立文档。这么,当过了一年多时间后再回过头来做第2个版本,犯错机会将大大降低。6测试、测试、重复测试建立或者修订数据库之后,必须用用户新输入数据测试数据字段。最主要是,让用户进行测试而且同用户一道确保选择数据类型满足商业要求。测试需要在把新数据库投入实际服务之前完成。7检验设计在开发期间检验数据库设计常见技术是经过其所支持应用程序原型检验数据库。换句话说,针对每一个最终表示数据原型应用,确保你检验了数据模型而且查看怎样取出数据。三、数据库命名规范1.实体(表)命名1.1基本标准命名以表述实体真实含义、方便识别为目标,尽可能不采取缩写,尽可能使用大写或大写首字母英文单词,不使用复数。同一字段名在数据库中应保持含义相同。不一样含义实体应该采取不一样字符表示,单词间使用”-”分隔。禁止使用汉字或拼音缩写进行命名,表名、字段名、视图名长度控制在5个单词之内,总长度小于30个字符1.2如遇单词太长,可采取缩写,选择次序以下首选在命名规范”常见缩写”中列示缩写。行业约定被广泛接收缩写。元音字母剔除法生成缩写,缩写后长度应控制在5个字符以内,大写表示,但需在项目词汇表列示。1.3对表命名1)表以名词或名词短语命名,确定表名是采取复数还是单数形式,另外给表别名定义简单规则(比喻说,假如表名是一个单词,别名就取单词前4个字母;假如表名是两个单词,就各取两个单词前两个字母组成4个字母长别名;假如表名字由3个单词组成,从头两个单词中各取一个然后从最终一个单词中再取出两个字母,结果还是组成4字母长别名,其余依次类推)对工作用表来说,表名能够加上前缀WORK_后面附上采取该表应用程序名字。在命名过程当中,依照语义拼凑缩写即可。注意:将字段名称会统一成大写或者小写中一个,故中间加上下划线。举例:基本方法:业务分类+表实体+可选后缀Train_Exam_Result培训考试分值表Train_Exam_Student培训考试学生信息表Train表示培训业务分类,Exam表示考试实体,Result表示考试计划实体计划后缀2)假如表或者是字段名称仅有一个单词,那么提议不使用缩写,而是用完整单词。举例:定义缩写MaterialMa物品;物品表名为:Material,而不是Ma.可是字段物品编码则是:Ma_ID;而不是Material_ID3)全部存放值列表表前面加上前缀Z目标是将这些值列表类排序在数据库最终。4)全部冗余类命名(主要是累计表)前面加上前缀X冗余类是为了提升数据库效率,非规范化数据库时候加入字段或者表5)关联类经过用下划线连接两个基本类之后,再加前缀R方式命名,后面按照字母次序罗列两个表名或者表名缩写。关联表用于保留多对多关系。假如被关联表名大于10个字母,必须将原来表名进行缩写。假如没有其它原因,提议都使用缩写。举例:表Object与本身存在多对多关系,则保留多对多关系表命名为:R_Object;表Depart和Employee;存在多对多关系;则关联表命名为R_Dept_Emp2.属性(列)命名1)采取有意义列名列名以准确表述实体属性为目标。因为在表命名上加入了对实体业务分类,在不发生歧义情况下,在列名命名上能够不再添加分类前缀。表内列要针对键采取一整套设计规则。每一个表都将有一个自动ID作为主健,逻辑上主健作为第一组候选主健来定义;A、假如是数据库自动生成编码,统一命名为:PK_IDB、假如是自定义逻辑上编码则用缩写加”ID”方法命名,即”XXXX_PK_IDC、假如键是数字类型,你能够用_NO作为后缀;D、假如是字符类型则能够采取_CODE后缀E、对列名应该采取标准前缀和后缀。举例:销售订单编号字段命名:Sal_Ord_ID假如还存在一个数据库生成自动编号,则命名为:PK_ID注意:在数据库设计时需要注意数据类型选择,应遵照”数字优先、定长优先”标准2)全部属性加上关于类型后缀注意,假如还需要其它后缀,都放在类型后缀之前。注:数据类型是文本字段,类型后缀TX能够不写。有些类型比较显著字段,能够不写类型后缀。3)采取前缀命名给每个表列名都采取统一前缀,那么在编写SQL表示式时候会得到大大简化。这么做也确实有缺点,比如破坏了自动表连接工具作用,后者把公共列名同一些数据库联络起来。3.视图命名1)视图以V作为前缀+有含义命名(基本表)命名规则和表命名类似;例Vi_Customer2)命名应尽可能表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 客户需求预测与服务提升计划
- 房屋建筑材料运输合同三篇
- 采购试用期工作总结(6篇)
- 银行员工工作总结(汇编15篇)
- 现代诗歌探析
- 舞蹈艺术探索
- 缺血性脑血管病概述
- 护理质控基础护理
- 诗词魅力解析
- 湖南工业大学《大学英语1》2021-2022学年第一学期期末试卷
- 风力发电职业生涯规划与管理
- 2023年英语四级听力真题(第一套)题目-原文与答案
- 第一节-接入互联网-教案
- 第二单元 走进互联网 第四节 网络通讯与交流 课件 2023-2024学年 甘肃教育出版社 初中信息技术七年级上册
- 国家开放大学《可编程控制器应用实训》形考任务1(实训一)参考答案
- 85、团队建设与团队管理
- 第一章 风险原理
- 进化生物学期末总复习
- 《新能源汽车技术》教学大纲
- 大班-科学-桥的过去、现在和未来-ppt课件(互动版)
- 钢结构防火涂料施工、监理报告
评论
0/150
提交评论