数据库设计规范和值得注意的问题

上传人:woxinch****an2018 文档编号:39303720 上传时间:2018-05-14 格式:DOCX 页数:17 大小:40.65KB
返回 下载 相关 举报
数据库设计规范和值得注意的问题_第1页
第1页 / 共17页
数据库设计规范和值得注意的问题_第2页
第2页 / 共17页
数据库设计规范和值得注意的问题_第3页
第3页 / 共17页
数据库设计规范和值得注意的问题_第4页
第4页 / 共17页
数据库设计规范和值得注意的问题_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《数据库设计规范和值得注意的问题》由会员分享,可在线阅读,更多相关《数据库设计规范和值得注意的问题(17页珍藏版)》请在金锄头文库上搜索。

1、如果把企业的数据比做生命所必需的血液,那么数据库的设计就是应用中最重要的一部分。 有关数据 库设计的材料汗牛充栋,大学学位课程里也有专门的讲述。不过,就如我们反复强调的那 样,再好的 老师也比不过经验的教诲。所以我们最近找了些对数据库设计颇有造诣的专业人士给大家 传授一些设 计数据库的技巧和经验。我们的编辑从收到的 130 个反馈中精选了其中的 60 个最佳技巧, 并把这些 技巧编写成了本文,为了方便索引其内容划分为 5 个部分: 第 1 部分 设计数据库之前 这一部分罗列了 12 个基本技巧,包括命名规范和明确业务需求等。 第 2 部分 设计数据库表 总共 24 个指南性技巧,涵盖表内字段设

2、计以及应该避免的常见问题等。 第 3 部分 选择键 怎么选择键呢?这里有 10 个技巧专门涉及系统生成的主键的正确用法,还有何时以及如 何索引字段 以获得最佳性能等。 第 4 部分 保证数据完整性 讨论如何保持数据库的清晰和健壮,如何把有害数据降低到最小程度。 第 5 部分 各种小技巧 不包括在以上 4 个部分中的其他技巧,五花八门,有 了它们希望你的数据库开发工作会 更轻松一些。第 1 部分 设计数据库之前 1. 考察现有环境 在设计一个新数据库时,你不但应该仔细研究业务需求而且还要考察现有的系统。大多数 数据库 项目都不是从头开始建立的;通常,机构内总会存在用来满足特定需求的现有系统(可能

3、 没有实 现自动计算) 。显然,现有系统并不完美,否则你就不必再建立新系统了。但是对旧系统的 研究 可以让你发现一些可能会忽略的细微问题。一般来说,考察现有系统对你绝对有好处。 Lamont Adams 我曾经接手过一个为地区运输公司开发的数据库项目,活不难,用的是 Access 数据库。 我设置 了一些项目设计参数,而且同客户一道对这些参数进行了评估,事先还查看了开发环境下 所采取 的工作模式,等到最后部署应用的时候,只见终端上出了几个提示符然后立马在我面前翘 辫子 了!抓耳挠腮的折腾了好几个小时,我才意识到,原来这家公司的网络上跑着两个数据库 应用, 而对网络的访问需要明确和严格的用户帐号

4、及其访问权限。明白了这一点,问题迎刃而解: 只需 采用客户的系统即可。这个项目给我的教训就是:记住,假如你在诸如 Access 或者Interbase 这 类公共环境下开发应用程序,一定要从表面下手深入系统内部搞清楚你面临的环境到底是 怎么回 事。 kg 2. 定义标准的对象命名规范 一定要定义数据库对象的命名规范 。对数据库表来说,从项目一开始就要确定表名是采用 复数还 是单数形式。此外还要给表的别名定义简单规则(比方说,如果表名是一个单词,别名就 取单词 的前 4 个字母;如果表名是两个单词,就各取两个单词的前两个字母组成 4 个字母长的 别名;如 果表的名字由 3 个单词组成,你不妨从头

5、两个单词中各取一个然后从最后一个单词中再取 出两个 字母,结果还是组成 4 字母长的别名,其余依次类推)对工作用表来说,表名可以加上前 缀 WORK_ 后面附上采用该表的应用程序的名字。表内的列要针对键采用一整套设计规则。 比如, 如果键是数字类型,你可以用_NO 作为后缀;如果是字符类型则可以采用 _CODE 后缀。 对列名 应该采用标准的前缀和后缀。再如,假如你的表里有好多“money”字段,你不妨给每个列 增加 一个_AMT 后缀。还有,日期列最好以 DATE_作为名字打头。 richard 检查表名、报表名和查询名之间的命名规范。你可能会很快就被这些不同的数据库要素的 名称搞 糊涂了。

