必发娱乐最新官方网址数据库设计经验

 

2004-11-24微软技术博客

作者: wjk.net(转载)

一个成功的田间管理体系,是由:[50% 的业务 + 50% 的软件] 所构成,而 50%
的成软件而产生 [25% 的数据库 + 25%之次第]
所结合,数据库设计之高低是一个重点。如果管公司之数据比较做生
所不可或缺的血流,那么数据库的宏图虽是用中尽紧要的一致统分
。有关数据库设计之素材汗牛充栋,大学学位课程里吗闹特意的叙说
。不过,就如我辈反复强调的那样,再好的教育工作者吗比不过经验的教诲
。所以我归纳历年来所动的弯路及认知,并于网上检索了来针对数据库设
计颇有功夫的专业人士给大家传授一些企划数据库的技术及经历
。精选了内的60
只极品技巧,并将这些技能编写成了本文,为了方便索引其内容分 为 5
单有:

第 1 有些 – 设计数据库之前

及时等同有罗列了 12 个着力技能,包括取名规范与明朗作业要求等。

第 2 片段 – 设计数据库表

总共 24 个指南性技巧,涵盖表内字段设计与该避免的宽广问题相当。

第 3 部分 – 选择键

怎取舍择键呢?这里有 10 独技术专门提到系统生成的主键的科学用法,还产生何
时以及如何寻找引字段因获得最佳性能相当。

第 4 部分 – 保证数据完整性

议论如何保持数据库底一清二楚与矫健,如何管危害数据下降至无限小程度 。

第 5 部分 – 各种小技巧

勿包括以上述 4
个组成部分中之其它技术,五花八门,有了它想而的数据库开发工作
会更轻松局部。

第 1 组成部分 – 设计数据库之前

相现有条件

在计划一个初数据库时,你非但应当精心研究业务要求而还要考察
现有的网。大多数数据库项目还不是开端开始起之;通常
,机构外总会在用来满足特定需求的共处系统(可能没有兑现自动
计算)。显然,现有系统并无完善,否则你尽管无须还建立新系了
。但是本着原始体系的研讨可以于你发觉有的恐怕会见忽略的微薄问题
。一般的话,考察现有系统针对君绝对有裨益。

概念标准的目标命名规范

肯定要是定义数据库对象的命名规范。对数据库表来说
,从品种雷同开始就要确定表名是行使复数还是单数形式
。此外还要给表的别名定义简单规则(比方说,如果表名是一个单词
,别叫就是获取就词的前面4
个假名;如果表名是个别独单词,就各取两独单词的前方片个假名组成 4
单字母长的别名;如果表底名字由
3只单词组成,你不妨起来两个单词遭各取一个然后由最后一个单词遭
再取出两只假名,结果还是组成
4字母长的号,其余依次类推)对工作用表来说,表名可以增长前缀
WORK_后面附上采用该表的应用程序的名字。表内的排[字段
]若果针对键采用一整套企划规则。比如,如果键是数字型 ,你得用
_N作为后缀;如果是字符类型则可使用
_C后缀。对列[字段]名叫当使标准的前缀和后缀。再设
,假如你的表里有过多”money”字段,你不妨吃每个列[字段 ]加一个
_M后缀。还有,日期列[字段]最好以 D_ 作为名字打头。

检查表名、报表名和查询名之间的命名规范。你恐怕会见迅速便让这些
不同的数据库要素的称呼将糊涂了。假如你坚持合并地命名这些数据
库的不同部分,至少你应有在这些目标名字的启用Table、Query 或者
Report 等前缀加以区分。

使应用了 Microsoft Access,你得用 qry、rpt、tbl 和 mod
等标志来标识对象(比如tbl_Employees)。我当与 SQL Server
打交道的时节还为此了 tbl 来索引表,但自己所以 sp_company (现在用
sp_feft_)标识存储过程,因为当一部分上要我发觉了重新
好的拍卖方法往往会保留好几只拷贝。我于贯彻 SQL Server 2000 时用udf_
(或者类似之标记)标识我修的函数。

工欲善其事, 必先利其器

采取理想的数据库设计工具,比如:SyBase 公司的 PowerDesign,她支持
PB、VB、Delphe 等语言,通过 ODBC可以连续市面上风行的 30 多个数据库,包括
dBase、FoxPro、VFP、SQL Server 等,今后发空子我用根本介绍PowerDesign
的行使。

