1. 目的
本文档旨在为数据库设计提供一种公共标准,基于这种标准的数据库设计,能够在保证性能的基础上,兼顾管理与维护的成本,同时,标准化的设计也有益于代码交流,降低因为不同人员的设计网络导致的的代码兼容风险。
2. 范围
本规范适用于所有与数据库交互的开发人员。
3. 命名
3.1. 命名规则
所有对象遵循“长名”(除非常通用的简写外,尽量避免使用简写)和“表意”(通过名称大致知道该对象所表达的内容)两个原则,命名中的多个单词通过大小写或者下划线(_)区隔。常用对象的命名说明如下
3.1.1. 表命名
遵循通用原则,使用小写字符,能够清楚表明表中数据内容,使用表明表中数据内容的名词短语。建议格式:[模块名_]+主体,如:user_profile,employee
3.1.2. 字段命名
使用小写字符,表明栏位内容,使用表明栏位内容的名词短语,可在适当时使用下划线。建议格式:[模块名_]+主体,如id,customer_name
3.1.3. 视图命名
参考表命名方式,一般以前缀v_以示区隔。建议格式:v_[模块名_]+主体,如v_author
3.1.4. 存储过程命名
使用小写字符,命名要表明存储过程的功能,可以使用下划线区隔单词,存储过程不得以sp_开头。建议格式:usp_[模块名_]+主体,如usp_purge_history_data
3.1.5. 函数命名
使用小写字符,命名要表明函数的功能,可以使用下划线区隔单词。函数不得以fn_开头。建议格式:udf_[模块名_]+主体,如udf_get_user_name
3.1.6. 触发器命名
使用小写字符,使用trg_%table_name%_%action_type%_%function_name%的形式,i/u/d分别表示insert,update,delete动作。建议格式:trg_<table_name>+<i/u/d>+[_主体],如:trg_user_profile_i,trg_user_profile_iud
3.1.7. 主键命名
使用小写字符,使用pk_%table_name%的形式,其中%table_name%表示表名,建议格式:pk_<table_name>,如pk_author
3.1.8. 唯一键命名
使用小写字符,使用uq_%table_name%的形式,其中%table_name%表示表名,建议格式:uq_<table_name>,如uq_author
3.1.9. 外键命名
使用小写字符,使用fk_%foreign_key_table_name%_%foreign_key_column_name%
的形式,%foreign_key_table_name%表示约束该键的表名,%foreign_key_column_name%表示约束该键的栏位名,当约束的栏位有多个时,按次序依次呈现。建议格式:
fk_<foreign_key_table_name>_<foreign_key_column_name>,如fk_employee_id
3.1.10. 非聚集索引命名
使用小写字符,使用idx_%table_name%_%column_name%的形式,%table_name%表示非聚集索引的表名,%column_name%表示非聚集索引的栏位名。建议格式:
Idx_< table_name >_< column_name> ,如:idx_author_date
3.1.11. 聚集索引命名
使用小写字符,使用cidx_%table_name%_%column_name%的形式,%table_name%表示非聚集索引的表名,%column_name%表示非聚集索引的栏位名。建议格式:
cIdx_< table_name >_< column_name> ,如:cidx_author_id
3.1.12. 缺省值命名
使用小写字符,使用df_%table_name%_%column_name%形式,%table_name%表示缺省值作用的表名,%column_name%表示缺省值的栏位名。建议格式:
df_< table_name >_< column_name >,如:df_author_id
3.1.13. 约束命名
使用小写字符,使用ck_%table_name%_%column_name%形式,%table_name%表示约束作用的表名,%column_name%表示约束的栏位名。建议格式:
ck_< table_name >_< column_name >,如:ck_author_id
3.2. 缩写规则
为了避免混淆和保证跨语言交互操作,建议遵循下面有关缩写的规则
3.2.1. 词典中出现的缩写,如:UI(User Interface) ,ID(identification,identity)
3.2.2. 项目名称缩写及项目开始时候约定的缩写,如:PMS(Project Mangement System)
3.2.3. 计算机领域普遍认可的缩写,如:HTML,ADO,MSN,QQ,VBA
4. 代码书写格式
4.1. 书写规则
4.1.1. 大写或者小写所有T-SQL关键字,包括系统函数。
4.1.2. 数据库对象保持与定义时一致
书写代码时,数据库对象(如:表名,字段名等)保持与定义时候一致。
4.1.3. 不要在代码里书写select * 而应该采用select column1形式,其中以下情况不受约束
4.1.3.1. 聚合
select |
4.1.3.2. 子查询
select |
4.1.4. insert语句中需要指定字段名。
以下格式供参考:
insert into |
4.1.5. 当一个SQL中涉及多个表时,始终使用表名或者表的别名来限定字段名,以免不同表之间存在相同的字段名的冲突,使阅读更加清晰。
select |
4.2. 排版规则
4.2.1. 缩进
4.2.1.1. 代码块内部的代码相对于begin ……end关键字要缩进。
以下格式供参考:
begin |
4.2.1.2. 函数和存储过程参数列表要采用缩进风格,且每个参数独占一行。
以下格式供参考:
create procedure dbo.usp_procedure_name |
4.2.2. 断行
4.2.2.1. 每条语句建议至少独占一行。
以下格式供参考
declare @param1 int |
4.2.2.2. 当一条SQL语句超过约120个字符(1028*768),建议换行,建议参考以下原则
T-SQL语句 |
同一行互斥的SQL关键字列表 |
所有的DML语句并列的where条件 |
where、and、or (column between value1 and value2中的and不受此条约束) |
insert 语句 |
insert、values、select |
select语句 |
select、into、from、where、group by、having、 order by、union、join |
update语句 |
update、set、where、from |
delete语句 |
delete、where |
子查询 |
子查询内部的SQL需要遵守上述规定 |
4.2.2.3. 用空行分割代码逻辑块
以下格式供参考
Begin |
5. 注释规则
5.1. 头注释
代码文件头部要进行注释。所有函数,过程,触发器,都必须要有注释。
注释位置:文件的顶部
注释内容:版权说明,作者,生成日期,功能描述,修改日志等等
以下格式供参考
/* =================================================================== */ |
5.2. 注释规则
5.2.1. 注释内容放在被注释代码的上方或者右方
以下格式供参考
--get total record count |
5.2.2. 注释必须能明确表达被注释代码的功能,内容等,不能简单的复制代码片段。
以下格式供参考:
alter procedure [sys].[sp_defaultdb] |