我的數據庫有兩個表,「問題」和「字段」。問題可能有很多領域,而領域可能有很多領域。它是一個具有特殊根節點的樹。休眠,SQL和遞歸關聯
我想用它們與hibernate(目前potgresql) - 所以它應該是簡單易用的使用它從Java。
這是最好的解決方案是什麼?
- 將question_parent_id和field_parent_id添加到「字段」表中,並且只有在它是它的直接後代時才使用question_parent_id。 (檢查異或SQL約束...可能依賴於SQL服務器)
- 添加question_parent_id和field_parent_id,並始終使用question_parent_id。記住要保持一致...(question_id不應該改變,可能不是真正的風險)
- 使用postgresql特定的表繼承:「question」和「field」擴展了「content」,所以一個外鍵列就足夠了。對「問題」和「字段」使用額外的限制。
- 使用第三個表(稱爲「容器」),只包含一個id。容器可能有很多領域,並且一個領域可能有一個容器。問題可能存在一個容器。但是這需要在Java中的額外代碼,並具有無限循環的風險,即使在field_container_id的唯一鍵...
我在回答中添加了更多段落。你需要提供一些更具體的信息來獲得具體的答案。 (想想問一個新的問題,如果你發現一些特定的要求。) – 2010-07-06 23:08:13