注冊(cè) 登錄
Office中國(guó)論壇/Access中國(guó)論壇 返回首頁(yè)

stiven.hu的個(gè)人空間 http://ctxi.cn/?229001 [收藏] [復(fù)制] [分享] [RSS]

日志

通用數(shù)據(jù)庫(kù)命名規(guī)范

已有 1615 次閱讀2013-4-19 22:28 | 數(shù)據(jù)庫(kù), 命名

命名規(guī)范的一般性原則
  • 數(shù)據(jù)庫(kù)對(duì)象的定義:
    數(shù)據(jù)庫(kù)對(duì)象 = { 
      表(Table),
      屬性(Column),
      視圖(View),
      存儲(chǔ)過(guò)程(Stored Procedure),
      函數(shù)(Function),
      約束(Constraint),
      觸發(fā)器(Trigger),
      索引(Index)
    }
    以下原則適用于所有數(shù)據(jù)庫(kù)對(duì)象;
  • 采用26個(gè)英文字母(區(qū)分大小寫)和0-9這十個(gè)自然數(shù),加上下劃線_組成,共63個(gè)字符;盡量避免使用數(shù)字;
  • 最大長(zhǎng)度為30個(gè)字符;盡量選擇短小而明確的單詞或單詞組;
  • 首字符必須為英文字母,不能為下劃線或數(shù)字;
  • 合成詞采用lowerCamelCase記法;盡量減少下劃線的使用;
  • 所有單詞或詞組全部采用英文單數(shù)形式,既不能使用復(fù)數(shù)形式,也不能使用漢語(yǔ)拼音;
  • 禁止使用SQL保留字,相關(guān)列表可參見http://drupal.org/node/141051http://sqlserver2000.databases.aspfaq.com/what-are-reserved-access-odbc-and-sql-server-keywords.html#top;說(shuō)易行難,保留字范圍很廣,例如“name”,“order”, “percent”, “user”等均屬保留字,不確定時(shí)最好去查表;
  • 禁止使用縮略語(yǔ)或首字母縮略詞,除非該縮寫形式已廣泛使用,或者已在數(shù)據(jù)字典中嚴(yán)格定義;
  • 除視圖外,禁止使用用來(lái)標(biāo)識(shí)數(shù)據(jù)庫(kù)對(duì)象類型的前綴或后綴,如tbl, idx, usp,cons等;

一、 表的命名

  • 前綴的使用:
    1. 在表名中使用前綴的目的是為了對(duì)表進(jìn)行邏輯上的分組,以方便對(duì)表的區(qū)分,如果不是出于此目的,禁止使用前綴,如TBL或tbl這樣的前綴沒(méi)有任何意義;
    2. 按照不同的邏輯層次,可以給表名添加多個(gè)前綴,廣義的前綴放在前面;如果通過(guò)其他方式已經(jīng)可以得到該表的邏輯分組,就不要在該層次上再使用前綴;
    3. 前綴屬于表名的一部分,同樣遵循lowerCamelCase記法;禁止使用下劃線連接表名的前綴;
    4. 前綴一般使用縮寫形式,必須在數(shù)據(jù)字典中注明其準(zhǔn)確含義;
    5. 示例:兩個(gè)應(yīng)用:人事系統(tǒng)<hr>和財(cái)務(wù)系統(tǒng)<fin>共用同一個(gè)數(shù)據(jù)庫(kù),其中人事系統(tǒng)又包含兩個(gè)子系統(tǒng)(假期管理<vac>和評(píng)定<>),財(cái)務(wù)系統(tǒng)也包含兩個(gè)子系統(tǒng)(工資<pay>和貸款<loan>),則休假申請(qǐng)表可以使用如下的名字:hrVacApplication,而加薪申請(qǐng)表就可以表示為finPayApplication;如果這兩個(gè)應(yīng)用各自使用單獨(dú)的數(shù)據(jù)庫(kù),那么第一層前綴就不應(yīng)該被使用,相應(yīng)的表名就變?yōu)関acApplication和payApplication,更方便簡(jiǎn)捷;
  • 查找表(lookup table)表名前添加主表名作為前綴,如activityStatus,activityType等;
  • 連接表(linktable)采用參與連接的各表名的拼接作為表名,拼接順序采用字母表順序,如carDriver、doctorPatient,以下情況除外:
    1. 連接表本身已經(jīng)有一個(gè)自然而標(biāo)準(zhǔn)的名字(定義為實(shí)體比定義為聯(lián)系更確切);
    2. 當(dāng)兩個(gè)表之間存在不止一個(gè)連接表時(shí);
  • 特殊情況處理:
    1. 禁止使用通用查找表;
    2. 當(dāng)參與連接或作為查找表前綴的表名本身已經(jīng)包含多個(gè)單詞時(shí),連接表名中可使用下劃線作為表名之間的分隔符,如activity_activityType;如果有多個(gè)表參與連接,而連接后表名過(guò)長(zhǎng),可考慮使用簡(jiǎn)寫形式;

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

  • 禁止使用本表名作為其列名前綴的記法;
  • 主碼統(tǒng)一使用id作為名字;
  • 復(fù)合碼的命名:如果一個(gè)表采用復(fù)合碼作為其主碼,采用“Id”前添加相應(yīng)描述符的方式對(duì)各主屬性分別命名,例如,兩個(gè)字段“moduleId”和“codeId”組成一個(gè)復(fù)合碼,如果在表中你找不到“id”列,就說(shuō)明該表采用了復(fù)合碼作為其主碼;
  • 外碼采用父表名+對(duì)應(yīng)的父表列名的命名方法,如car表包含一個(gè)指向driver表的外碼,其名字就是driverId;如果父表名本身已包含多個(gè)單詞,為了清晰起見,可使用下劃線連接父表名和id,如bestDriver_id;
  • 特定數(shù)據(jù)類型屬性的命名:
    1. 布爾型字段采用類似如下的方式:如isDeleted, hasPermission,isValid等;
    2. 日期型字段名中通常包含單詞“Date”或者以單詞“On”作為后綴;時(shí)間型字段名中通常包含單詞“Time”或者以單詞“At”作為后綴;對(duì)于持續(xù)型時(shí)間通常要加上時(shí)間單位,如“runtimeHour”或“scheduledMinute”;

