【问题标题】:Database Structure to store multiple inheritance classes存储多个继承类的数据库结构
【发布时间】:2009-09-29 14:57:03
【问题描述】:

我有两个不同的(无继承)接口:
IInvestable 和 IPricable
和两个类:
IndexClass 和 FundClass
存储在我的数据库中的单独表中。

IndexClass 是 IPriceable
FundClass 是 IPriceable 和 IInvestable。

我需要一个表格来存储针对IndexClass 和FundClass 的价格
我需要一张表来存储 FundClasses 的投资。

一种方法可能是有两个表:Pricable 和 Investable,它们只有一个 ID 列。
然后在IndexClass上有一个外键:PricableID
FundClass 上还有两个外键:PricableID 和 InvestableID。

然后我的价格只需链接到PricableID,我的投资只需链接到InvestmentID,因为它们是独一无二的。

另外,我可以在 Price 表上设置 FundClassID 和 IndexClassID 列,但这似乎不可扩展,而且似乎很难使用。

然后让 NHibernate 弄清楚 - 我仍然不能 100% 确定它会喜欢它!

我真的在互联网上找不到任何关于存储多重继承的建议,我想知道是否有人对此有任何想法,或者他们过去是否解决过类似的问题?

谢谢

学习

【问题讨论】:

    标签: nhibernate database-design interface multiple-inheritance


    【解决方案1】:

    在这种情况下,我更倾向于组合而不是继承。例如,这些类可以是 PriceInfo 和 InvestmentInfo,而您的 IInvestable 和 IPricable 接口将包含这些类型的属性。

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

    PriceInfo
    ---------
    PriceInfoId
    [Other Stuff]
    
    InvestmentInfo
    --------------
    InvestmentInfoId
    [Other Stuff]
    
    IndexClass
    ---------
    IndexClassId
    PriceInfoId
    [Other Stuff]
    
    FundClass
    ---------
    FundClassId
    PriceInfoId
    InvestmentInfoId
    [Other Stuff]
    

    【讨论】:

    • 我仍然对如何将其存储在数据库中感到困惑,因为即使有 ID 为 10 的 FundClass 和 ID 的 IndexClass,我仍然需要某种方式将价格链接到特定实体10、我应该使用什么结构?
    • 外键。你仍然会有 FundClass 和 IndexClass 类。我假设 NHibernate 会将两者的 PriceInfo 和 InvestmentInfo 属性转换为外键。请参阅我的编辑以了解 DB 架构的外观。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-18
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 2012-08-16
      • 2019-08-20
      • 2015-06-20
      • 1970-01-01
      相关资源
      最近更新 更多