通用数据库命名规范-Victor Duane
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-表


通用数据库命名规范

发表时间:2011/9/21 17:22:17 评论(2) 浏览(14989)  评论 | 加入收藏 | 复制
   
摘 要:通用数据库命名规范
正 文:
命名规范的一般性原则
  • 数据库对象的定义:
    数据库对象 = { 
      表(Table),
      属性(Column),
      视图(View),
      存储过程(Stored Procedure),
      函数(Function),
      约束(Constraint),
      触发器(Trigger),
      索引(Index)
    }
    以下原则适用于所有数据库对象;
  • 采用26个英文字母(区分大小写)和0-9这十个自然数,加上下划线_组成,共63个字符;尽量避免使用数字;
  • 最大长度为30个字符;尽量选择短小而明确的单词或单词组;
  • 首字符必须为英文字母,不能为下划线或数字;
  • 合成词采用lowerCamelCase记法;尽量减少下划线的使用;
  • 所有单词或词组全部采用英文单数形式,既不能使用复数形式,也不能使用汉语拼音;
  • 禁止使用SQL保留字,相关列表可参见http://drupal.org/node/141051http://sqlserver2000.databases.aspfaq.com/what-are-reserved-access-odbc-and-sql-server-keywords.html#top;说易行难,保留字范围很广,例如“name”,“order”, “percent”, “user”等均属保留字,不确定时最好去查表;
  • 禁止使用缩略语或首字母缩略词,除非该缩写形式已广泛使用,或者已在数据字典中严格定义;
  • 除视图外,禁止使用用来标识数据库对象类型的前缀或后缀,如tbl, idx, usp,cons等;

一、 表的命名

  • 前缀的使用:
    1. 在表名中使用前缀的目的是为了对表进行逻辑上的分组,以方便对表的区分,如果不是出于此目的,禁止使用前缀,如TBL或tbl这样的前缀没有任何意义;
    2. 按照不同的逻辑层次,可以给表名添加多个前缀,广义的前缀放在前面;如果通过其他方式已经可以得到该表的逻辑分组,就不要在该层次上再使用前缀;
    3. 前缀属于表名的一部分,同样遵循lowerCamelCase记法;禁止使用下划线连接表名的前缀;
    4. 前缀一般使用缩写形式,必须在数据字典中注明其准确含义;
    5. 示例:两个应用:人事系统<hr>和财务系统<fin>共用同一个数据库,其中人事系统又包含两个子系统(假期管理<vac>和评定<>),财务系统也包含两个子系统(工资<pay>和贷款<loan>),则休假申请表可以使用如下的名字:hrVacApplication,而加薪申请表就可以表示为finPayApplication;如果这两个应用各自使用单独的数据库,那么第一层前缀就不应该被使用,相应的表名就变为vacApplication和payApplication,更方便简捷;
  • 查找表(lookup table)表名前添加主表名作为前缀,如activityStatus,activityType等;
  • 连接表(linktable)采用参与连接的各表名的拼接作为表名,拼接顺序采用字母表顺序,如carDriver、doctorPatient,以下情况除外:
    1. 连接表本身已经有一个自然而标准的名字(定义为实体比定义为联系更确切);
    2. 当两个表之间存在不止一个连接表时;
  • 特殊情况处理:
    1. 禁止使用通用查找表;
    2. 当参与连接或作为查找表前缀的表名本身已经包含多个单词时,连接表名中可使用下划线作为表名之间的分隔符,如activity_activityType;如果有多个表参与连接,而连接后表名过长,可考虑使用简写形式;

二、 属性(列、字段)的命名

  • 禁止使用本表名作为其列名前缀的记法;
  • 主码统一使用id作为名字;
  • 复合码的命名:如果一个表采用复合码作为其主码,采用“Id”前添加相应描述符的方式对各主属性分别命名,例如,两个字段“moduleId”和“codeId”组成一个复合码,如果在表中你找不到“id”列,就说明该表采用了复合码作为其主码;
  • 外码采用父表名+对应的父表列名的命名方法,如car表包含一个指向driver表的外码,其名字就是driverId;如果父表名本身已包含多个单词,为了清晰起见,可使用下划线连接父表名和id,如bestDriver_id;
  • 特定数据类型属性的命名:
    1. 布尔型字段采用类似如下的方式:如isDeleted, hasPermission,isValid等;
    2. 日期型字段名中通常包含单词“Date”或者以单词“On”作为后缀;时间型字段名中通常包含单词“Time”或者以单词“At”作为后缀;对于持续型时间通常要加上时间单位,如“runtimeHour”或“scheduledMinute”;

三、 视图的命名

  • 后缀:视图统一采用“Vw”作为后缀;
  • 对于无其它限定条件,只完成表间连接的简单视图来说,可参照连接表的命名规则对其命名,如carDriverVw,bestCar_bestDriverVw等;
  • 未尽事宜参照表的命名规则执行;