三、 視圖的命名

  • 后綴:視圖統(tǒng)一采用“Vw”作為后綴;
  • 對(duì)于無(wú)其它限定條件,只完成表間連接的簡(jiǎn)單視圖來(lái)說(shuō),可參照連接表的命名規(guī)則對(duì)其命名,如carDriverVw,bestCar_bestDriverVw等;
  • 未盡事宜參照表的命名規(guī)則執(zhí)行;

四、 存儲(chǔ)過(guò)程和函數(shù)的命名

  • 與其他數(shù)據(jù)庫(kù)對(duì)象不同,存儲(chǔ)過(guò)程和函數(shù)在邏輯上并不綁定于任何表或者列,因此其命名層次與表的命名層次應(yīng)該是一致的;
  • 存儲(chǔ)過(guò)程和函數(shù)的命名采用“動(dòng)詞+名詞”的形式,以自然語(yǔ)義闡述其所完成的功能:
    1. 經(jīng)常使用的動(dòng)詞有“create, get, update,delete”,但并不局限于此;
    2. 名詞部分可以使用實(shí)體名或者表名,也可使用任何其它名字,以準(zhǔn)確表達(dá)語(yǔ)義為準(zhǔn);
    3. 例如,addComment, editArticle, removePermission,archiveFileDetail等;
  • 邏輯分組前綴:和表名一樣,存儲(chǔ)過(guò)程和函數(shù)的名稱前也可添加邏輯分組前綴,并遵循和表名相同的邏輯分組前綴命名規(guī)則,如hrGetNewMember;
  • 禁止使用類似前綴,如“sp_”,“xp_”,“dt_”或“fn_”等,一方面完全沒(méi)有必要,另一方面也會(huì)與系統(tǒng)級(jí)存儲(chǔ)過(guò)程或函數(shù)產(chǎn)生命名沖突;

