我最近遇到了一個相當複雜的問題,並經過四處尋找,我無法找到解決方案。我在stackoverflow.com上找到了很多次我的問題的答案,所以我決定在這裏發帖。帶兩個外鍵的2列表。性能/設計問題
因此,我正在爲基於Web的項目製作用戶/組管理系統,並將所有相關數據存儲到PostgreSQL數據庫中。此係統依靠三個表:
- USERS(包含主鍵 「USER_ID」)
- 基(包含主鍵 「GROUP_ID」)
- GROUP_USERS
兩個第一表只需定義站點上的所有用戶和所有組,並且最後一個表GROUP_USERS存儲每個用戶所屬的組。它只有兩列:
- USER_ID
- GROUP_ID
由於每個用戶都可以是多個組的成員,我決定做一個單獨的表用於此目的,而不是存儲逗號在USERS表中分隔列。
現在,這兩列都是外鍵,我也想讓它們成爲一個組合主鍵,因爲USER_ID和GROUP_ID的每個組合都必須是唯一的。但是現在我被困在似乎只有很多索引和關係的很小的表中,其中只包含數字。最後,我希望這個表儘可能快,即使包含數萬行。磁盤上的大小不應該是一個問題,因爲它只是所有的數字,但它感覺非常愚蠢的全尺寸索引引用一個較小的表。
我應該堅持我目前的解決方案,存儲逗號分隔值列在用戶表或有任何其他的解決辦法,我應該知道的。我在尋找的是最好的表現。此表可能(但不太可能或通常)在單個頁面加載時被查詢數百次。
我不想使用數組列,即使它們被postgreSQL支持。我希望儘可能通用,以便稍後可以切換數據庫(如有必要)。
編輯:換句話說,將使用複合主鍵,並且在一個表中的兩個外鍵僅具有兩個列已而不是相反對性能有負面影響,由於所生成的索引的大小?
編輯2:澄清。
謝謝!
我已按照您的建議設置了表格。我相信我很可能會檢查用戶是否在某個特定組中,而不是相反。 您的回覆讓我感到更加自信,我現在正以正確的方式進行,所以我正在考慮回答這個問題。 再次謝謝你。 – Emanuel 2010-06-12 22:25:45