获取数据模式资源手册

恰恰以营示例模式的人口好看《数据模式资源手册》一题,该书由 Len
Silverston、W. H. Inmon 和 Kent Graziano
编写,是均等比照值得所有的特级数据建模图书。该书概括的段涵盖多
种数据领域,比如人口、机构和工作成效等。其他的公还足以参见:
[1]萨师煊王珊著数据库系统概论(第二版)高等教育出版社 1991、[2][美]
Steven M.Bobrowski 著 Oracle 7
和客户/服务器计算技巧自入门到精通刘建元等译电子工业出版社,1996、[3]周中元信息体系建模方法(下)电子及信息化1999年第3企,1999尽情想未来,但不足淡忘了千古的教训我发觉询问用户如何对未来需求转变异常管用。这样做足达标少
个目的:首先,你可以理解地了解下设计于谁地方应再兼具灵活
性以及哪些避免性能瓶颈;其次,你懂得有事先未曾确定的需求变
更经常用户将与而一样感觉到震惊。

肯定要是切记过去的经验教训!我们开发人员还应当通过分享自己的体
会和更互相帮助。即使用户觉得他们再次为无欲什么支持了
,我们吧应有本着她们开展这方面的教育,我们还已经面临了这么的时
刻”当初若是是如此做了该多好..”。

在情理实践之前进行逻辑设计

以深深物理设计前面若优先进行逻辑设计。随着大气底
CASE工具不断涌现出来,你的筹划为堪上相当强的逻辑水准
,你平凡可以于总体达标再次好地打听数据库设计所需要之满贯。

摸底您的政工

每当你百分百地规定系由客户角度满足该需求前不要当您的
ER(实体关系)模式被投入哪怕一个数据表(怎么,你还不曾模式
?那要您参看技巧9)。了解您的商店业务可以在后来的开发阶段节约大量之年华
。一旦您明白了事情要求,你就好团结做出过多核定了。

万一您以为你都明显了政工内容,你最好和客户进行同样不行系统的交
流。采用客户的术语并且于她们讲你所想到的和汝所闻的
。同时还应当据此或、将会跟得顶词汇表达出体系的涉基数
。这样你就得吃您的客户纠正你自己之了解然后开好下同样步之ER 设计。

创办数量字典和 ER 图表

得要花点时间创造 ER
图表和多少字典。其中至少应包含每个字段的数据类型和在每个表
内的预兆外键。创建 ER
图表以及多少字典确实发生硌困难但针对任何开发人员要了解任何规划却是
完全必要的。越早创建越能有助于避免下面临的或是混乱
,从而可以给另外问询数据库的人头都众所周知什么从数据库被得到多少。

发生同份诸如 ER
图表等风靡文档其要如何强调还无过分,这对表明表内关系十分
有因此,而数字典则证实了每个字段的用与另外可能有的别名 。对SQL
表达式的文档化来说这是完全必要的。

创造模式

同张图胜了千言万语:开发人员不仅使看与实现其
,而且还要因此其来提携协调与用户对话。模式有助于提高合作效能
,这样于事先的数据库设计被几未可能出现非常的题材
。模式不必为的生复杂;甚至可概括到手写在相同摆纸上便好了
。只是要包其上的逻辑关系今后亦可生效益。

自从输入输出下手

每当定义数据库表和字段需求(输入)时,首先应反省现有的抑都
设计有的表、查询以及视图(输出)以控制为了支持这些输出哪些是
必要之阐发及字段。举个简单的例子:假如客户需要一个表格按照邮政
编码排序、分段和求和,你如果包内部包括了独自的邮政编码字段而
不要将邮政编码糅进地址字段里。

表技巧

假设打听用户一般是如何告数的:批处理或者在线提交报表
?时间距离是每天、每周、每月、每个季度或者年年
?如果需要的话还好设想创建总结表。系统生成的主键在报表被生
难管理。用户在备系统生成主键的表内用副键进行搜寻往往会回去
许多重复数据。这样的搜寻性能于没有而且容易招惹混乱。

亮客户要求

