資料庫設計 – 為什麼單個主鍵比複合鍵更好?
為什麼使用名為id的單個主鍵拒絕複合鍵來支援所有表.原因一般所有ORM都遵循這個.. ???
編輯
我剛剛開始在軌道上學習紅寶石,在敏捷開朗的書中,務實地有一行:
除非每個表都有數字主鍵,否則Rails實際上不會很好.對列的名稱不那麼吝嗇.
當我學習學說時,我讀到的那種線條.
EDIT2
請檢查這個連結.我越來越困惑這個事情:—
ofollow,noindex" target="_blank">Composite primary keys versus unique object ID field從以上鍊接: –
*主鍵應該是恆定和無意義的;非代理鍵通常會失敗一個或兩個要求,最終
如果金鑰不是恆定的,您將有一個可能會變得相當複雜的未來更新問題
如果關鍵是沒有意義的,那麼它更有可能改變,即不是恆定的;往上看
拿一個簡單的常見例子:一個庫存專案表.將專案編號(sku號,條形碼,部件程式碼或其他)作為主鍵可能很誘人,但是一年後,所有的專案編號都會更改,而且您會留下一個非常混亂的更新 – 資料庫問題…
編輯:還有一個比哲學更實際的問題.在許多情況下,您將要找到一個特定的行,然後更新它或再次找到(或兩者).使用複合鍵,有更多的資料可以跟蹤WHERE子句中的更多和更多的約束,用於重新查詢或更新(或刪除).同時有可能其中一個關鍵細分可能發生變化!使用代理鍵,總是隻保留一個值(代理ID),並且根據定義,它不能改變,這樣可以顯著簡化情況.
我不認為只有一個名為id的主鍵才能使用一個總括語句.
大多數人使用代理主鍵作為自動生成int,因為它隔離主鍵以免需要更改,就像您將PK設為使用者名稱,稍後更改其法定名稱.您將必須更新PK和所有FK列以反映新名稱.如果您使用代理主鍵,則只需在一個位置更新使用者的名稱(因為表中的表不是加入名稱).
主鍵的大小很重要,因為PK被複制到您在表上構建的每個索引中.如果PK很大(像一個字串),索引中的每個頁面的鍵數就會減少,索引將會佔用更多的快取來儲存它. Ints很小
擁有自動遞增int PK可以很好地將其作為一個聚簇索引,因為按照這個順序儲存行,並且不需要返回並且不能排除插入新行的行,所以總是新增到表的結尾.
程式碼日誌版權宣告:
翻譯自:http://stackoverflow.com/questions/2667988/why-single-primary-key-is-better-than-composite-keys