1. 基本命名规则
表 1. 基本数据库对象命名
数据库对象 |
前缀 |
表 (Table) 字段(Column) 视图 (View) 存储过程 (Stored procedure) 触发器(Trigger) 索引(Index) 主键(Primary key) 外键(Foreign key) Check 约束(Check Constraint) Default 约束(Default Constraint) 用户定义数据类型 (User-defined data type) 用户定义函数 (User-defined function) |
tbl_ 无 viw_ prd_ trg_ idx_ pk_ fk_ ck_ df_ udt_ fun_ |
2. 关于命名的约定
变量 (T-SQL 编程中声明的变量 ) 、过程 ( 存储过程或触发器等 ) 、实体 ( 表、字段 ) 应该根据他们所代表的实体意义和进程作用来命名:
表 2. 好的命名 和 不好的命名 范例
好的命名 |
不好的命名 |
@CurrentDate @ActivityCount @EquipmentType prCalculateTotalPrice |
@D @ActNum @ET @prRunCalc |
a. 动宾形式:动词放前面,名词放后面。eg:prd_GetProductById
b. 不要使用计算机术语,尽量使用面向公司业务的术。
c. 采用缩写
如果完全根据上一条的要求,那么根据业务描述的过程名可能会变得很冗长,比如下面:
prCountTotalAmountOfMonthlyPayments ( 计算每月付费的总金额)
prGetParentOrganizationalUnitName ( 获取上级单位名称)
Ø 如果可以在字典里找到一个词的缩写,就用这个做为缩写,比如:Mon(Monday)、Dec(December)
Ø 可以删除单词元音(词首字母除外)和每个单词的重复字母来缩写一个单词。比如:Current = Crnt、Address = Adr、Error = Err、Average = Avg
Ø 不要使用有歧异的缩写(一般是语音上的歧义)。比如b4(before)、xqt(execute),4tran(Fortran)
3. 数据库命名
根据项目的实际意义来命名
4. 表命名
“tbl_”+ 名称(名称尽量使用英文单词,每个单词的首字母大写)
5. 字段命名
表名(去掉前缀)缩写 + ”_”+ 属性名称(每个单词的首字母大写)
缩写:五笔拆字法取字母
一个单词:取前四个字母
二个单词:取每个单词的前两个字母
三个单词:取前两个单词的首字母和第三个单词的前两个字母。
四或四个以上:取前三个单词的首字母和最后一个单词的首字母。
6. 主键命名
主键是针对一个表的, 而不是针对一个字段,因为主键是唯一的,一个表只能有一个主键。
a. 一般主键命名: 主键的命名为 pk_TableName。
b. 复合主键: ” pk_ ” + “ 字段名 ”
e.g.: Constraint pk_StudentCourse Primary key(Stud_Id, Cour_Id)
主键pk_StudentCourse,包含了两个字段 Stud_Id 和 Cour_Id
7. 外键命名
外键的命名为 fk_外键所在的表名_外键引用的表名 。因为外键所在的表为从表,所以上式可以写为 fk_ 从表名_主表名 。
8.Check 约束命名
“ ck_ ” + “ 表名 ” “ _ ” + “ 字段名 ”
e.g.: ck_tbl_Company_Comp_Zip
9.Default 约束命名
“ df_ ” + “ 表名 ” “ _ ” + “ 字段名 ”
e.g.: df_tbl_News_News_Hit
10. 触发器命名
“ trg_ ” + “ 表名 ” + “ 后缀 ”
a. 前缀- “ trg_ ” , 描述了数据库对象的类型。
b. 基本部分,描述触发器所加的表。
c. 后缀(_I、_U、_D),显示了修改语句(Insert, Update及Delete)
11. 存储过程命名
命名的规则:见名知意.
“ prd_ ” + “ 说明 ”
说明:动宾结构(动词+名词)
e.g.:prd_GetProductById
12. 存储过程中参数的命名
与其对应的字段名相同,第一个单词小写.
以微软 3.0文档为主
1. 项目名称
“公司名称 ” + “项目实际意义名称 ”
e.g.:qikingYellowPage
2. 页面命名
规则 :每个单词的首字母大写,因为它是类。
a. 父页面——使用名词进行描述
b. 子页面 _列表—— “List” + “父页面 ”
c. 子页面 _详细—— “Show”+ “父页面 ”
3 页面传值
“Id_” + “页面名称 ”
4. 错误页面命名
Error.aspx
5. 用户登录
UserLogin.aspx
6. 文件夹命名
单词首字母大写
单数或复数 ,根据实际需要而定 .
注 :其中一部分参考了 张子阳的《数据库对象命名参考》 Second Edition http://www.cnblogs.com/JimmyZhang/archive/2007/08/30/875504.html
根据个人的习惯增加、修改了一些。
编写此数据库命名规范的目的,就是提供较为形象、易于阅读、简单明了和原则性一致的数据库命名方法。从而能够方便项目相关人员直观的了解数据库中的所有对象表示的意义,方便大家交流。
这里主要描述以下的7类常见的数据库对象:
1. 表(Table)
2. 字段(Fields)
3. 视图(Views)
4. 存储过程(Stored Procedures)
5. 索引(Indexes)
6. 关联(Relationships)
7. 触发器(Trigger)
这一部分描述了数据库命名规范的一般性规则。
1. 26个小写字母(a-z)
2. 26个大写字母(A-Z)
3. 10个数字字符(0-9)
4. 下划线(_)
对象名字由前缀和实际名字组成,前缀和实际名字之间加下划线。
注意:不要在对象名的字符之间出现空格,长度不要超过30个字符。
[对象名字]= [前缀] _ [实际名字]
前缀缩写规则:使用小写字母,针对不同的数据库对象,以下表规范命名。
对象 |
前缀 |
表 |
tb |
视图 |
vi |
索引 |
idx |
关联 |
rl |
存储过程 |
sp |
函数 |
fn |
触发器 |
tr |
实际名字:尽量能够描述实体的内容,由单词或单词组合组成。采用Camel规则书写,即:第一个单词的首字母小写,而后的每个单词的首字母都要大写。
注意:不要以数字和下划线开头,单词之间也不要用下划线分隔。还要避免使用保留关键字和中文拼音,例如:ui_pk_userId,ui_firstName,ui_lastName和tb_userInfo
SQL语句中所有保留关键字均用大写字母书写。
本部分详细描述了ITSM系统中可能涉及的数据库对象的命名规则。
[表名]=tb_[实际名字]
对于表来说,有如下的规则:
1. 使用前缀tb;
2. 在表名中尽量少使用复数;
3. 实际名字部分不要使用下划线;
4. 实际名字部分尽量避免缩写,能明确表明其含义的除外,如:tb_userInfo;
另外,对于从其它数据库同步获得数据的表,除了以上的命名规则外,还要在[实际名字]后加下划线,然后再加[数据来源的数据库名]。
如:tb_assetInfo_croom,表示资产信息表来源于CRoom数据库。
[字段名]=[表名简写]_[字段实际名字][字段数据类型缩写]
表名简写部分,由表名的实际名字部分的各个单词的小写首字母顺序组合构成。
1. 如果字段是主键则:[字段实际名字]=pk+_+[实际名字];
2. 如果字段是外键则:[字段实际名字]=fk+_+[实际名字];
3. 如果字段是组合键则:[字段实际名字]=ck+_+[实际名字];
如:ui_pk_userId, ui_lastName。
另外,对于数据来源于其它数据库的字段,在上述的字段命名规范的最后加下划线,然后再加[数据来源的数据库名]。
如:ai_assetName_croom,表示资产名称字段来源于CRoom数据库。
注意:如果在多个表中出现表达意义类似的或者相同的字段,这些字段必须具有相同的字段属性。如:text类型,具有相同的最大长度设置。
[视图名]=vi_[实际名字]
1. 使用vi作为前缀;
2. 实际名字尽量体现视图的功能,并且用下划线分隔列出所有相关的表名;
3. 其它命名要求与表的命名要求一致;
[存储过程名]=sp_[实际名字]
1. 使用sp作为前缀;
2. 实际名字中要体现这个存储过程所要进行的操作(Update,Delete,Insert Into等);
3. 对于存储过程来说,实际名字组成由操作和表名构成;
如:sp_updateUserInfo。
[索引名]=idx[0-9]_[表名简写]_[实际名字]
1. 使用idx作为前缀;
2. [0-9]用来区分表的多个索引;
3. [实际名字]是指相关的字段或索引含义;
如:idx0_ui_firstName。
[关联名]=rl_[主表名简写]_[从表名简写]
关联关系是指数据库表间的外键关系。
如:rl_loginInfo_userInfo
[触发器名]=tr_[实际名字]
1. 使用tr作为前缀;
2. 实际名字中要描述触发器的操作(Insert,Update等等);
3. 对于触发器来说,实际名字由操作和对应的表名构成;
[函数名]=fn_[实际名字]
1. 使用fn作为前缀;
2. 实际名字描述该函数具体行为(get,set等等),做到见名释义;