关押起就应当是醒目的从事,但要求就是是源于客户
(这里而自里头及标客户的角度考虑)。不要借助用户写下来的需
求,真正的需在客户之头颅里。你而给客户说其需
,而且趁机开发之存续,还要时不时询问客户保管其需要依旧以支付之
目的里边。一个非换的真理是:”只有自身见了本人才知自己怀念如果的凡
什么”必然会导致大气之返工,因为数据库没有上客户从不曾写
下来的求标准。而再次不好的凡你针对他们需要的说明只有属您自己
,而且也许是截然错误的。

第 2 有 – 设计表和字段

自我批评各种变通

自己在筹划数据库的上会考虑到哪边数据字段将来或者会见产生变更
。比方说,姓氏就是这般(注意是西方人的姓,比如女性结婚后自
夫姓齐)。所以,在确立系统存储客户信息时,我支持于当单独的一样
个数据表里存储姓氏字段,而且还叠加起始日与终止日等字段
,这样就是得跟这无异于数条目的别。

以闹义之配段名

产生同回我在场开发了一个类,其中起从其他程序员那里继承的程序
,那个程序员喜欢用屏幕上显得数据指示用语命名字段,这吗非赖
,但不幸的凡,她还嗜用一些意想不到之命名法,其命名采用了匈牙利
命名和控制序号的组合形式,比如cbo1、txt2、txt2_b 等等。
只有你在动只面向您的缩写字段名的系,否则要尽量地管字段
描述的解些。当然,也别做过度了,比如Customer_Shipping_Address
_Street_Line_1,虽然十分富有说明性
,但不曾人甘愿键入这么长之讳,具体标准就在你的把面临。
动用前缀命名。如果多个表里有很多同型的字段(比如
FirstName),你不妨用特定表的前缀(比如 CusLastName)来援助你标识字段。

时效性数据应包括”最近更新日期/时间”字段。时间标记对寻找数
据问题的因、按日期重新处理/重载数据以及消除旧数据特别有因此。
准和数目驱动数据的尺码不仅有利于了团结还要为有利于了其他人。比方说
,假如你的用户界面要访问外部数据源(文件、XML
文档、其他数据库等),你不妨把相应的连日和路径信息存储于用户
界面支持表里。还有,如果用户界面执行工作流之类的职责
(发送邮件、打印信笺、修改记录状态相当),那么来工作流的数据
也可存放于数据库里。预先安排总用交给努力,但若这些经过
采用数据驱动而休硬编码的方式,那么策略改变和保安还见面有利于得差不多
。事实上,如果经过是数据驱动之,你便好把相当可怜的事推给用
户,由用户来保安团结的工作流过程。

准不能够过头

针对那些未熟悉标准化一乐章(normalization)的总人口而言
,标准化可以确保表内的字段都是最为基础之要素,而立无异艺术促进
消除数据库被的数码冗余。标准化来几许栽形式,但Third Normal
Form(3NF)通常被认为在性能、扩展性和数据完整性方面达成
到了极端好平衡。简单的话,3NF 确定:
* 表内的各国一个值都只能于发挥相同差。
* 表内的各个一行还应当为唯一的标识(有唯一键)。
* 表内未应有储存依赖让其他键的非键信息。
迪 3NF 标准的数据库有以下特征:有同组表专门存放通过键连接起来的关
联数据。比方说,某个存放客户及其有关定单的 3NF
数据库就可能发少数独说明:Customer 和 Order。Order
表不含有定单关联客户之任何消息,但表内会存放一个键值 ,该键指向Customer
表里含该客户信息之那一行。
再也胜似层次的标准也出,但又标准是否就必还好呢?答案是匪必然
。事实上,对少数品种以来,甚至就是连 3NF 都或吃数据库引入太强之复杂性。

以效率的故,对发明不开展标准化有时也是必备之
,这样的事例很多。曾经产生个出餐饮分析软件之活着虽是用无标准化
表把询问时打平均
40秒降低到了点滴秒左右。虽然我只好如此做,但自己毫无将数据表的非
标准化当作理所当然的设计理念。而现实的操作而是如出一辙栽使生
。所以要表出了问题重新来不标准化的表是完全可能的。

Microsoft Visual FoxPro 报表技巧

