爲什麼拒絕組合鍵有利於使用名爲id的單個主鍵的所有表?因爲通常所有的ORM都遵循這一點。爲什麼單個主鍵優於組合鍵?
編輯
我剛開始在軌道上,並通過務實的書敏捷開發的學習Ruby有一行:--- Rails的真不工作也很好,除非每個表都有一個數字首要的關鍵。對列的名稱不那麼挑剔。 我在學習教義時讀到的同一種線條。
EDIT2 請檢查此鏈接。我越來越感到困惑這事--- Composite primary keys versus unique object ID field
從上面的鏈接: -
*主鍵應該是恆定的,毫無意義;非代理鍵通常會失敗一個或兩個要求,最終
如果密鑰不是恆定的,那麼將來的更新問題可能會變得非常複雜 如果密鑰沒有意義,那麼它更有可能發生更改,即不是恆定的;見上面
以一個簡單的常見示例:一個庫存項目表。將物品編號(SKU編號,條形碼,零件代碼或其他)作爲主鍵可能會很誘人,但一年後所有物品編號都會發生變化,並且會留下一個非常混亂的更新 - 整體 - 數據庫問題...
編輯:還有一個問題比哲學更實用。在很多情況下,你會以某種方式找到特定的行,然後再更新它或再次找到它(或兩者)。使用組合鍵時,需要跟蹤更多的數據並在WHERE子句中使用更多的約束來重新查找或更新(或刪除)。其中一個關鍵細分也可能在此期間發生變化!與代理鍵,總有隻有一個保留(替代ID)和根據定義,它不能改變,這顯著簡化了的情況的值。*
請引用你的來源?我同時使用:複合鍵和基於序列的ID主鍵。有時候一個比另一個更合適。 – FrustratedWithFormsDesigner 2010-04-19 14:08:52
你在使用哪個ORM,它總是使用複合鍵上的簡單鍵?我從來沒有遇到過使用組合鍵不能很好地發揮作用的ORM。據我所知,沒有很好的理由給例如一個聯結表是它自己的代理鍵。 – 2010-04-19 15:42:42
@FrustratedWithFormsDesigner @Iain Galloway 我在學習Doctrine的同時閱讀了這篇文章,現在我在rails上學習Ruby時遇到了同樣的情況。 讓我知道如果你想要的書的確切頁碼在哪裏寫這行。我是初學者所以我要求真實的東西。不要在此問題上交叉提問或辯論。意味着他們爲什麼使用這個ID字段。 ?? – 2010-04-20 13:28:13