6、假如你坚持统一地命名这些数据库的不同组成部分,至少你应该在这些对象名字 的开头 用 table、query 或者 report 等前缀加以区别。 rrydenm 如果采用了 Microsoft Access,你可以用 qry、rpt、 tbl 和 mod 等符号来标识对象(比 如 tbl_Employees) 。我在和 SQL Server(或者 Oracle)打交道的时候还用过 tbl 来索引表, 但我 用 sp_company (现在用 sp_feft_)标识存储过程,因为在有的时候如果我发现了更好的 处理办 法往往会保存好几个拷贝。我在实现 SQL Server 2000 时用 udf_

7、 (或者类似的标记)标 识我编 写的函数。 Timothy J. Bruce3. 预先计划 上个世纪 80 年代初,我还在使用资产帐目系统和 System 38 平台,那时我负责设计所有 的日期字段,这样在不费什么力气的情况下将来就可以轻松处理 2000 年问题了。许多人给我说 就别去 解决这一问题了,因为要处理起来太麻烦了(这在世人皆知的 Y2K 问题之前很久了) 。我 回击说 只要预先计划今后就不会遇到大麻烦。结果我只用了两周的时间就把程序全部改完了。因 为预先 计划的好,后来 Y2K 问题对该系统的危害降到了最低程度(最近听说该程序甚至到了 1995 年都 还运行在 AS/400 系统上

8、,唯一出现的小问题是从代码中删除注释费了点工夫) 。 generalist 4. 获取数据模式资源手册 正在寻求示例模式的人可以阅读 数据模式资源手册 一书,该书由 Len Silverston、W. H. Inmon 和 Kent Graziano 编写,是一本值得拥有的最佳数据建模图书。该书包括的章节涵 盖多种 数据领域,比如人员、机构和工作效能等。 minstrelmike 5. 畅想未来,但不可忘了过去的教训 我发现询问用户如何看待未来需求变化非常有用。这样做可以达到两个目的:首先,你可 以清楚 地了解应用设计在哪个地方应该更具灵活性以及如何避免性能瓶颈;其次,你知道发生事 先没有 确

9、定的需求变更时用户将和你一样感到吃惊。 chrisdk 一定要记住过去的经验教训!我们开发人员还应该通过分享自己的体会和经验互相帮助。 即使用 户认为他们再也不需要什么支持了,我们也应该对他们进行这方面的教育,我们都曾经面 临过这 样的时刻“当初要是这么做了该多好”。 dhattrem 6. 在物理实践之前进行逻辑设计 在深入物理设计之前要先进行逻辑设计。随着大量的 CASE 工具不断涌现出来,你的设 计也可以 达到相当高的逻辑水准,你通常可以从整体上更好地了解数据库设计所需要的方方面面。 chardove 7. 了解你的业务 在你百分百地确定系统从客户角度满足其需求之前不要在你的 ER(实体

10、关系)模式中加 入哪怕 一个数据表(怎么,你还没有模式?那请你参看技巧 9) 。了解你的企业业务可以在以后的 开发 阶段节约大量的时间。一旦你明确了业务需求,你就可以自己做出许多决策 了。 rangel 一旦你认为你已经明确 了业务内容,你最好同客户进行一次系统的交流。采用客户的术语 并且向他们解释你所想到的和你所听到的。同时还应该用可能、将会和必须等词汇表达出系统的 关系基 数。这样你就可以让你的客户纠正你自己的理解然后做好下一步的 ER 设计。 teburlew8. 创建数据字典和 ER 图表 一定要花点时间创建 ER 图表和数据字典。其中至少应该包含每个字段的数据类型和在每 个表内 的主

11、外键。创建 ER 图表和数据字典确实有点费时但对其他开发人员要了解整个设计却是 完全必 要的。越早创建越能有助于避免今后面临的可能混乱,从而可以让任何了解数据库的人都 明确如 何从数据库中获得数据。 bgumbert 有一份诸如 ER 图表等最新文档其重要性如何强调都不过分,这对表明表之间关系很有用, 而数 据字典则说明了每个字段的用途以及任何可能存在的别名。对 SQL 表达式的文档化来说 这是完 全必要的。 vanduin.chris.cj 9. 创建模式 一张图表胜过千言万语:开发人员不仅要阅读和实现它,而且还要用它来帮助自己和用户 对话。 模式有助于提高协作效能,这样在先期的数据库设计中