只要您正以 Microsoft Visual
FoxPro,你可为此对用户自己之字段名来代替编号的名称 :比如用 Customer
Name 代替 txtCNaM。这样,当你用为导程序 [Wizards,台湾人数誉为’精灵’]
创建表单和表格时,其名字会吃那些无是程序员的丁重复易看。

非活跃或未采取的指示符

搭一个字段表示所当记录是否当工作中不再活跃挺有因此底
。不管是客户、员工还是别什么人,这样做都能推动重新运行查询
的下过滤活跃或不欢状态。同时还破了新用户在用数据时
所面临的部分题材,比如,某些记录或不再为她们所用
,再去的当儿可以由至早晚之防止作用。

利用角色实体定义属于有项目的排[字段]

以急需对属特定项目或者有所特定角色的东西做定义时
,可以据此角色实体来创造特定的年华涉及关系,从而可以兑现自我文 档化。
这里的意义不是叫 PERSON 实体带有 Title 字段,而是说,为什么未用 PERSON
实体和 PERSON_TYPE实体来讲述人员也?比方说,当 John Smith, Engineer
提升为 John Smith, Director 乃至最后爬至John Smith, CIO
的上位,而具你如果举行的但是是移简单只表 PERSON 和
PERSON_TYPE之间关系之键值,同时多一个日子/时间字段来了解变化是何时发
生的。这样,你的 PERSON_TYPE 表就含有了颇具 PERSON的可能类型,比如
Associate、Engineer、Director 、CIO 或者 CEO 等。
还发出只代表方式尽管是转 PERSON
记录来体现新头衔的别,不过这样一来在岁月达无法跟踪个人所处
位置的具体日子。

行使常用实体命名机构数量

团体数据的绝简易方法尽管是动常用名字,比如:PERSON
、ORGANIZATION、ADDRESS 和
PHONE等等。当你管这些常用的貌似名字做起来还是创造特定的照应副实
体时,你就算获了协调因此的出格版。开始的下以一般术语的主
要由在所有的实际用户还能够针对抽象事物具体化。
生矣这些抽象意味,你就是可在第 2
级标识被运用自己之非正规名称,比如,PERSON
可能是Employee、Spouse、Patient、Client 、Customer、Vendor 或者
Teacher等。同样的,ORGANIZATION 也说不定是
MyCompany、MyDepartment、Competi tor、Hospital、Warehouse、Governm ent
等。最后ADDRESS 可以具体也 Site、Location、Home、Work、Client
、Vendor、Corporate 和FieldOffice 等。
运用一般抽象术语来标识”事物”的项目好于您在干数据为满足
业务要求地方得到巨大的灵活性,同时这样做还好明显降低数据存
储所要的冗余量。

用户来源世界各地

当规划用到网络要有所任何国际特性的数据库时,一定要是铭记在心大多
数国家都出不同之字段格式,比如邮政编码等,有些国家
,比如新西兰即使从来不邮政编码一说。

多少再次用使用分立的数据表

一旦你发现自己在更输入数据,请创建新表和初的关联。
每个表中都该长的 3 只有效之字段
* dRecordCreationDate,在 VB 下默认是 Now(),而以 SQL Server 下默认为
GETDATE()
* sRecordCreator,在 SQL Server 下默认为 NOT NULL DEFAULT USER
* nRecordVersion,记录的本标记;有助于准确说明 记录面临出现 null
数据还是丢失数据的故
本着地方及电话采用多独字段
讲述街道地址便短短一行记录是不够的。Address _Line1、Address_Line2 和
Address_Line3
得提供再要命的八面玲珑。还有,电话号码和邮件地址最好有自己的
数据表,其间有自己的路及标记类别。

过度标准化可如果小心,这样做或会见促成性及冒出问题
。虽然地点和电话表分离通常可以齐最佳状态,但是若要常
访问这类似消息,或许在那父表中存放”首选”信息(比如
Customer 等)更为稳妥些。非标准化和加快访问期间的妥协是出自然意义的。

使多个号字段

本人认为不行受惊,许多人数当数据库里就吃
name留一个字段。我以为只有刚入门的开发人员才会这样做
,但实则网上这种做法非常大。我建议该将姓氏与名作两
个字段来拍卖,然后在查询的早晚又将她们结合起来。

