软件设计方案(数据库设计原则)

数据库技术是信息资源管理最有效的手段。数据库设计是建立数据库及其应用系统的核心和基础,它要求对于指定的应用环境,构造出较优的数据库模式,建立起数据库应用系统,并使系统能有效地存储数据,满足用户的各种应用需求。

1、设计数据库之前

1)理解客户需求,询问用户如何看待未来需求变化。让客户解释其需求,而且随着开发的继续,还要经常询问客户以保证其需求仍然在开发的目的之中;

2)了解企业业务,在以后的开发阶段节约大量时间;

3)重视输入输出。在定义数据库表和字段需求(输入)时,首先应检查现有的或者已经设计出的报表、查询和视图(输出),以决定为了支持这些输出哪些是必要的表和字段;

4)创建数据字典和E-R 图,对SQL 表达式的文档化来说这是完全必要的;

5)定义标准的对象命名规范。

2、表与字段的设计  

1)表设计原则

1)标准化和规范化;

数据的标准化有助于消除数据库中的数据冗余。标准化有好几种形式,但Third Normal Form3NF)通常被认为在性能、扩展性和数据完整性方面达到了最好平衡。事实上,为了效率的缘故,对表不进行标准化有时也是必要的。

2)采用数据驱动,增强系统的灵活性与扩展性;

3)在设计数据库的时候考虑到哪些数据字段将来可能会发生变更。

2)字段设计原则

1)每个表中都应该添加的3 个有用的字段;

dRecordCreationDate,在SQL Server 下默认为GETDATE()

sRecordCreator,在SQL Server 下默认为NOT NULL DEFAULT USER

nRecordVersion,记录的版本标记,有助于准确说明记录中出现null 数据或者丢失数据的原因。

2)对地址和电话采用多个字段,电话号码和邮件地址最好拥有自己的数据表,其间具有自身的类型和标记类别;

3)使用角色实体定义属于某类别的列,创建特定的时间关联关系,从而可以实现自我文档化;

4)选择数字类型和文本类型要尽量充足,否则无法进行计算操作;

5)增加删除标记字段。在关系数据库里不要单独删除某一行,而在表中包含一个“删除标记”字段,这样就可以把行标记为删除。

3、键和索引

1)键选择原则

1)键设计4 原则

①所有的键都必须唯一;

②为关联字段创建外键;

③避免使用复合键;

④外键总是关联唯一的键字段。

2)使用系统生成的主键,控制数据库的索引完整性,并且当拥有一致的键结构时,找到逻辑缺陷很容易;

3)不要用用户的键,通常情况下不要选择用户可编辑的字段作为键;

4)可选键有时可作主键,能拥有建立强大索引的能力。

2)索引使用原则

索引是从数据库中获取数据的最高效方式之一,绝大多数的数据库性能问题都可以采用索引技术得到解决。

1)逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对任何外键列采用非成组索引。考虑数据库的空间有多大,表如何进行访问,还有这些访问是否主要用于读写;

2)大多数数据库都索引自动创建的主键字段,但是不能忘了索引外键,它们也是经常使用的键;

3)不要索引memo/note 字段,不要索引大型字段,这样会让索引占用太多的存储空间;

4)不要索引常用的小型表,不要为小型数据表设置任何键,尤其当它们经常有插入和删除操作时。

4、数据完整性设计  

1)完整性实现机制

1)实体完整性:主键

2)参照完整性

①父表中删除数据:级联删除,受限删除,置空值;

②父表中插入数据:受限插入,递归插入;

③父表中更新数据:级联更新,受限更新,置空值。

DBMS 对参照完整性可以有两种方法实现:外键实现机制(约束规则)和触发器实现机制。

3)用户定义完整性:NOT NULLCHECK,触发器。

2)用约束而非商务规则强制数据完整性;

3)强制指示完整性。在有害数据进入数据库之前将其剔除,激活数据库系统的指示完整性特性;  

4)使用查找控制数据完整性,控制数据完整性的最佳方式就是限制用户的选择;  

5)采用视图。可以为应用程序建立专门的视图而不必非要应用程序直接访问数据表,这样做还等于在处理数据库变更时给你提供了更多的自由。

5、其他设计

1)避免使用触发器确实需要的话最好集中对它文档化;

2)使用常用英语(或者其他任何语言)而不要使用编码,确实需要的话可以在编码旁附上用户知道的英语;

3)保存常用信息。让一个表专门存放一般数据库信息,可以实现一种简单机制跟踪数据库,这样做对非客户机/服务器环境特别有用;

4)包含版本机制,在修改数据库结构时更为方便;  

5)编制文档,对所有的快捷方式、命名规范、限制和函数都要编制文档;

6)反复测试,保证选择的数据类型满足商业要求;  

7)检查设计,在开发期间检查数据库设计的常用技术是通过其所支持的应用程序原型检查数据库。

6、数据库命名规范

1)实体(表)的命名

1)表以名词或名词短语命名,给表的别名定义简单规则;  

2)如果表或者是字段的名称仅有一个单词,那么建议不使用缩写,而是用完整的单词;

3)所有的存储值列表的表前面加上前缀Z,目的是将这些值列表类排序在数据库最后;

4)所有的冗余类的命名(主要是累计表)前面加上前缀X。冗余类是为了提高数据库效率,非规范化数据库的时候加入的字段或者表;

5)关联类通过用下划线连接两个基本类之后,再加前缀R的方式命名,后面按照字母顺序罗列两个表名或者表名的缩写。关联表用于保存多对多关系。

2)属性(列)的命名

1)采用有意义的列名,表内的列要针对键采用一整套设计规则;

每一个表都将有一个自动ID作为主健,逻辑上的主健作为第一组候选主健来定义。如果是自定义的逻辑上的编码则用缩写加“ID”的方法命名。如果键是数字类型,你可以用_NO 作为后缀。如果是字符类型则可以采用_CODE 后缀。对列名应该采用标准的前缀和后缀。

2)所有的属性加上有关类型的后缀,如果还需要其它的后缀,都放在类型后缀之前。数据类型是文本的字段,类型后缀TX可以不写,有些类型比较明显的字段也可以不写类型后缀;

3)采用前缀命名。给每个表的列名都采用统一的前缀,那么在编写SQL表达式的时候会得到大大的简化,但这样做也有缺点,比如会破坏自动表连接工具的作用。

3)视图的命名

1)视图以V作为前缀,其他命名规则和表的命名类似;

2)命名应尽量体现各视图的功能。

4)触发器的命名

触发器以TR作为前缀,触发器名为相应的表名加上后缀,Insert触发器加 _IDelete触发器加 _D Update触发器加 _U 。如:TR_User_ITR_User_DTR_User_U

5)存储过程名

存储过程应以 UP_ 开头,和系统的存储过程区分,后续部分主要以动宾形式构成,并用下划线分割各个组成部分。  

6)变量名

变量名采用小写,若属于词组形式,用下划线分隔每个单词。

7)命名中其他注意事项

1)以上命名都不得超过30个字符的系统限制,变量名的长度限制为29(不包括标识字符@);

2)数据对象、变量的命名都采用英文字符,禁止使用中文命名,绝对不要在对象名的字符之间留空格;

3)小心保留词,要保证你的字段名没有和保留词、数据库系统或者常用访问方法冲突;

4)保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。

你可能感兴趣的:(数据库设计)