数据库设计和编码规范
Version 1.0
1    简介    4
1.1    读者对象    4
1.2    目的    4
2    数据库命名规范    4
2.1    规范总体要求    4
2.2    数据库对象命名规范    5
2.3    变量命名规范    6
3    数据库设计规范    6
3.1    选择有效的设计工具    7
3.2    表的设计    7
3.2.1    遵守范式要求    7
3.2.2    字段设计    8
3.2.3    适当的合理的冗余    9
3.2.4    注意大类型的字段设计    10
3.3    表关系和约束设计    10
3.3.1    主键设计    11
3.3.2 外键设计    12
3.3.3 检查约束    12
3.4    索引的设计    13
3.4.1    聚集索引和非聚集索引    13
3.4.2    索引的初始创建原则    15
3.4.3    索引的注意事项    15
3.4.4    索引的后期维护工作    16
3.5    物理存储设计    17
3.5.1    日志文件另外存放    17
3.5.2    存储空间的设计    17
4    T-SQL编码规范    18
4.1    书写基本规范    19
4.2    使用可搜索参数(where使用原则)    20
4.3    少用触发器和禁用游标    21
4.4    联合查询尽可能使用UNION ALL    22
4.5    尽可能避免的地方    22
4.6    避免返回和使用多余的数据    22
4.7    操作符优化    23
4.8    数据库事务处理原则    24
4.9    最少次数的访问表    25
4.10    避免隐含的数据类型转换    25
4.11    表变量、临时表和公用表达式的用法    27
4.12    正确地判断记录是否存在    29
4.13    注意自定义标量函数的影响    29
4.14    避免编写复杂的TSQL语句    30
4.15    应用程序层防止执行大块的TSQL语句    30
4.16    对数据库大表的处理方案    31
4.17    sp_executesql代替EXEC    32
4.18    存储过程的一些建议    33
5    如何进行质量控制    33
5.1    规范的制定、认可和实施    33
5.2    讨论和检查工作    33
5.3    对制定的规范不断完善    34
5.4    讨论和制定公共模板    34
5.4.1    SELECT语句    35
5.4.2    JOIN语句    35
5.4.3    子查询    36
5.4.4    INSERT语句    36
5.4.5    UPDATE语句    36
5.4.6    DELETE语句    36
5.4.7    CASE语句    37
5.4.8    IF语句    37
5.4.9    WHILE语句    37
    EXISTS语句    37
    变量声明    38
    变量赋值    38
    创建表及约束索引    38
    存储过程    39
    带输出参数的存储过程    40
    视图    41
    物化视图    41
    自定义标量函数    42
    自定义表值函数(多语句)    42
    自定义表值函数(内联)    43
    索引整理    44
    数据库事务格式    44