我极其常用之是以一如既往表中开创一个计算列[字段],通过其好活动
地连接标准化后底字段,这样数据变动的时候它呢就变。不过
,这样做在以建模软件时得死灵敏才行。总之,采用连接字段的方
式可以使得的割裂用户用与开发人员界面。
防大小写混用的对象名和特殊字符过去最令我一气之下的事情之一就是是数据库里发生大大小小写混用的对象名
,比如 CustomerData。这等同题目由 Access 到
Oracle数据库都留存。我莫喜下这种大小写混用的对象命名方法
,结果还只能手工修改名字。想想看,这种多少库
/应用程序能混到利用重复精数据库的那无异上也?采用全大写而且
包含下划符的讳拥有双重好之可读性(CUSTOMER_DATA
),绝对不要当目标名之字符中留空格。

小心保留词

倘管你的字段名没有跟保留词、数据库系统或者常用访问方法冲突
,比如,最近自家修的一个 ODBC 连接程序里发出只说明,其中虽因故了
DESC作为验证字段名。后果可想而知!DESC 是 DESCENDING
缩写后底保留词。表里的一个 SELECT
*语词也会就此,但自身抱的可是平等杀堆并非用处之信息。

维持字段名和路的一致性

每当命名字段并为那个指定数据类型的时节势必要力保一致性
。假如字段在某某表中叫做”agreement_number”
,你不怕变更以其它一个表里把名字改成成为”ref1″。假如数据类型在一
个表里是整数,那在外一个表里可就是成形变成字符型了。记住
,你干了自己的生了,其他人还要因此而的数据库也。

周密挑选数字型

每当 SQL 中运用 smallint 和 tinyint
类型要专门小心,比如,假如你想看月销售总额,你的总和字段类
型是smallint,那么,如果总额超过了 $32,767 你不怕未克拓展测算操作了。

抹标记

当表明中带有一个”删除标记”字段,这样尽管可把实行号为除去
。在关系数据库里永不单独去某平等履;最好利用清除数据程序同时
要仔细维护索引整体性。

避下触发器

触发器的效力通常可以为此别样办法贯彻。在调试程序时触发器可能成
为干扰。假如你真正用用触发器,你最好集中对其文档化。
饱含本机制建议乃当数据库被引入版本控制机制来确定下着的数据库的版本
。无论如何你还要兑现就无异于求。时间一致长,用户的需要连续会改
的。最终可能会见要求修改数据库结构。虽然你可通过检查新字段或
者索引来确定数据库结构的本,但我意识将版本信息直接存放到数
据库中不更加好呢?

受文本字段留足余量

ID 类型的公文字段,比如客户
ID或定单号等等都应设置得比一般想象更老,因为日子不加上而多半就是
会因为只要补加额外的字符而难堪不已。比方说,假而你的客户 ID 为
10号数长。那尔该拿数据库表字段的长短要为 12 或者 13
单字符长。这算浪费空间吗?是有少数,但为从不你想象的那么基本上 :一个字段加长
3个字符在出 1 百万长条记下,再增长一些目录的动静下才可给全体数据库多占
3MB的空间。但随即额外占据的上空却不必将来重构整个数据库就好兑现
数据库规模之加强了。身份证的编号从 15 位变成 18
各项就是是极好与最痛苦的例证。

列[字段]取名技巧

俺们发现,假如你为每个表底排[字段]名都采用统一之前方缀 ,那么当编制
SQL表达式的早晚会拿走大大的简化。这样做吗确发生缺失点
,比如破坏了自动表连接工具的来意,后者将公共列[字段
]名同某些数据库联系起来,不过尽管连这些家伙有时无也连续错误嘛
。举个简单的事例,假设有两个说明:
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_denoscription
等。
如此这般由数据库中选出全部多少的 SQL 语句可以描绘成如下所示:
Select * From Customer, Order Where cu_surname = “MYNAME” ;
and cu_name_id = or_cust_name_id and or_quantity = 1
在没这些前缀的情景下则形容成是样子(用别名来分别):
Select * From Customer, Order Where Customer.surname = “MYNAME” ;
and Customer.name_id = Order.cust_name_id and Order.quantity = 1
第 1 单 SQL 语句没丢掉键入多少字符。但要查询涉及到 5
独说明乃至更多之排[字段]而就是掌握这个技术多发生因此了。

