2008-11-27 69 views
10

我們正在爲我們的開發團隊在工作中決定表,列,過程等的命名約定。單數複數表命名爲已經決定,我們使用的是單數。我們正在討論是否爲每個表名稱使用前綴。我想閱讀關於使用前綴的建議,以及爲什麼。我們應該在數據庫表命名約定中使用前綴嗎?

它是否提供任何安全性(對於可能的入侵者至少還有一個障礙)?我認爲用一個前綴命名它們通常會更舒服,以防我們在代碼中使用表名,所以不要將它們與變量,屬性等混淆。但我想閱讀更多有經驗的開發人員的意見。

回答

8

我更喜歡在應用程序或解決方案的縮寫名稱前綴表和其他數據庫對象。

這有助於在其中兩個映入腦海潛在的情況:你是不太可能得到命名衝突,如果你選擇使用需要在你的應用程序數據庫表中的任何第三方框架組件

  1. (如asp網絡會員提供商)。

  2. 如果您正在爲客戶開發解決方案,它們可能會侷限於單個數據庫(特別是如果他們正在爲外部託管付款),要求他們將多個應用程序的數據庫對象存儲在單個數據庫中。

+1

約前綴表名唯一要注意的是,一些表可能最終被用於由多個應用程序,在這種情況下,原始前綴變成誤導。在最糟糕的情況下,App1的前綴在App1本身走完了渡渡鳥之路後長期存在。 – 2008-11-27 17:47:31

+6

爲應用程序名稱添加前綴不會添加任何值。 1.第三方組件不應該與您的應用程序表在相同的架構/所有者下,從而首先導致命名衝突。 2.限於單個數據庫並不意味着僅限於一個模式。 – 2011-07-29 03:30:54

+1

@AmitNaidu我同意。自從我發佈這個問題以來的五年裏,我完全改變了主意。如果可以的話,我會刪除答案。 – 2014-03-28 17:31:57

2

如果您使用SqlServer,那麼最好的辦法就是看一下爲某些指導提供的示例數據庫。

-4

如果您擔心會混淆表名,請在代碼中使用匈牙利符號樣式系統。也許,「S」字符串+「TN」的表名:

stnUsers = 'users'; 
stnPosts = 'posts'; 

當然,前綴是由你,取決於你如何冗長喜歡你的代碼... strtblUsers, strtblnmeUsers, thisisthenameofatableyouguysUsers...

追加前綴到表名確實有一些好處,特別是如果您不將該前綴硬編碼到系統中,並允許它在每次安裝時更改。就像Ian說的那樣,與其他組件發生衝突的風險較小,其次,如果您願意,您可以讓程序的兩個或多個實例從同一個數據庫運行。

8

我沒有看到任何命名約定如何提高安全性...

如果入侵者可以訪問數據庫(有害權限),他們肯定有權限列出表名,並選擇查看他們用於什麼。

但我認爲真正令人困惑的表名可能會間接地惡化安全性。 它將使進一步的發展努力,從而減少機會的安全問題將是固定的,或者甚至有可能隱藏潛在的問題:

如果名爲(例如)「sro235onsg43oij5」表是完全隨機字符串隨機命名coloumns的和數字,一個新的開發人員可能會認爲它是隨機測試數據(除非他觸及與之交互的代碼),但是如果它被命名爲'userpasswords'或類似的話,任何查看該表的開發人員可能會對密碼感到震驚以明文形式存儲。

24

我找到匈牙利DB對象前綴來表明自己的類型,而惱人。

我在的地方,每一個表名曾與「TBL」開始工作。在任何情況下,當有人需要做出其他微小變化時,命名慣例最終會導致很大的痛苦。例如,如果您的約定是表格以「tbl」開頭,並且視圖以「v」開頭,那麼當您決定在後端替換一些表格並提供其他一些內容時,要做什麼是正確的?查看兼容性甚至作爲首選接口?我們結束了以「tbl」開頭的觀點。

2

爲什麼不按照你的地方編碼準則命名錶?考慮表名稱「類」和列「屬性」或「字段」。這在使用可自動推斷來自班級/成員命名的表/列命名的ORM時有所幫助。

例如,Castle ActiveRecord,聲明如下面assumes the names are the same,因爲他們都在會員。

[ActiveRecord] 
public class Person 
{ 
    [PrimaryKey] 
    public Int32 Id { get; set; } 

    [Property] 
    public String Name { get; set; } 
} 
0

在過去,我一直反對在表名和列名中使用前綴。然而,當面臨重新設計系統的任務時,具有前綴對於搜索和替換是非常寶貴的。例如,對「tbl_product」的grepping可能會比grepping「product」給你更多的相關結果。

相關問題