2011-11-28 70 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列表中使用别名的需要。