第 3 部分 – 选择键和目录

数量采掘要预先计划

自身所于的之一平客户单位已使处理
8万大多客联系方式,同时填写每个客户之必需数据(这绝免是小活)
。我从中还要确定有同组客户作为市场目标。当自己打最开头设计表和
字段的时光,我待不以主索引里增加极其多的字段以便加速数据库的
运行速度。然后我意识及特定的组查询与消息采掘既非精确速度为无
快。结果只能当主索引中重建而且合并了数据字段。我发觉发生一个借助
示计划相当重大——当自家思念创造系统项目查找时怎么要运用号码作
为主索引字段为?我得以用传真号码进行搜寻,但是她几乎就象系统
类型一样对我的话并无重大。采用后者作为主字段,数据库更新后重
新索引和寻找就赶快多了。

可操作数据仓库(ODS)和数据仓库(DW)这片栽环境下的数据
索引是来距离之。在
DW环境下,你如果考虑销售部门是何许组织销售移动的。他们连无是数
库管理员,但是她们确定表内的键信息。这里设计人员或者数据库工
作人员该分析数据库结构从而确定来性能与不利输出之间的顶尖条 件。

使用系统生成的主键

即时看似以及技术 1,但我看有必要当此更提醒大家。假如你连在规划数据库
的早晚以系统生成的键作为主键,那么您实际决定了数据库的索引
完整性。这样,数据库与未人工机制就算中地控制了对存储数据遭到每
一行的造访。
采取系统生成键作为主键还有一个独到之处:当你所有一致的键结构时
,找到逻辑缺陷很容易。

解释字段用于索引

以分离命名字段和寓字段为支持用户定义之报表
,请考虑分解其他字段(甚至主键)为那个构成要素以便用户可对那
进行索引。索引将加紧
SQL和表格生成器脚本的执行进度。比方说,我日常在必须用 SQL LIKE
表达式的景况下创造报表,因为 case number 字段无法分解为year、serial
number、case type 和 defendant
code等要素。性能也会变换大。假如年度和路字段可以说为寻引字段那
么这些报表运行起来就会见急忙多矣。

键设计 4 原则

* 为涉及字段创建外键。
* 所有的键都必须唯一。
* 避免以复合键。
* 外键总是关联唯一的键字段。

变忘了目录

目录是自数据库中获取数据的无比快捷方式有。95%底数据库性能问题还得使索引技术得到解决。作为同一长长的规则
,我便对逻辑主键使用唯一的成组索引,对系统键(作为存储过程
)采用唯一的非成组索引,对其它外键列[字段]使非成组索引
。不过,索引就象是盐,太多矣菜就净了。你得考虑数据库的空中有
多特别,表如何进展访问,还有这些访问是否要为此作读写。

大部分数据库都引得自动创建的主键字段,但是只是转移忘了找引他键
,它们啊是隔三差五使用的键,比如运行查询显示主表和富有关联表的某
条记下就就此得达。还有,不要索引memo/note
字段,不要索引大型字段(有不少字符),这样作会吃索引占用太多
的仓储空间。
绝不索引常用的小型表不要吧小型数据表设置任何键,假如它们常产生插入和去操作就再也
别这样作了。对这些插入和去操作的目录维护或比扫描表空间消
耗更多之流年。
毫不管社会保障号码(SSN)或身份证号码(ID)选作键。
世代都毫无使 SSN 或 ID
作为数据库的键。除了隐私原因之外,须知政府更是趋于于不准许 把 SSN 或
ID
故此作除收入有关外的别目的,SSN 或
ID需要手工输入。永远不要使手工输入的键作为主键
,因为如果你输入错误,你唯一能做的就是去除所有记录然后开开 始。

自在破解他人的先后上,我瞅成千上万人口将 SSN 或
ID还曾于用做多重号,当然尽管这样做是黑的。而且人们为还明白这
是伪的,但他俩都习惯了。后来,随着盗取身份犯罪案件的加
,我现在底同行正痛苦地打平异常摊数据被管 SSN 或 ID 删除。

无须就此用户之键

