2014-05-15 34 views
1

我正在使用mySQL和Laravel。 我有兩個表:用戶和組。每個都有一個id字段和一個名稱字段。 我希望用戶能夠屬於多個組,反之亦然;所以我正在與一個聯結表建立多對多的關係:group_user。多對多關係的聯結表是否應具有代理主鍵?

我的第一個想法是它只需要兩個字段:user_id和group_id,都是外鍵。 但是,有些東西告訴我,我也可能需要/希望爲此表添加一個ID。我已經在互聯網上的代碼示例中看到了這兩種方式,我只是想知道沒有它會丟失什麼。

我只是想不出我會如何使用它;因爲表格只是關聯另外兩個表格。

+0

簡短的回答 - 是的,你想在那裏的PK。如果你沒有自己指定一個,InnoDB(假設你使用InnoDB)會創建一個隱藏的6字節整數PK(你將無法訪問)。爲什麼你想要一個PK有很多原因,他們通常不是應該如何做,而是如何在現實世界中運作。 –

+0

簡短的回答 - 沒有。它必須有一個PK。它不需要代理。但是,如果您確實使用代理,那麼最佳實踐建議一起形成自然(UNIQUE)密鑰。就我個人而言,如果您需要在其他一些環境中參考該鏈接,我認爲代理只有真正有用。如果您願意,我可以舉一個簡短的例子 - 但在這裏評論的時間可能太長。 – Strawberry

+0

我希望每個用戶/組對都是唯一的。複合鍵本質上也是獨一無二的?我這麼認爲,但不確定。將它作爲主鍵有意義嗎?它們將被user_id或者group_id查詢......所以這些應該以某種方式被索引,對吧? – Zuko

回答

1

人工主鍵有時候在你的代碼中非常有用。例如,當您想要刪除記錄時,可以使用與其他表格相同的模式。 您必須僅傳遞一個id而不是複合鍵的部分。

相關問題