我正在設計一個數據庫(用於mysql),允許新的用戶定義屬性到一個名爲節點的實體。數據庫設計 - 自定義屬性表 - 與「相關」實體表
爲了實現這一點,我創建了2個其他表。一個customvars表中包含所有自定義屬性和一個* nodes_customvars *,這些屬性定義了節點和customvars之間的關係,創建1..n和n..1的關係。
這裏是他鏈接到drawed型號:Sketched database model
到目前爲止好......但我不能夠正確處理使用單獨的ID爲每個表INSERT和UPDATE。
例如,如果我有一個自定義屬性,叫做顏色在* nodes_customvars *表插入特定節點,如果我嘗試「INSERT ... ON DUPLICATE KEY UPDATE」要麼總是插入或者總是更新。
我鑫卡特從* nodes_customvars *表中刪除了「ID」字段,並使用節點ID和customvarsID使它成爲一個複合鍵,但我不知道這是我讀過的最好的解決辦法...
這篇文章,評論,還有:http://weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.aspx
什麼是對此最好的解決方案?
編輯:
補全:我不知道* nodes_customvars * ID,只有節點ID和customvarsID。分析* nodes_customvars *表:
1 - 如果我讓節點ID和/或customvarsID UNIQUE在此表中,使用 「INSERT ... ON DUPLICATE KEY UPDATE」 會隨時更新。由於多個節點可以共享相同的customvar,這是錯誤的;
2 - 如果我不作任何UNIQUE鍵, 「INSERT ... ON DUPLICATE KEY UPDATE」 總是插入,因爲沒有唯一密鑰在聲明中已經找到......
nodes_customvars描述節點和customvars之間的多對多的關係。所以在技術上node_customvars PK應該是一個複合關鍵 – SyntaxGoonoo