在确定以什么字段作为表的键的上,可自然要小心用户即将编辑
的字段。通常的状况下未设摘用户可编制的字段作为键
。这样做会迫使你利用以下简单单办法:
* 在开创记录后对用户编辑字段的行事施加限制。假如你如此做了
,你可能会见发觉而的应用程序在商务需求突然发生变化
,而用户需要编制那些不可编辑的字段时缺乏足够的油滑
。当用户在输入数据之后直到保存记录才察觉网发出了问题他们该怎
么想?删除重建?假如记录不可重建是否让用户走起来?
* 提出有检测与纠正键冲突的法门。通常,费点精力也尽管下手定矣
,但是于性质上来拘禁这么做的代价就是较充分了。还有
,键的拨乱反正或者会见迫使你突破你的数额和商业/用户界面层之间的隔 离。
用还是再次提一句古语:你的设计要适应用户如果非是受用户来适应你 的计划性。

匪给主键具有可更新性的由是当论及模式下,主键实现了不同表的
间的关系。比如,Customer
表有一个主键CustomerID,而客户之定单则存放于其余一个表里 。Order
表的主键可能是 OrderNo 或者
OrderNo、CustomerID和日期的结合。不管你挑啊种键设置,你都需以 Order
表中存放 CustomerID 来管你可于下定单的用户找到那定单记录。
若你当 Customer 表里窜了 CustomerID,那么您不能不找来
Order表中的有所相关记录对那个进展改动。否则,有些定单就见面不属其他
客户——数据库的完整性就算完蛋了。
使搜索引完整性规则施加到说明一级,那么在匪修大量代码和附加删
除记录的情形下几未可能改变有平等长记下之键和数据库内所有关联
的记录。而当时同一过程往往错误丛生所以应该尽量避免。

但选键(候选键)有时只是做主键

纪事,查询数据的莫是机器而是人口。
若是你发出可选键,你或许进一步管其因此做主键。那样的话
,你就具备了起强有力索引的力。这样可阻碍使用数据库的丁非
得无总是数据库从而恰当的过滤数据。在严格控制域表的数据库上
,这种负荷是于强烈的。如果只是选键真正有因此,那便是达了主键 的水平。
本身之看法是,假如你闹可选键,比如国家表内的state_code,你绝不当现有不可知改变的唯一键直达创造后续
的键。你要是召开的仅是创办毫无价值的数目。如您坐过于使用表的
后续键[别名]建这种表底关联,操作负载真得要考虑一下了。

变动忘了外键

多数数据库索引自动创建的主键字段。但转变忘了目录外键字段
,它们在公想查询主表中之笔录及其涉及记录时老是都见面为此到。还有
,不要索引memo/notes
字段而且不要索引大型文本字段(许多字符),这样做会叫您的索引
占据大量之数据库空间。

第 4 部分 – 保证数据的完整性

故绳若非商务规则强制数据完整性

只要您照商务规则来处理要求,那么你该检查商务层次
/用户界面:如果商务规则下发生转移,那么就需要进行翻新即可
。假如需求来维护数据完整性的要,那么以数据库层面达到待施
加限制标准。如果您以数据层确实以了约,你如果保证发生法子将还
新不可知透过自律检查的由使用户知道的言语通知用户界面
。除非你的字段命名很冗长,否则字段名本身还不够。

如有或,请以数据库系统实现数据的完整性。这不光包括透过
标准化实现之完整性而且还包数据的功能性。在描绘多少的时节还只是
以增加触发器来保证数据的对。不要借助让商务层保证数据完整
性;它不可知保证表之间(外键)的完整性所以不能够强加给其它完整性 规则之上。

分布式数据系统

针对分布式系统而言,在你决定是否当相继站点复制所有数据要拿数
据保存在一个地方之前应估计一下前景 5 年或者 10
年的数据量。当您将数量传送至另外站点的下,最好当数据库字段
中设置有号。在目的站点收到你的数量以后更新您的标记
。为了拓展这种多少传,请写下而协调的批判处理要调度程序为单独
定时间间隔运行而不要给用户在每天的干活晚传输数据
。本地拷贝你的保安数据,比如计算常数和利等
,设置版本号保证数据在每个站点都完全一致。

强制指示完整性(参照完整性?)

尚无好方法能够于损害数据上数据库后排其,所以若应有当其迈进
入数据库之前以该删除。激活数据库系统的指令完整性特性
。这样可保持数据的干净而会迫使开发人员投入还多的工夫处理错误条件。

