数据库开发设计规范_第1页
数据库开发设计规范_第2页
数据库开发设计规范_第3页
数据库开发设计规范_第4页
数据库开发设计规范_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据库开发设计规范文件版本: V1.1文件编号: 编 写: 安金锁审 核: 审 批: 发布时间 生效时间版本记录版本号作者修订日期说明审核人审批人1.0李湘军2010-08-09初创文档目录1.目的52.符号说明53.命名规则53.1变量命名规则53.2数据库对象命名规则53.3数据库对象所有者53.4缩进策略54.数据库对象引用规则54.1相同数据库54.2不同数据库64.3链接服务器65.实体关系图集65.1表65.2键75.3视图85.4索引95.5参照105.6Default115.7触发器115.8存储过程135.9用户定义函数145.10游标165.11T-SQL165.12CLR

2、166.数据字典(RTF或HTM文档)166.1数据表166.2视图166.3存储过程列表176.4触发器列表176.5用户定义函数列表177.物理设计(Word文档)177.1数据库物理参数177.2创建用户SQL187.3数据库备份与恢复方案181. 目的该文档详细描述了在数据库设计、开发过程中所应该遵守的规则、提交的文档及文档的编写规则,是我们进行数据库设计、开发的规范。2. 符号说明斜体:需要替换的内容 :其中的内容可以省略 :其中的内容必须包括|:其两边的内容必选其一_:连接符,不可省略:连接符正常体:不可改变的内容红色字体:必须遵守的内容3. 命名规则3.1 变量命名规则v变量类型

3、缩写具有实际含义的英文名称缩写(首字母大写,如果由多个英文单词组成,那么,每个英文单词的首字母都要大写)。3.2 数据库对象命名规则数据库名称、表名称、列名称、视图名称、存储过程名称、用户定义函数名称等用户定义对象严格禁止使用SQL关键字命名。3.3 数据库对象所有者任何数据库的所有者都是 dbo,禁止创建非 dbo 的数据库对象。3.4 缩进策略缩进单位为固定宽度;4. 数据库对象引用规则4.1 相同数据库l 列: 表名 | 别名 | 视图名 . 列名 l 存储过程: 存储过程名称 参数列表 l 用户定义函数: 用户定义函数名称 参数列表 4.2 不同数据库l 列: 数据库名 . 表名 |

4、别名 |视图名 . 列名 l 存储过程: 数据库名 . 存储过程名称 参数列表 l 用户定义函数: 数据库名 . 用户定义函数名称 参数列表 4.3 链接服务器l 列:链接服务器名称. 数据库名 .dbo. 表名 | 别名 |视图名 . 列名 l 存储过程:链接服务器名称. 数据库名 .dbo. 存储过程名称 参数列表 l 用户定义函数:链接服务器名称. 数据库名 .dbo. 用户定义函数名称 参数列表 5. 实体关系图集描述实体关系的图表。5.1 表5.1.1 表命名规则中文名称:表的描述(应能够说明表的用途)英文名称:对应中文名称的英文单词缩写(每个单词的首字母大写)5.1.2 表注释用中

5、文说明该表的用途,并尽量提供以月为单位该表数据量的大约变化量。5.1.3 表设计规则表设计应符合第三范式的规则,但如果过分追求第三范式,会造成过度规范化,造成使用大量的、小的、相互关联的表来定义数据库,在数据库对这些表中的数据进行处理时,必须执行大量的额外工作以组合相关的数据,这种额外处理可能降低数据库的性能,在这种情况下,适当降低数据库规范化程度以简化复杂处理,可以提高性能。同时,还应该考虑历史数据的保留问题,即历史数据是不能改变的,但历史数据产生时的环境可能与现在不同。行的所有列(lob 类型除外)的长度和不能超过 8060 字节。5.1.4 列命名规则中文名称:列描述英文名称:对应中文名

6、称的英文单词缩写(每个单词的首字母大写)5.1.5 列属性说明l 数值型的列都要有default,因为数值列可能会参加运算的。l 存储中文的列一律使用nvarchar类型。l 具有序号含义的列尽量采用SQL Server提供的Identity列,可以有效避免重号及跳号。l 明显不能为空的列,必须禁止为空,比如年龄。l 可以为空的列,应根据实际情况,给予适当默认值。l 如果某列的值是通过数学运算从本行中其他列得到,可以采用计算列功能实现,以减少前端代码编写工作量,但计算逻辑不应过于复杂。5.2 键5.2.1 主键索引命名规则英文名称:PK_表英文名称5.2.2 主键设计规则不要以变化趋势不规则的

