我有表小工具和表人員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