关系

假定少只实体之间有多对同样涉,而且还有可能转正为多针对大多涉及
,那么您无与伦比好同一上马即装成多对几近干。从现有的基本上对同样关联变化
为多针对多干比较平始发即是差不多对大多涉及而麻烦得差不多。

应用视图

以当您的数据库暨公的应用程序代码之间提供任何一样重叠抽象
,你可以呢你的应用程序建立专门的视图而不用非要是应用程序直接访问
问数据表。这样做还相当于在处理数据库变更时被你提供了重多之自由 。

于多少有所和回复制定计划

考虑数据具有策略并含在筹划过程中,预先设计而的数据恢复过程
。采用可以揭示让用户/开发人员的数量字典实现好之数识别与
时保对数码源文档化。编写在线更新来”更新查询
“供以后万一致数量丢失可重新处理更新。
因而存储过程为系统做重活解决了多辛苦来发出一个装有高度完整性的数据库解决方案之后
,我操封装一些关联表的功能组,提供一整套健康的囤过程来访
问各组以便加快速度和简化客户程序代码的开支。数据库不仅是一个
存放数据的地方,它吧是简化编码之地。

运用查找

控制数据完整性的顶尖艺术就是是限制用户的选。只要出或都应当
提供给用户一个分明的值列表供其择。这样以减少键入代码的错
误和误解而提供数据的一致性。某些公共数据特别契合查找
:国家代码、状态代码等。

第 5 部分 – 各种小技巧

文档、文档、文档

针对具有的快捷方式、命名规范、限制与函数都如编写文档。

行使给表、列[字段]、触发器等加注的数据库工具。是的
,这有接触费事,但自遥远来拘禁,这样做对出、支持以及跟修改好 有因此。

在你采取的数据库系统,可能发生部分软件会为您有的供您快速达成
手的文档。你或想先开始于说,然后取越来越多的细节
。或者你恐怕想周期性的预排,在输入新数据同时就你的进行对
每一样有些细节化。不管您选啊种艺术,总要本着君的数据库文档化
,或者在数据库自身的其中或独立建立文档。这样
,当您了了一致年多时光后还回过头来做第2 个本子,你犯错的火候将大大减少。

行使常用英语(或者其它任何语言)而并非采取编码

缘何咱们经常以编码(比如 9935A
可能是’青岛啤酒’的供应代码,4XF788-Q可能是帐目编码)?理由很多。但是用户一般还因此英语进行思想要不
是编码。工作 5 年的会计师或许知道
4XF788-Q凡是什么东西,但新来的但即无自然了。在开立下拉菜单、列表
、报表时最好照英语名排序。假如你要编码,那您得当编码旁
附上用户了解的英语。

保存常用必发娱乐最新官方网址信息

叫一个发明专门存放一般数据库信息充分管用。我经常以是表里存放数
据库当前版本、最近检讨/修复(对FoxPro)、关联设计文档的称谓、客户等信息
。这样可以实现同种植简单机制跟踪数据库,当客户抱怨他们之多寡库
没有上梦想的求如跟你关系时,这样做对非客户机 /服务器环境特别发因此。

测试、测试、反复测试

建或者修订数据库后,必须用用户新输入的数据测试数据字段
。最要害的是,让用户展开测试并且和用户一起保险你拣的数类
型满足商业要求。测试需要在管新数据库投入其实服务前好。

检查计划

在支付期间检查数据库设计的常用技术是经过该所支撑的应用程序原
型检查数据库。换句话说,针对各个一样种植最终表达数据的原型应用
,保证你检查了数据模型并且查看如何取出数据。

Microsoft Visual FoxPro 设计技术

对复杂的 Microsoft Visual
FoxPro数据库应用程序而言,可以管所有的主表放在一个数据库容器文件里
,然后搭其它数据库表文件和装同旧数据库有关的例外文件
。根据需要用这些文件连续到主文件中之主表。比如数据输入
、数据索引、统计分析、向管理层要政府部门提供报表与各类只
读查询等。这同一主意简化了用户和组权限的分配,而且便于使程
序函数(存储过程)的分组和剪切,从而以先后要修改的当儿容易 管理。

发表评论

电子邮件地址不会被公开。 必填项已用*标注