7、列作为主键,比如性别。5.2.3 聚集索引聚集索引不一定是主键,尤其不能建立在无意义的自增列上。由于每个表只能建立一个聚集索引,请慎重使用。5.2.4 外键索引命名规则英文名称:FK_外部键列英文名称5.3 视图5.3.1 命名规则中文名称:v_视图描述英文名称:v_对应中文名称的英文单词缩写(每个单词的首字母大写)5.3.2 注释用中文说明该视图的用途、该视图的基表以及是否可以通过该视图修改其基表。5.3.3 列命名规则中文名称:基表的中文列名称英文名称:直接引用基表的列名称5.3.4 设计规则l 不要使用SELECT * 语法建立视图,以避免基表结构发生变化时,使用该视图不能得到期望的数据

8、。生成视图的SQL Query必须要有WHERE子句,以限制视图中的数据量。l 只能在当前数据库中创建视图。l 强烈不推荐在视图之上再建立视图。l 定义视图的查询不可以包含ORDER BY、COMPUTE或 COMPUTE BY子句或INTO关键字。l 不能创建临时视图,也不能在临时表上创建视图。l 可以考虑利用视图索引提高性能。5.4 索引5.4.1 非键索引命名规则英文名称: IX | UIX_列英文名称 或 IX | UIX_MultiColumn序号IX:索引列不是键,或者是复合索引。UIX:唯一索引。5.4.2 索引设计原则l 在考虑是否为一个列创建索引时,应考虑被索引的列是否以及如

9、何用于查询中。l 返回大结果集(与源表数据相比)的查询不会使用非聚簇索引。l 一个表如果建有大量索引会影响 INSERT、UPDATE 和 DELETE 语句的性能,因为在表中的数据更改时,所有索引都须进行适当的调整。另一方面,对于不需要修改数据的查询(SELECT 语句),大量索引有助于提高性能,因为 SQL Server 有更多的索引可供选择,以便确定以最快速度访问数据的最佳方法。l 在查询经常用到的所有列上创建非聚集索引。比如:n 日期列。n 在FOREIGN KEY列上建立索引。n 在Order By的列上建立索引。n 在范围查询的列上建立索引。n 在精确匹配查询的列上建立索引。l 覆

10、盖查询可以提高性能。覆盖查询是指查询中所有指定的列都包含在同一个索引中。创建覆盖一个查询的索引可以提高性能,因为该查询的所有数据都包含在索引自身当中;检索数据时只需引用表的索引页,不必引用数据页,因而减少了 I/O 总量。尽管给索引添加列以覆盖查询可以提高性能,但在索引中额外维护更多的列会增加更新和存储成本。l 对聚集索引使用整型键。另外,在唯一列、非空列创建聚集索引可以获得性能收益。l 对小型表进行索引可能不会产生优化效果,因为SQL Server在遍历索引以搜索数据时,花费的时间可能会比简单的表扫描还长。l 在基数集很小的列上一般不创建索引,比如性别。l 填充因子会影响数据表的更新性能,因

11、此对于更新频繁的数据表请选择一个恰当的填充因子大小,一般情况下选择 80 即可满足大多数需求。5.5 参照5.5.1 参照命名规则英文名称:FK_外键表英文名称_ref_主键表英文名称5.5.2 参照的使用限制只建立必须的参照,因为过多的参照会增加数据维护的复杂性、使数据更新的时间更长。5.6 Default5.6.1 命名规则英文名称:default_default的值5.7 触发器5.7.1 触发器命名规则英文名称:TR B | A I | U | D _表英文名称B:Instead Of触发器A:After触发器I:Insert触发器U:Update触发器D:Delete触发器5.7.2

12、 注释规则在触发器create语句之后、第一行可执行语句之前,必须要有该触发器的功能说明,包括如下内容:/*/*中文名称:*/*功能描述:*/*编写人:编写时间:*/*修改人:修改时间:*/*/*/其中,修改人、修改时间是追加填写的,每次修改时,不允许删除或修改原来的代码,只能将原来的代码注释掉,在下面添加修改后的代码,格式如下:/*修改开始*/*修改人:修改时间:*/-原代码你的代码/*修改结束*/5.7.3 编码规则l 因触发器对性能影响非常明显,触发器的建立必须经过项目经理、架构、DBA共同讨论通过,确认可以使用。l 全部触发器的编码由一对BEGIN。END括起来。l 代码行的长度不得超

