2011-11-28 30 views
7

我有表小工具和表人員SqlServer的身份命名約定

他們都包含標識列(種子)

什麼是標識列推薦的命名約定?

它 「id」(兩個表):

Widgets.Id 
Persons.Id 

Widgets.WidgetId 
Persons.PersonId 

是否有優勢/劣勢前者相比後者?

+2

此問題已在[程序員SE]之前提出過(http://programmers.stackexchange.com/questions/114728/why-is-naming-a-tables-primary-key-column-id-considered-bad-練習),不幸的是我不能將它發送到那裏。這對Stack Overflow來說太廣泛了。 –

+0

@TimPost嗨,仍然不明白你爲什麼關閉它....我只是問了一個問題,因爲我有一個困境......從來沒有打算開始辯論...... –

+0

@RoyiNamir它從來沒有辯論。這是堆棧交換網絡的工作原理。你沒事。 – jcolebrand

回答

6

這是一個情況下我會去冗餘並Thing.ThingID
否則,你有別名它到處當您加入

注:這是已經實現了死亡和超越 on:
Why is naming a table's Primary Key column 「Id」 considered bad practice?

+0

當我加入他們時,我總是會將我的表格別名,所以我不認爲這是一個不便。 – Icarus

+0

@Icarus:aliasing * columns *所以你沒有兩次在結果集中的Id – gbn

+0

@gbn當你說「別名」時,你的意思是在select語句中嗎? –

3

對此的最佳做法是以表名稱開頭。

這會使您在加入您所指的SELECT列表中的字段時更清晰。

這也使得意外不良JOIN條件是不可能的,即

JOIN TableA ON ID = TableA.ID

作爲一項規則,應避免跨表重複的字段名,除非它們代表相同的數據。

+0

偶然的加入論點是一個很好的觀點。當我加入時,我總是用我的牌來替換,但肯定有這種可能性。 – Icarus

3

在標識列中使用表名有點多餘,但我覺得它有用且更具描述性,尤其是在執行外鍵連接時。例如,這似乎更好:

SELECT P.PersonID, P.FullName, W.WidgetID, W.WidgetName 
FROM Widgets W JOIN 
    PersonWidgets PW ON W.WidgetsID = PW.WidgetsID JOIN 
    Person P ON P.PersonID = PW.PersonID 

OR

SELECT P.ID as PersonID, P.FullName, W.ID as WidgetID, W.WidgetName 
FROM Widgets W JOIN 
    PersonWidgets PW ON W.ID = PW.WidgetsID JOIN 
    Person P ON P.ID = PW.PersonID 

第一個查詢更加明確,導致有些偶然連接。它還消除了在SELECT列表中使用別名的需要。