2013-12-23 79 views
0

我需要創建一個表,其中存儲來自不同客戶端的'事件',每個事件都有一個event_id。 event_id對於特定的客戶端是唯一的,意味着可以將event_id(integer)和client(varchar)的組合作爲主鍵。我打算使用這張表作爲我的使用休眠的Java應用程序的數據提供者。用例將添加事件,更新事件和處理事件以生成報告。快速更新mysql數據庫主鍵的選擇

我想確保快速和準確的更新,這需要獲取確切的行並在休眠中更新它。

請指點我應該是主鍵:

  1. 使用事項標識和客戶端柱
  2. 創建AUTO_INCREMENT一個額外的id列創建一個primary_key和使用事項標識和客戶端
創建唯一索引

我很困惑是否用auto_increment列創建id

+2

首選非功能單列純技術自動生成的主鍵。 –

+0

@JB Nizet:在這種情況下,我需要把邏輯來決定一行是否存在或不在數據庫中。這不會減緩保存/更新過程嗎?假設我每分鐘得到1個事件,這意味着每天從一個客戶端獲得1440個事件,如果我有3個客戶端,行數將爲1440 * 3,則行數將在幾天/幾個月內快速增長。一旦我收到一個事件,我需要找出是否需要更新或保存我想決定一個表格結構,這使得插入/更新邏輯更簡單和快速?雖然我不確定製作組合鍵是否會帶來良好的表現? – girish

+0

event_id + client是否是主鍵不會改變任何內容:您必須檢查該行是否存在。性能取決於是否爲event_id +客戶端定義了索引。不是它是否是PK。 –

回答

0

基於來自JB Nizet評論

體型非功能性的,單柱,純粹的技術,自動生成的主鍵。 因爲您的應用程序的其餘部分將能夠通過單個數字ID引用客戶端事件,而不是兩個信息的組合,其中之一是文本。因爲如果稍後將第三個信息添加到事件的功能鍵,或者更改文本客戶端ID的值,則不必將具有外鍵的所有表都更改爲客戶端事件表。由於通過單列訪問事件,因此數字PK比通過複合文本訪問事件要快。因爲Hibernate映射和使用它的代碼將更容易編寫,等等。