用于存储多个继承类的数据库结构

时间:2009-09-29 14:57:03

标签: nhibernate database-design interface multiple-inheritance

我有两个不同的(没有继承)接口:
IInvestableIPricable
和两个班:
IndexClassFundClass
存储在我的数据库中的单独表格中。

IndexClassIPriceable
FundClassIPriceableIInvestable

我需要一张表来存储IndexClassFundClass的价格 我需要一张表来存储FundClasses投资的内容。

一种方法可能是拥有两个表:PricableInvestable,它们只有一个ID列。
然后在IndexClass上设置一个外键:PricableID
FundClass上还有两个外键:PricableIDInvestableID

然后我的价格只是链接到PricableID,我的投资只是链接到InvestmentID,因为这些将是唯一的。

另外,我可以在Price表上有FundClassIDIndexClassID列,但这似乎不具备可扩展性,似乎很难处理。

然后让NHibernate搞清楚 - 我仍然不是100%肯定它会喜欢!

我无法在互联网上找到任何关于存储多重继承的建议,并想知道是否有人对此有任何想法,或者他们过去是否处理过类似事情?

由于

斯图

2 个答案:

答案 0 :(得分:0)

在这种情况下,我赞成合成而不是继承。例如,这些类可能是PriceInfo和InvestmentInfo,您的IInvestable和IPricable接口将包含这些类型的属性。

编辑:生成的数据库架构如下所示:

PriceInfo
---------
PriceInfoId
[Other Stuff]

InvestmentInfo
--------------
InvestmentInfoId
[Other Stuff]

IndexClass
---------
IndexClassId
PriceInfoId
[Other Stuff]

FundClass
---------
FundClassId
PriceInfoId
InvestmentInfoId
[Other Stuff]

答案 1 :(得分:0)

所以我最终得到了以下结构:

FundClass:FundClassID(etc)
FundClassReturn:FundClassID,ReturnID
IndexClass:IndexClassID(etc)
IndexClassReturn:IndexClassID,ReturnID
返回:ReturnID(等)

然后我只是在NHibernate映射文件中对它进行排序。我试图过于老式,并使其过于以数据库为中心。无论如何,我所拥有的一切都被写入接口,所以我只是查询接口,让NHibernate用内在的多态来处理其余部分。像魅力一样工作!

感谢您的帮助 - 这激发了对最终解决方案的想法。