12、几乎不可能出现大的问题。模式不 必弄的 很复杂;甚至可以简单到手写在一张纸上就可以了。只是要保证其上的逻辑关系今后能产 生效 益。 Dana Daigle 10. 从输入输出下手 在定义数据库表和字段需求(输入)时,首先应检查现有的或者已经设计出的报表、查询 和视图 (输出)以决定为了支持这些输出哪些是必要的表和字段。举个简单的例子:假如客户需 要一个 报表按照邮政编码排序、分段和求和,你要保证其中包括了单独的邮政编码字段而不要把 邮政编 码糅进地址字段里。 peter.marshall 11. 报表技巧 要了解用户通常是如何报告数据的:批处理还是在线提交报表?时间间隔是每天、每周、 每月、

13、每个季度还是每年?如果需要的话还可以考虑创建总结表。系统生成的主键在报表中很难 管理。 用户在具有系统生成主键的表内用副键进行检索往往会返回许多重复数据。这样的检索性能比较 低而且容易引起混乱。 kol 12. 理解客户需求 看起来这应该是显而易见的事,但需求就是来自客户(这里要从内部和外部客户的角度考 虑) 。 不要依赖用户写下来的需求,真正的需求在客户的脑袋里。你要让客户解释其需求,而且 随着开 发的继续,还要经常询问客户保证其需求仍然在开发的目的之中。一个不变的真理是:“只 有我 看见了我才知道我想要的是什么”必然会导致大量的返工,因为数据库没有达到客户从来没 有写 下来的需求标准。而更

14、糟的是你对他们需求的解释只属于你自己,而且可能是完全错误的。 kgilson第 2 部分 设计表和字段 1. 检查各种变化 我在设计数据库的时候会考虑到哪些数据字段将来可能会发生变更。比方说,姓氏就是如 此(注 意是西方人的姓氏,比如女性结婚后从夫姓等) 。所以,在建立系统存储客户信息时,我倾 向于 在单独的一个数据表里存储姓氏字段,而且还附加起始日和终止日等字段,这样就可以跟 踪这一 数据条目的变化。 Shropshire Lad 2. 采用有意义的字段名 有一回我参加开发过一个项目,其中有从其他程序员那里继承的程序,那个程序员喜欢用 屏幕上 显示数据指示用语命名字段,这也不赖,但不幸的是,

15、她还喜欢用一些奇怪的命名法,其 命名采 用了匈牙利命名和控制序号的组合形式,比如 cbo1、 txt2、txt2_b 等等。 除非你在使用只面向你的缩写字段名的系统,否则请尽可能地把字段描述的清楚些。当然, 也别 做过头了,比如 Customer_Shipping_Address_Street_Line_1 I 虽然很富有说明性,但没 人愿意 键入这么长的名字,具体尺度就在你的把握中。 Lamont Adams 3. 采用前缀命名 如果多个表里有好多同一类型的字段(比如 FirstName) ,你不妨用特定表的前缀(比如 CusLastName)来帮助你标识字段。 notoriousDOG 时

16、效性数据应包括“最近更新日期/时间”字段。时间标记对查找数据问题的原因、按日期重 新处理/重载数据和清除旧数据特别有用。 kol 5. 标准化和数据驱动 数据的标准化不仅方便了自己而且也方便了其他人。比方说,假如你的用户界面要访问外 部数据 源(文件、XML 文档、其他数据库等) ,你不妨把相应的连接和路径信息存储在用户界面 支持表 里。还有,如果用户界面执行工作流之类的任务(发送邮件、打印信笺、修改记录状态等) , 那 么产生工作流的数据也可以存放在数据库里。预先安排总需要付出努力,但如果这些过程 采用数 据驱动而非硬编码的方式,那么策略变更和维护都会方便得多。事实上,如果过程是数据 驱动 的,你就可以把相当大的责任推给用户,由用户来维护自己的工作流过程。 tduvall 6. 标准化不能过头 对那些不熟悉标准化一词(normalization )的人而言,标准化可以保证表内的字段都是最 基础的 要素,而这一措施有助于消除数据库中的数据冗余。标准化有好几种形式,但 Th

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号