1
简介
1.1读者对象
此文档说明书供开部全体成员阅读。
1.2目的
个合理的数据库结构设计是保证系统性能的基础。一好的规范让新手容易进入状态且少犯错,保持团队支持顺畅,系统长久使用后不至于紊乱,让管理者易于在众多对象中,获取所需或理清问题。
同时,定义标准程序也需要团队合作,讨论出大家愿意遵循的规范。随着时间演进,还需要逐步校订与修改规范,让团队运行更为顺畅。
2数据库命名规范
团队开发与管理信息系统讲究默契,而制定服务、数据对象、变量等命名规则是建立默契的基本。
命名规则是让所有的数据库用户,如数据库管理员、程序设计人员和程序开发人员,可以直观地辨识对象用途。而命名规则大都约定俗成,可以依照公司文化、团队习惯修改并落实。
2.1规范总体要求
1.避免使用系统产品本身的惯例,让用户混淆自定义对象和系统对象或关键词。例如,存储过程不要以sp_或xp_开头,因为SQL SERVER的系统存储过程以sp_开头,扩展存储过程以xp_开头。
2.不要使用空白符号、运算符号、中文字、关键词来命名对象。
3.名称不宜过于简略,要让对象的用途直观易懂,但也不宜过长,造成使用不方便。
4.不用为数据表内字段名称加上数据类型的缩写。
5.名称中最好不要包括中划线。
6.禁止使用[拼音]+[英语]的方式来命名数据对象或变量。
2.2数据库对象命名规范
我们约定,数据库对象包括表、视图(查询)、存储过程(参数查询)、函数、约束。对
象名字由前缀和实际名字组成,长度不超过30。避免中文和保留关键字,做简洁又有意义。前缀就是要求每种对象有固定的开头字符串,而开头字符串宜短且字数统一。可以讨论一下对各种对象的命名规范,通过后严格按照要求实施。例如
对象
名规范
数据
数据库名:[项目英文名称]+DB
数据文件:[数据库名称]+_Data.mdf
日志文件:[数据库名称]+_Log.ldf
前缀T+[表名];单词首写字母为大写,其余全部小写。
示范:TCustomer
表字
不需要前缀,直接用英文单词或缩写,单词首字母为大写,其余为小写。例如:UserName,如果是两个单词的首写字母缩写,统一用大写,比如:UserID
键所在字段
不要用ID。一律用表名+ID (如果表名太长的话,采用缩写用各单词的首写字母组合)
存储过程
用P_前缀+[功能描述] (首单词大写,其余下写)
例如:P_GetAllCorps
视图
用前缀V_+[视图名称]
例如:V_Account
自定义标量函数
前缀F_+[功能描述] (首单词大写,其余下写)
例如:F_GetEWSourceName
自定义表值函数
前缀TF_+[功能描述] (首单词大写,其余下写)
PK_[表名]
例如:PK_TExAccount
用 FK_[主表] _段表  表示(考虑到名字会比较长,突出主表)
例如:FK_TOrder_OrderID
默认值约束
用 DF_[表名]_[字段名] 表示
例如:DF_TOrder_Type
检查约束
用 CK_[表名]_[字段名] 表示
例如:CK_TCustomer_Mail
唯一性约束
用 UQ_[表名]_[字段名] 表示
例如:UQ_TCustomer_Code
聚集索引
用 DX_[表名]_[字段名] 表示
例如:DX_TCachet_ID
其它索引
用 IX_[表名]_[字段名] 表示(段名较多时,取前面两个即可)
例如:IX_TCachet_CName_CorpID
2.3变量命名规范
1.数据列参数
命名格式为@+[列名称]。
示例:@EmployeeID  @employee_id
2.非数据列参数
在参数无法跟列名称进行关联时,使用能够反映该参数功能的英文单词或单词组合,采用Pascal样式命名。
示例:@WorkType  @work_type
3数据库设计规范
好的数据库架构设计对系统运行的性能起着很大的作用,所以要在开始时就要引起重视。decimal是整数数据类型了保证数据库设计的高效必须安排时间设计结果进行评审,这一环节必不可少。
3.1选择有效的设计工具
数据库设计工具:Power Designer、ER Studio、Rose、Microsoft Visio。
项目开始前要确定使用哪种设计工具。(另有开发插件: RedGate系列(SQL Prompt))
选择的工具要便于讨论便入生成脚本导入数据库。
设计通过后要形成文档,并且个结构设计文档要存档,签入VSS基线库中。
在进行数据库设计时,应随时进行数据字典的维护。(字段要求写说明)
3.2表的设计
表设计在数据库设计中占据有十分重要的地位。表是实际存储数据的对象。除了要注重表结构设计,字段的设计之外还要注意表之间关系的设计。
3.2.1遵守范式要求
通常,合理的规范化会最小化数据异常和减少数据的冗余。为了更新数据的正确与快速,
设计的初始阶段多采用三范式设计数据库表。
第一范式强调的是列的原子性,即列不能够再分成其他几列。
第二范式包含两层意思,一是表必须有一个主键;二是非主键列必须完全依赖于主键,且不能只依赖于主键的一部分。(尽量少使用复合主键)
第三范式需要确保数据表中的所有非主键列直接与主键列相关,而不能直接依赖于非主键列。
3.2.2字段设计
1.尽量避免可的列
虽然在个别情况下,允许空值可能是有用的,但是应尽量少用。这是因为需要对它们进行特殊处理,从而会增加数据操作的复杂性和增加CPU额外的逻辑判断。很多情况下可以考虑用默认0或空字符串('')来代替NULL值所以字段应该有NOT NULL的限制。
2.Unicode的选择
nvarchar和nchar相比 varchar和char要占用更多的存储空间。设计的原则是:如果确保存储的内容只是纯英文和数字,用char/varchar如果含有中文字符或其它语言,用nchar/nvarchar。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。