2011-07-25 24 views
3

基於此問題的提問MySQL composite unique on FK'sFK的MySQL複合獨特

DB MySQL,存儲引擎:InnoDB。

我有一個表計劃:

  1. ID
  2. clubber_id(外鍵,俱樂部成員表)
  3. 事項標識(外鍵,事件表)

每個俱樂部會員只能創建每個活動一個計劃。 即clubber_id和event_id最好應該是唯一的組合鍵。

在clubber_id和event_id中創建這樣一個組合鍵有什麼意義。我已經有了外鍵,並且在我的業務邏輯中檢查了唯一性。

+0

**在我的業務邏輯中檢查了唯一性**沒有理由在您的數據庫設計中不執行此操作。告訴數據庫發生了什麼是一個好習慣,但如果您想知道它是否有助於提高性能,您可能需要對其進行測試。 – Nanne

+0

在許多情況下,這會提高性能。 – Karolis

回答

2

這不是一個真正的性能問題,但是在外鍵上定義一個唯一的組合鍵可以確保數據庫中存在唯一性。如果你這樣做,你可以跳過檢查你的業務邏輯(只要你能處理試圖添加重複的失敗情況)。一般來說,MySQL中的組合鍵唯一性驗證非常快,在數據庫中完成它通常不是一個性能問題,它可以通過刪除冗餘檢查來清理您的業務邏輯。從本質上講,執行這種唯一性檢查是數據庫領域中的事情;爲什麼不讓數據庫使用唯一性約束進行驗證?

+0

我使用ORM並可能切換數據庫或將數據移動到NoSQL(mongo)。 所以,我有點擔心刪除唯一性檢查的情況下,其他數據庫不會提供給我以下功能。 但是我明白你的觀點,謝謝! – iBiryukov