我有表小工具和表人员SqlServer的身份命名约定
他们都包含标识列(种子)
什么是标识列推荐的命名约定?
是它 “id
”(两个表):
Widgets.Id
Persons.Id
或
Widgets.WidgetId
Persons.PersonId
是否有优势/劣势前者相比后者?
我有表小工具和表人员SqlServer的身份命名约定
他们都包含标识列(种子)
什么是标识列推荐的命名约定?
是它 “id
”(两个表):
Widgets.Id
Persons.Id
或
Widgets.WidgetId
Persons.PersonId
是否有优势/劣势前者相比后者?
这是一个情况下我会去冗余并Thing.ThingID
否则,你有别名它到处当您加入
注:这是已经实现了死亡和超越 on:
Why is naming a table's Primary Key column “Id” considered bad practice?
对此的最佳做法是以表名称开头。
这会使您在加入您所指的SELECT
列表中的字段时更清晰。
这也使得意外不良JOIN
条件是不可能的,即
JOIN TableA ON ID = TableA.ID
作为一项规则,应避免跨表重复的字段名,除非它们代表相同的数据。
偶然的加入论点是一个很好的观点。当我加入时,我总是用我的牌来替换,但肯定有这种可能性。 – Icarus
在标识列中使用表名有点多余,但我觉得它有用且更具描述性,尤其是在执行外键连接时。例如,这似乎更好:
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列表中使用别名的需要。
此问题已在[程序员SE]之前提出过(http://programmers.stackexchange.com/questions/114728/why-is-naming-a-tables-primary-key-column-id-considered-bad-练习),不幸的是我不能将它发送到那里。这对Stack Overflow来说太广泛了。 –
@TimPost嗨,仍然不明白你为什么关闭它....我只是问了一个问题,因为我有一个困境......从来没有打算开始辩论...... –
@RoyiNamir它从来没有辩论。这是堆栈交换网络的工作原理。你没事。 – jcolebrand