iT邦幫忙

0

資料庫物件命名原則?

在設計資料庫時常常會碰到Table,Column,View,Index,Function...命名的問題,因為每個DBA的習慣不同,造成有很多不一致的情況,例如大小寫、縮寫、分隔符號、單複數、prefix等,請問有沒有一套通用且容易使用的資料庫物件命名原則?

davistai iT邦大師 1 級 ‧ 2008-09-02 17:26:13 檢舉
要是大家都用通用且容易使用的資料庫物件命名原則的話,是蠻不錯的,那麼不管是誰來管理或接手維運都會比較容易吧?
有一次專案,碰到兩個系統分析師
一個是老派的,一個是新人類的
一個負責財務系統,一個負責供應商系統
在討論系統規格的會議上

新人類提出命名原則為「簡單明確」,例:訂單TABLE就叫PURCHASEORDER
老派提出命名原則為「長度固定」,例:FAPBASIC(財務子系統應付系統之基本檔)

雙方各持已見,互不相讓

吵了幾個小時,從電腦概論吵到工作態度,
專案經理覺得大概是沒法獲得共識,
當下決定....




各做各的,高興就好。
jamesjan iT邦高手 1 級 ‧ 2008-09-03 12:46:03 檢舉
這樣做好像有點危險,畢竟團隊開發講求的是共識與 Follow 基本原則
沒有一定的原則參考,久了會有維護與交接上的困擾
專案經理應該在這時發揮應有的角色
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
32
lukechang
iT邦研究生 1 級 ‧ 2008-09-02 15:39:39
最佳解答

可以考慮統一用匈牙利命名法

http://blog.xuite.net/shian5/CodingStyle/3617347
有寫過程式的人應該都會有聽過所謂的匈牙利命名法,這是由微軟的程式設計師 Charles Simonyi 所發明的,幾乎在所有程式語言的入門書都會提到。依照書中所寫,所謂的匈牙利命名法便是在變數前面加上該變數的型別,例如:
int iCount;
char szName[100];
整數型別就加上個 "i";以 NULL 字元結尾的字串就加上個 "sz"。C 語言中的基本型別並不多,因此對於程式設計師來說,使用這個命名法也不會太麻煩。隨著 Windows 的普及,在 Win32 中大量導入 Handle 的概念,視窗有視窗的 handle(HWND),Process 有 Process 的 handle(HANDLE)。為了要區別這些變數,開始有人建議在這些變數也加上前綴字元,於是就出現這樣的變數:
HWND hwndMainWin;
HANDLE hProcess;
好吧,就算是再加入這幾種型別也還在程式設計師的記憶體範圍內,大家也都還能接受,於是匈牙利命名法著實風光了一陣子。然而隨著 C++ 的出現,匈牙利命名法受到史無前例的挑戰。

jamesjan iT邦高手 1 級 ‧ 2008-09-03 12:30:46 檢舉

Yes, 匈牙利命名法確實是一個依歸
當初在參與專案開發時,我們也是依據其準則自訂變數命名規則

22
adwings
iT邦新手 4 級 ‧ 2008-09-02 14:28:31

我的習慣是看資料庫建構的時候看該資料庫是拿來做甚麼用,
就給予甚麼英文名稱
大部分都是給小寫~但是我喜歡駝峰式寫法~大概是寫程式的習慣一起帶過去
(大部分看到好像資料庫建立都是全小寫居多)
但是大部分的人命名原則都不太一樣~所以...這種事情可以彼此有個共識比較好

給你參考一下

18
cheng
iT邦好手 1 級 ‧ 2008-09-03 07:55:21

資料庫的命名一般都是一設計師習慣
沒有一定的,但是例如基本上常用的幾個都差不多
例如人員、計數、部門、職稱等等一般都相同
除非就是那些公司內較為不同的設計與名稱
才回依照公司需求或是設計師來命名
畢竟有時候不想讓USER或是閱讀者知道資料庫名稱
所以隨意取一個名字

22
jamesjan
iT邦高手 1 級 ‧ 2008-09-03 12:37:20

我自己的習慣是在 View 方面以 vw_ 為 prefix
Trigger -> tri_
Stored Procedure -> sp_
Index -> idx_
Table -> tbl_ (比較少用,通常以其命名為主,不做區分,因為還是以 Table 為主體)
Function -> fn_
User Defined Type -> udt_

這樣的好處是,您在程式中有撰寫 SQL Statement時,可以很清楚知道他是放在什麼位置的
我的 RDBMS 通常為 MS SQL Server

我要發表回答

立即登入回答