2009-10-19 30 views
14

我最近問了一位同事爲什麼他們在他們所有數據庫表名的末尾加入了_TABLE。他們表示,這是他們曾經工作過的另一個協調的標準。其他同事在視圖開始時使用V_。
這是一個很好的做法嗎?命名數據庫表和視圖

回答

24

一致性是最好的方法。在對象名稱末尾添加_TABLE或_VIEW在我的書中是過分的,但是如果數據庫是按照這種方式設計的,我不會違背約定。

對於你的同事把他命名約定從以前的組織成一個新的,而不檢查「本地」的標準是不好的做法。

+4

+1有關使用命名約定的評論......如果最終在一個數據庫中使用多個命名約定,它會失敗 – Andomar 2009-10-19 08:37:22

1

http://vyaskn.tripod.com/object_naming.htm

存在用於數據庫對象的這麼多不同的命名慣例,他們都不是錯誤的。這更多的是設計命名約定的人的個人喜好。但是,在一個組織中,一個人(或一個組織)定義數據庫命名約定,對其進行標準化,其他人將會遵循它,無論他們是否喜歡它。

閱讀full article關於如何實現/在你的組織中創建它的細節。

2

如果您經常閱讀SELECT查詢,那麼使用v_或vw_前綴可能很有用;您可以快速查看您是從視圖還是表格中進行選擇。前綴視圖或後綴表應該足夠了,不需要兩者。我們使用視圖前綴。

此外,我們使用「模塊」前綴簇表和視圖周圍的官能團。例如,與計費相關的表稱爲BIL_ *和與計費相關的視圖VW_BIL_ *。模塊命名使SSMS中的相關表格和視圖彼此靠近。

19

以視圖作爲標準使用v在我眼中特別糟糕,因爲它阻止您使用重構數據庫的最佳方式之一,即重命名錶並使用舊名稱模仿舊結構,所以在進行更改時沒有任何突破,但是您可以開始查找並修復所有舊參考,而無需在更改投入使用前修復所有參考。

我也是用的想法,真正的問題是從一些其他組織採取命名約定,而忽略當前組織的命名約定AKF。我會跺腳,並堅持認爲他將所有對象和相關代碼更改爲標準,否則這將繼續成爲問題。

3

它認爲akf很好地回答了這個問題。 HLGEM關於重構有一個很好的觀點。

但是我會添加這個反駁,沒有前綴/後綴約定。在SQL Server(以及其他數據庫)中,您不能在同一個模式下擁有相同所有者的表和具有相同名稱的視圖。爲表創建非規格化視圖是一種常見模式。如果您尚未採用區分視圖與視圖的命名約定,那麼您最終可能會看到這些視圖的有趣名稱,例如EMPLOYEE_DENORM而不是EMPLOYEE_V。

在必要的時候對重構如HLGEM描述那麼你的命名約定可能允許這一點。這樣,沒有前綴或後綴的視圖很容易被識別爲「重構」視圖。

0

我更喜歡在所有camelCase中命名我的表以及字段名。例如...

CREATE TABLE [crm].[company] 
(
    [id] INT NOT NULL PRIMARY KEY, 
    [companyName] NVARCHAR(255) NOT NULL 
) 

對於視圖,我在它們前加上「view」一詞。例如...

CREATE VIEW [crm].[viewFullEmployee] 
    AS SELECT e.id, e.companyId, e.niceId, e.startDate, e.fullPart, p.firstName, p.middleName, p.lastName, p.active, p.birthDate, p.email, p.alternateEmail, p.phone, p.phoneExt, p.homePhone, p.mobilePhone, p.jobTitle, p.suffix, p.prefix FROM [crm].[Employee] as e FULL JOIN [crm].[person] as p on e.id = p.id 

我也被分成東西展現出來成模式的,我不使用默認的模式,迫使我總是指定我查詢的東西架構如無物是DBO。

我知道某些東西是由於缺少前面的單詞視圖而導致的。這也可以防止有一個表和一個具有相同名稱的視圖。

我不喜歡使用像「employee_v」這樣的下劃線名稱,因爲我使用T4模板「PetaPoco」生成了所有數據層代碼,而且我不喜歡在引用類型時在代碼中鍵入_。

我就是這樣更好

var person = uow.Db.Fetch<Models.viewFullEmployee>("SELECT * FROM [crm].[viewFullEmployee]"); 

VS

var person = uow.Db.Fetch<Models.fullEmployee_V>("SELECT * FROM [crm].[fullEmployee_V]"); 

至於存儲過程,我覺得他們並不需要像前綴「sp_」開頭,我看到這麼多的人做的。由於EXEC的prefix,或Create Procedure或Alter Procedure,您知道這是一個正在使用的存儲過程。因此,我將存儲過程命名爲「addUpdatePerson」,「getUserPermissions」等。

我在哪裏使用前綴在函數上,比如「fnValidateEmail」,因爲它們可以與存儲過程名稱衝突。