四、 存储过程和函数的命名

  • 与其他数据库对象不同,存储过程和函数在逻辑上并不绑定于任何表或者列,因此其命名层次与表的命名层次应该是一致的;
  • 存储过程和函数的命名采用“动词+名词”的形式,以自然语义阐述其所完成的功能:
    1. 经常使用的动词有“create, get, update,delete”,但并不局限于此;
    2. 名词部分可以使用实体名或者表名,也可使用任何其它名字,以准确表达语义为准;
    3. 例如,addComment, editArticle, removePermission,archiveFileDetail等;
  • 逻辑分组前缀:和表名一样,存储过程和函数的名称前也可添加逻辑分组前缀,并遵循和表名相同的逻辑分组前缀命名规则,如hrGetNewMember;
  • 禁止使用类似前缀,如“sp_”,“xp_”,“dt_”或“fn_”等,一方面完全没有必要,另一方面也会与系统级存储过程或函数产生命名冲突;

五、 约束的命名

  • 约束名称采用如下形式:
    {表名}{受约束的属性列表}{约束类型简称},其中
    表名指出该约束隶属于哪一个表;
    受约束的属性列表采用所有受约束属性名称的拼接形式,拼接顺序与属性在表中的顺序一致;
    约束类型简称指出该约束的具体类型,如下:Pk代表主码约束,Fk代表外码约束,Ck代表检查约束,Uq代表唯一性约束,Nn代表非空约束;
    例如,carIdPk表示在表car的属性id上的一个主码约束,driverCarIdFk表示在表driver的属性carId上的一个外码约束,invoiceCustomerIdCk表示在表invoice的属性customerId上的一个检查约束,等等;
  • 禁止使用“Cons”或“cons”类型的前缀或后缀;
  • 特殊情况处理:
    1. 如果表名本身已包含多个单词,为了更加清晰,可使用下划线连接表名及其它部分,如约束orderDetailCustomerIdCk也可命名为orderDetail_customerIdCk;
    2. 如果因受约束属性太多而导致约束名过长的话,可考虑对各属性名使用简写形式,同样,必须在数据字典中注明其准确含义;

六、 触发器的命名

  • 触发器名称采用如下形式:
    {表名}{触发事件类型简称},其中触发事件类型简称包括:
    ins代表Insert操作,upd代表Update操作,del代表Delete操作,如productIns等;
  • 如果一个触发器包含了多个触发事件类型,则将所有的触发事件类型简称拼接起来,拼接顺序采用字母表顺序,如productInsUpd,userNameDelUpd等;
  • 如果对同一个表的同一类触发事件定义了多个触发器,则必须在表名和触发事件类型简称之间再加入一个语义描述符,以区分不同用途的触发器,如userValidateEmailAddressIns和userMakeActionEntryIns;
  • 如果表名本身已包含多个单词,为了更加清晰,可使用下划线连接表名及其它部分,如触发器userNameDelUpd也可命名为userName_delUpd;
  • 禁止使用“trg”或“tr”类型的前缀或后缀;

七、 索引的命名

  • 索引名称采用如下形式:
    {表名}{搜索码字段列表}{U/N}{C/N},其中
    表名指要建立索引的基本表的名字;
    搜索码字段列表采用构成该搜索码的所有字段名称的拼接形式,拼接顺序与字段在表中出现的顺序一致;
    U/N指出该索引是否是唯一性(UNIQUE)索引;
    C/N指出该索引是否是聚簇(CLUSTER)索引;
    例如,"productIdUC"表示product表包含一个建立在id字段上的唯一性的聚簇索引,而orderDetailOrderIdCustomerIdNN表示orderDetail表包含一个建立在orderId和customerId两个字段之上的非唯一非聚簇的索引;
  • 禁止使用“IDX”或“idx”类型的前缀或后缀;
  • 特殊情况处理:
    1. 如果表名本身已包含多个单词,为了更加清晰,可使用下划线连接表名及其它部分,如索引orderDetailOrderIdCustomerIdNN也可命名为orderDetail_orderIdCustomerIdNN;
    2. 如果因搜索码包含太多字段而导致索引名过长的话,可考虑对各字段名使用简写形式,同样,必须在数据字典中注明其准确含义;

数据库设计文档规范
  表名:   userInformation
  作者:   tinyKnife
  版本:   0.01
  日期:   2008-08-08
  描述:   保存用户资料
  具体内容:(以表格形式)

附注

  1. 本规范综合考虑了数据库管理人员和程序开发人员的不同需求和使用习惯,采取了折中的策略;
  2. 本规范的项目实践还相对有限,具体条目的适应性尚需更多检验,欢迎高手多多批评指正。

所属分类:编程相关Access    作者:新浪博客    时间:2010-11-20 0:00:00

Access软件网交流QQ群(群号:198465573)
 
 相关文章
access与VB编程--控件及变量命名规则  【等待虫  2011/10/21】
批量对数据表字段名重命名的方法\代码  【叶海峰   2012/2/11】
Access开发平台对象命名规则(UMV平台的对象命名规则)  【麥田  2013/1/24】
【示例组合】自动获取文件名按一定规律排序再重命名文件  【天外流星  2013/3/28】
常见问答
技术分类
相关资源
文章搜索
关于作者

Victor Duane

文章分类

文章存档

友情链接