【问题标题】:How to model core-data relationship, one-to-one or one-to-many?如何建模核心数据关系,一对一还是一对多?
【发布时间】:2010-09-28 06:53:58
【问题描述】:

我有客户对象和贷款对象。这是一对多的关系(客户>贷款)。每笔贷款都有 5 种类型的还款计划(正好 5 种,并且在未来 100 年内不会改变)供客户选择并查看付款预测。每个支付计划包括类型、初始支付、每月支付、利息、分期付款、总支付、总利息和支付日期。对 Payoff 对象建模的最佳方法是什么?

选项 1:

每个 Loan 与 Payoff 对象有五种关系,表示五种不同的支付计划。即在 Loan 对象内部,payoffPlanA、payoffPlanB、payoffPlanC、payoffPlanD、payoffPlanE 到 Payoff 对象有 5 个关系。

选项 2:

每笔贷款都有一对多的关系(贷款> Payoff)。为了获得特定的 Payoff 计划,应用程序将从 Payoff 对象列表中检查 Payoff 对象的类型属性。例如,为了让应用显示 Payoff Plan C 的内容,应用需要遍历贷款的 Payoff 对象列表并检查类型是否为 Plan C,然后检索详细信息。

还有其他选择吗?谢谢

【问题讨论】:

  • 一个贷款实体是否必须与五个不同的实体有关系,或者它是否与另一个可以假设从五个不同实体中选择一种类型的实体相关?
  • 贷款必须与5个计划相关,因为客户可以从一个计划中选择另一个计划作为他们的首选计划,并且需要查看5个计划的详细信息以进行定期审查。

标签: objective-c core-data entity-relationship


【解决方案1】:

在我看来,收益计划实际上并不是数据。它们听起来像是对CustomerLoan 对象提供的数据进行操作的逻辑块。换句话说,这五种计划类型的逻辑都是通用的,只有提供的数据会产生不同的输出。

如果是这样,那么您可能不需要或不想要代表支付计划的核心数据实体。相反,您应该创建普通的,即非托管对象,接受具有接受 CustomerLoan 对象作为输入的方法。如有必要,您可以将它们附加到 CustomerLoan 类的非托管属性(未出现在实体中的属性)。

如果支付计划实际上是数据并且在对象图中是唯一的,那么选择 (2) 是最好的。

【讨论】:

  • 谢谢!将审查设计,看看哪个是合适的。
【解决方案2】:

我会选择选项 2,但如果您希望设计更灵活一点,我认为选项 3 应该是这样的:

选项 3: 客户>贷款>PayOffPayOffType

使用选项 3,如果新的 PayOffTypes 在 100 年后出现或发生变化,您不必更改架构。

【讨论】:

    【解决方案3】:

    不要使用选项 1。

    一旦您拥有诸如 PayOffPlanA - ..F 之类的字段,您就会遇到麻烦。报告、维护查询等讨厌这种非规范化,只会让你头疼和额外的工作。

    再多一个对象/表格就没有缺点了。您可以使用触发器或存储过程将所选计划非规范化到贷款中,但这实际上只是为了炫耀。你的 payofftype-table 不大,也没有更新,所以它在 db-cache 中。

    (永远不要说永远,甚至 100 年都不会——生活就是改变)

    ATB //汤姆乔德

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 2011-03-30
      • 2021-06-10
      • 2013-06-05
      相关资源
      最近更新 更多