我正在尋找建議或關於如何爲以下關係建模的備選方案。建模ORM中的繼承類型之間的關係
考慮:
並表示關係的應用:
督軍先生有很多選擇,但是如果資源消失,他的選擇級聯式刪除。現在槍支和子彈都是資源。槍支可以使用多種子彈,(FMJ,HP,P +,爆炸?)。子彈也可以用於各種槍支(AK,M60,M14)。因此,我還想確保如果Bullet不再可用,上述的槍支關係將不再存在,反之亦然。
希望我的幻想的榜樣可以獲得沃爾沃斯的清晰畫面。
資源是抽象的。雖然它們存在於數據存儲中用於約束目的,但我永遠不會實例化一個通用資源。而且我可以有更多的類型(手杖,直升機,狼人......),每個類型都有不同的屬性。它們存在於第一種情況中,以避免ChoicesEned的多態外鍵情況。
您會注意到資源類型2不包含Set<Type1>
,而僅僅是對某些槍支的(Long)ResourceId
的引用。 (子彈不能攜帶槍支,即使情況相反,並且爲了爭辯,是的,這些神奇的槍支可以射出許多類型的子彈)。
爲什麼我有ID的集合,而不是對象?那麼,如果我添加一種類型的項目符號,向關聯表添加Id引用似乎更有效,而不是檢索槍支並向其添加項目符號對象。這樣,當我檢索一個槍支對象時,我也不會檢索它可能使用的所有子彈。 (所有這些對象的內存開銷較小,而不僅僅是一堆Ids)。
那麼究竟是什麼問題?:
1)這似乎並不像一個常見的模式。有沒有更好的方法來建模?
2.)我是一個使用引用而不是對象的OOP異端嗎?我應該只使用對象嗎?
我的主要問題
3)如果1和2都沒有的情況下,我怎麼能在JDO模型呢?我已經做了幾天的試驗,而且我所面臨的問題是,JDO似乎無法識別長期套件之間的關係。我找到的每個示例都顯示了Composition對象的使用,而不是M-N屬性引用。如果我沒有指定另一個持久對象,那麼似乎有一些混淆。持久對象的屬性似乎不起作用。
UPDATE:
我今天從DataNucleus將論壇收到答覆,Here is the thread 的問題涉及到我上面的問題#2。我試圖節省一些內存開銷是我的困難之源。
我無法在元素類型不是其他元素類型的集合之間建立關係,而無需其他持久性類別。我需要重新設計一點。
SOLUTION:
見下
我的答案我感謝大家的投入。
說資源只有一個共同的界面而沒有共同的存在是否準確?也就是說,永遠沒有理由將子彈和Perks列在一起。 – 2012-02-25 01:25:32
@MarkRobinson - 我可能不會關注,但是Perks的列表實際上只能用於指導「訪問」。我不會同時需要Bullets和Perks,而是從Perks列表中選擇資源,然後再檢索這些資源以便一起使用。這是否解決你的問題? – Sp3igel 2012-02-25 01:52:55
在這個設計中,我很難看到哪些資源帶到了桌子上。它在我看來像你需要一堆類型轉換來使用像這樣的資源。你能詳細解釋一下嗎?謝謝。 – 2012-02-25 08:45:54