13、过一屏。续行以SQL关键字或运算符号打头。l 每个结构化语句块都应该有注释。如果是循环结构,必须有可到达的结束条件。l 续行、结构化语句应比其上一级语句缩进编写。l 应按照相同的顺序访问多个表或视图,以减少资源的竞争,避免阻塞或死锁。l 由于存在对性能的潜在负面影响,禁止在触发器中使用游标,并尽可能的简化触发器的处理逻辑。使用基于行集的逻辑而非游标来设计影响多行的触发器。l 不推荐使用递归触发器。5.7.4 异常处理l 使用TRYCATCH捕获错误,进行处理。5.8 存储过程5.8.1 存储过程命名规则中文名称:p_存储过程描述英文名称:p_存储过程名称英文单词的缩写(首字母大写,如果是多个单

14、词组成,每个单词的首字母都要大写)禁止创建以sp_为前缀的存储过程。5.8.2 注释规则在存储过程create语句之后、第一行可执行语句之前,必须要有该存储过程的功能说明,包括如下内容:/*/*中文名称:*/*功能描述:*/*输入参数名称含义类型默认值*/*/*返回值含义*/*编写人:编写时间:*/*修改人:修改时间:*/*/*/其中,修改人、修改时间是追加填写的,每次修改时,不允许删除或修改原来的代码,只能将原来的代码注释掉,在下面添加修改后的代码,格式如下:/*修改开始*/*修改人:修改时间:*/-原代码你的代码/*修改结束*/5.8.3 编码规则l 全部存储过程的编码由一对BEGIN。E

15、ND括起来。l 代码行的长度不得超过一屏。续行以SQL关键字或运算符号打头。l 每个结构化语句块都应该有注释。如果是循环结构,必须有可到达的结束条件。l 续行、结构化语句应比其上一级语句缩进编写。l 应按照相同的顺序访问多个表或视图,以减少资源的竞争,避免阻塞或死锁。l 如果存储过程的作用是提供检索结果,那么不要使用SELECT * 的形式提供,应明确写出相关的列名。5.8.4 异常处理l 使用TRYCATCH捕获错误,进行处理。5.9 用户定义函数5.9.1 命名规则中文名称:udf_用户定义函数描述英文名称:udf_用户定义函数名称英文单词的缩写(首字母大写,如果是多个单词组成,每个单词的

16、首字母都要大写)5.9.2 注释规则在用户定义函数create语句之后、第一行可执行语句之前,必须要有该用户定义函数的功能说明,包括如下内容:/*/*中文名称:*/*功能描述:*/*输入参数名称含义类型默认值*/*/*返回值含义*/*编写人:编写时间:*/*修改人:修改时间:*/*/*/其中,修改人、修改时间是追加填写的,每次修改时,不允许删除或修改原来的代码,只能将原来的代码注释掉,在下面添加修改后的代码,格式如下:/*修改开始*/*修改人:修改时间:*/-原代码你的代码/*修改结束*/5.9.3 编码规则l 全部用户定义函数的编码由一对BEGIN。END括起来。l 代码行的长度不得超过一屏

17、。续行以SQL关键字或运算符号打头。l 每个结构化语句块都应该有注释。如果是循环结构,必须有可到达的结束条件。l 续行、结构化语句应比其上一级语句缩进编写。l 应按照相同的顺序访问多个表或视图,以减少资源的竞争,避免死锁。l 如果用户定义函数作用是提供检索结果,那么不要使用SELECT * 的形式提供,应明确写出相关的列名。5.9.4 异常处理l 在SQL2005中使用TRYCATCH捕获错误,进行处理。5.10 游标由于游标的效率较差,不推荐使用游标,任何一个游标,原则上都可以使用 while 循环代替。5.11 T-SQL复杂的多表(两个以上) JOIN 查询语句,为阅读方便,对表使用别名

18、。代码行的长度不得超过一屏。续行以SQL关键字或运算符号打头。5.12 CLR不推荐使用。如果必须使用,需项目经理、架构、DBA共同讨论,确认该CLR代码的必要性。6. 数据字典(RTF或HTM文档)数据字典由实体关系图,通过工具自动生成,包括:表、视图、存储过程、触发器、用户定义函数。该文档应在项目预上线前完成。6.1 数据表6.1.1 中文表名(英文表名)中文列名英文列名类型长度是否主键外键NULLDefaultT_索引文件名称:索引列:6.2 视图6.2.1 中文视图名(英文视图名)中文列名英文列名类型长度V_基表名称:6.3 存储过程列表中文名称英文名称功能说明P_6.4 触发器列表中文名称英文名称基表类型Tr_6.5 用户定义函数列表中文名称英文名称功能说明Udf_7. 物理设计(Word文档)7.1 数据库物理参数包括数据库名称、存储的物理位置、初始大小、是否允许自动增长、增

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论