Sql server SqlServer标识命名约定

Sql server SqlServer标识命名约定,sql-server,naming-conventions,Sql Server,Naming Conventions,我有table小部件和table个人 它们都包含标识列(种子) 标识列的建议命名约定是什么 是它“id”(对于两个表): 或 Widgets.WidgetId Persons.PersonId 前者与后者相比是否有优势/劣势?最好的做法是在前面加上表名 这将使您在加入SELECT列表中所指的字段时更加清晰 它还使意外的坏连接条件变得不可能,即 JOIN TableA ON ID=TableA.ID 通常,除非表中的字段名表示相同的数据,否则应避免在表中重复字段名。这是一种我需要冗余的情况。Th

我有table小部件和table个人

它们都包含标识列(种子)

标识列的建议命名约定是什么

它“
id
”(对于两个表):

Widgets.WidgetId
Persons.PersonId

前者与后者相比是否有优势/劣势?

最好的做法是在前面加上表名

这将使您在加入
SELECT
列表中所指的字段时更加清晰

它还使意外的坏
连接
条件变得不可能,即

JOIN TableA ON ID=TableA.ID


通常,除非表中的字段名表示相同的数据,否则应避免在表中重复字段名。

这是一种我需要冗余的情况。ThingID
否则,当您加入时,您必须在任何地方使用别名

注意:这已经对程序员的死亡和超越进行了处理。se:

在标识列中使用表名有点多余,但我发现它很有用,而且更具描述性,尤其是在执行外键联接时。例如,哪个似乎更好:

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


第一个查询更显式,导致意外连接更少。它还消除了在选择列表中使用别名的需要。

我在加入表时总是给表加上别名,所以我不认为这会带来不便。@Icarus:给列加上别名,这样结果中就不会有两次Id了set@gbn当你说“别名”时,你是指select语句吗?@Royi Namir:是的,根据Garrett Vlieger的answer@RoyiNamir:MylinktoProgrammers.sq可能:100票和评论意外连接参数是一个很好的观点。当我加入时,我总是给我的表加上别名,但这肯定是有可能的。之前有人问过这个问题,不幸的是我无法将它发送到那里。它太宽了,不能让堆栈溢出。@TimPost嗨,还是不明白你为什么要关闭它……我只是问了个问题,因为我进退两难。。。。从未打算开始辩论…@RoyiNamir这从来不是辩论。这就是堆栈交换网络的工作方式。您很好。@RoyiNamir如果选择了关闭原因,关闭原因下的文本将自动应用。这个问题很有趣,只是不适合这个网站。我们在回答问题时做得很好,这些问题会得到一个单一的、技术上“最佳”的答案。对这类问题的投票基本上只是表明“是的,我就是这样做的”。programmers.stackexchange.com的建立是为了为现实世界中不太适合堆栈溢出的问题提供场所。你没有做错什么:)
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
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