我正在寻找建议或关于如何为以下关系建模的备选方案。建模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