回答
這都是個人喜好。我個人使用Id
只是因爲我認爲每個表作爲它自己的實體...然後當我用一個鍵引用時,它將變成CustomerId或OrderId,具體取決於表的名稱。
當您將每個表的主鍵命名爲「id」時,某些ORM工作「更好」。
使用'id'的優點是你有一個統一的字段,並且很容易記住和鍵入。
使用表名前綴id的優點在於,當頻繁使用多個表時,使用起來更容易。
cid似乎是三個選項中最差的一個,沒有其他兩個的好處。
主觀的,但我喜歡用命名的IDS(如CUSTOMER_ID,ITEM_ID等)
我的理由是,如果你的名字你外鍵始終如一它使連接更容易理解 - 它總是a.customer_id = b.customer_id。否則,對於使用大量連接的複雜查詢,您將擁有大量「id」列,並且它不會立即顯示出什麼結果。
ETA:
此外,如果你正在使用MySQL,你可以使用更簡單的聯接語法,如:
FROM customers INNER JOIN orders USING customer_id
如果你的表沒有被命名爲「a」和「b」,那麼不是真正的問題; Order.CustomerID = Customer.ID說同樣的事情,並有較少的冗餘...... – 2010-01-08 14:37:08
@Chris - true,但是當在大型查詢中混疊表名時,事情可能會變得混亂。它也作爲一個健全的檢查,以確保你沒有加入到錯誤的桌子。 – 2010-01-08 14:51:11
@EricPetroelje我只有很糟糕的經驗,因爲開發人員傾向於使用像iis這樣的真正糟糕的別名,只要我看到這個約定就是爲了避免這種方法產生的冗餘。 – Anther 2013-03-15 19:19:03
的第一個決定就是「身份證」或沒有,它是由驅動工具,它的操控性的SQL:
- ORM:有些人喜歡「身份證」
- 本地SQL:最好使用比ID更具體的東西,使人類寫SQL d不必總是以表別名作爲前綴。通過消除對別名的需求,您可以顯着縮小SQL的大小,並同時消除大量錯誤。
第二項決定,如果你使用的是需要「身份證」的ORM,就是:
- 你可以只是ORM約束去所有列名
- 或者你也可以命名列的人類,並創建一個單獨的視圖,將列重命名爲ORM想要的內容。這是一個工作,但如果你不僅僅是ORM查看錶(報表工具,其他ORM等),它可能是值得的。
或第二的決定,如果你不使用「身份證」,是 - 如何在關係數據庫中建立的名字:
- 你通常沒有的情況下使用 - 這樣駝峯等不工作
- 你要避免命名衝突
- 你想的名字是有點直觀,而無需知道表名
- 你想被大家一致的格式名稱
- 所以,cid不是很好。 cache_id是最好的。
其他一些人已經指出:這實際上是個人偏好。
我更多的還是堅持少去了第三種方法(表foo將得到id列「foo_id」),但真的不能告訴你爲什麼;-)
第一計算策略IST,你可以重命名的優點你表,而無需重命名您的ID列以反映更改。但是,這並不是一個使它成爲教條的理由。
本地SQL:最好使用比ID更具體的東西,使人類編寫SQL並不總是有一個表的別名前綴。通過消除對別名的需求,您可以顯着縮小SQL的大小,並同時消除大量錯誤。
加前綴,即使有一個表名,沒有比一個更具體列名多個字符:
customer.id customer_id
在不同的音符,因爲外鍵列引用的表,爲什麼不使用表的名稱作爲外鍵?
table order ( id SERIAL PRIMARY KEY, customer INTEGER NOT NULL REFERENCES (customer) ...
然後我們有:
FROM customer INNER JOIN order ON customer.id = order.customer
- 1. 命名MYSQL id列
- 2. SQL列命名
- 3. Oracle SQL列命名
- 4. 重命名默認ID列
- 5. Grails命名id列錯誤
- 6. PHP重命名文件,這個SQL ID
- 7. 重命名SQL中的列
- 8. LINQ to SQL中 - 重命名列名
- 9. 使用ember-data命名id列
- 10. laravel 5主鍵列未命名id
- 11. 在ldply中重命名.id列
- 12. 重命名大ID
- 13. SQL - GROUPING,ID,名稱
- 14. SQL CONCAT命名
- 15. 命名的列重命名
- 16. 問題在SQL Server中重命名列
- 17. Microsoft SQL Compact Edition重命名列
- 18. 使用jdbc在sql中重命名列
- 19. 重命名SQL Server中的列
- 20. SQL連接與重命名列
- 21. orientdb與SQL語法重命名列
- 22. 重命名所有表中的列 - SQL
- 23. 的Oracle SQL - 命名的情況下,列
- 24. 重命名MS SQL Server 2005中的列
- 25. 重命名SQL表的列與表
- 26. 在excel中命名列複雜sql
- 27. Groovy的SQL命名列表參數
- 28. SQL服務器 - 重命名列
- 29. 在Python SQL表重命名列
- 30. SQL連接和命名加入列
我用同樣的方法,因爲賈斯汀,所以查詢看起來像: Customer.ID或Order.ID – Sparky 2010-01-08 14:27:47
有些人喜歡用自然連接,這將不適用於此計劃。然而,由於魔鬼的工作是自然而然的,所以任何使它更難使用的命名約定可能是件好事。 – APC 2010-01-08 14:53:00
IME,當你有多個id(例如外鍵)時,這個約定會崩潰,因爲你不知道'id'代表了什麼。數據類型不會幫助,所以你必須看看密鑰才能知道什麼是 – 2010-01-08 15:54:05