五、 約束的命名

  • 約束名稱采用如下形式:
    {表名}{受約束的屬性列表}{約束類型簡(jiǎn)稱},其中
    表名指出該約束隸屬于哪一個(gè)表;
    受約束的屬性列表采用所有受約束屬性名稱的拼接形式,拼接順序與屬性在表中的順序一致;
    約束類型簡(jiǎn)稱指出該約束的具體類型,如下:Pk代表主碼約束,F(xiàn)k代表外碼約束,Ck代表檢查約束,Uq代表唯一性約束,Nn代表非空約束;
    例如,carIdPk表示在表car的屬性id上的一個(gè)主碼約束,driverCarIdFk表示在表driver的屬性carId上的一個(gè)外碼約束,invoiceCustomerIdCk表示在表invoice的屬性customerId上的一個(gè)檢查約束,等等;
  • 禁止使用“Cons”或“cons”類型的前綴或后綴;
  • 特殊情況處理:
    1. 如果表名本身已包含多個(gè)單詞,為了更加清晰,可使用下劃線連接表名及其它部分,如約束orderDetailCustomerIdCk也可命名為orderDetail_customerIdCk;
    2. 如果因受約束屬性太多而導(dǎo)致約束名過(guò)長(zhǎng)的話,可考慮對(duì)各屬性名使用簡(jiǎn)寫形式,同樣,必須在數(shù)據(jù)字典中注明其準(zhǔn)確含義;

六、 觸發(fā)器的命名

  • 觸發(fā)器名稱采用如下形式:
    {表名}{觸發(fā)事件類型簡(jiǎn)稱},其中觸發(fā)事件類型簡(jiǎn)稱包括:
    ins代表Insert操作,upd代表Update操作,del代表Delete操作,如productIns等;
  • 如果一個(gè)觸發(fā)器包含了多個(gè)觸發(fā)事件類型,則將所有的觸發(fā)事件類型簡(jiǎn)稱拼接起來(lái),拼接順序采用字母表順序,如productInsUpd,userNameDelUpd等;
  • 如果對(duì)同一個(gè)表的同一類觸發(fā)事件定義了多個(gè)觸發(fā)器,則必須在表名和觸發(fā)事件類型簡(jiǎn)稱之間再加入一個(gè)語(yǔ)義描述符,以區(qū)分不同用途的觸發(fā)器,如userValidateEmailAddressIns和userMakeActionEntryIns;
  • 如果表名本身已包含多個(gè)單詞,為了更加清晰,可使用下劃線連接表名及其它部分,如觸發(fā)器userNameDelUpd也可命名為userName_delUpd;
  • 禁止使用“trg”或“tr”類型的前綴或后綴;

七、 索引的命名

  • 索引名稱采用如下形式:
    {表名}{搜索碼字段列表}{U/N}{C/N},其中
    表名指要建立索引的基本表的名字;
    搜索碼字段列表采用構(gòu)成該搜索碼的所有字段名稱的拼接形式,拼接順序與字段在表中出現(xiàn)的順序一致;
    U/N指出該索引是否是唯一性(UNIQUE)索引;
    C/N指出該索引是否是聚簇(CLUSTER)索引;
    例如,"productIdUC"表示product表包含一個(gè)建立在id字段上的唯一性的聚簇索引,而orderDetailOrderIdCustomerIdNN表示orderDetail表包含一個(gè)建立在orderId和customerId兩個(gè)字段之上的非唯一非聚簇的索引;
  • 禁止使用“IDX”或“idx”類型的前綴或后綴;
  • 特殊情況處理:
    1. 如果表名本身已包含多個(gè)單詞,為了更加清晰,可使用下劃線連接表名及其它部分,如索引orderDetailOrderIdCustomerIdNN也可命名為orderDetail_orderIdCustomerIdNN;
    2. 如果因搜索碼包含太多字段而導(dǎo)致索引名過(guò)長(zhǎng)的話,可考慮對(duì)各字段名使用簡(jiǎn)寫形式,同樣,必須在數(shù)據(jù)字典中注明其準(zhǔn)確含義;

數(shù)據(jù)庫(kù)設(shè)計(jì)文檔規(guī)范
  表名:   userInformation
  作者:   tinyKnife
  版本:   0.01
  日期:   2008-08-08
  描述:   保存用戶資料
  具體內(nèi)容:(以表格形式)

附注

  1. 本規(guī)范綜合考慮了數(shù)據(jù)庫(kù)管理人員和程序開發(fā)人員的不同需求和使用習(xí)慣,采取了折中的策略;
  2. 本規(guī)范的項(xiàng)目實(shí)踐還相對(duì)有限,具體條目的適應(yīng)性尚需更多檢驗(yàn),歡迎高手多多批評(píng)指正。

評(píng)論 (0 個(gè)評(píng)論)

facelist doodle 涂鴉板

您需要登錄后才可以評(píng)論 登錄 | 注冊(cè)

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2024-10-23 08:30 , Processed in 0.066432 second(s), 16 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部