【问题标题】:Designing a Core Data model to remember previous object states设计一个核心数据模型来记住以前的对象状态
【发布时间】:2018-01-31 10:43:24
【问题描述】:

假设我们有一个简单的 Core Data 模型来跟踪一群客户进行的交易,但出于某种原因,当我们查看交易时,我们想知道交易发生时客户的地址。

如果客户更改地址,存储客户旧状态的最佳方式是什么?

一种方法可能是将客户的地址存储在交易中,但这不适用于多对多关系,例如如果之前交易中多个产品的价格发生了变化,我们将如何记录?

另一种选择是只复制对象,但是我们需要一些方法来知道哪个是当前对象。创建与交易和客户/产品相关的中介实体会更好吗?

【问题讨论】:

  • 我认为在事务中保存address 是正确的方法,我不明白你的意思。通常一笔交易与一个具体地址相关,客户可能有多个地址,但交易仍应与一个地址相关。
  • @Gonzalo 当然,但是产品价格示例呢,哪里有多个产品?
  • 所以,你真正的问题是产品价格,因为地址可以这样解决。在关系模型中,您可以像历史一样保存对产品的每一次更改,并且交易将引用历史。我没有做过类似的事情,但我想到的是在无关系模型中进行交易。
  • @Gonzalo 你能在答案中提供更多细节吗?

标签: ios design-patterns core-data database-design


【解决方案1】:

根据您的描述,我可能会这样做:

  • 每个Customer 都有一个Address
  • 每个Transaction 都有一个Address
  • 如果Customer 得到一个新的Address,这不会影响任何现有的TransactionAddress
  • 您始终可以找到某个地址的所有交易,或任何交易的地址,即使客户地址发生变化。
  • 如有必要,您可以通过查看客户的交易来获取客户的所有地址,并获取这些地址。如果需要,您还可以添加从 CustomerAddresspastAddresses 关系。

【讨论】:

  • 这就是我所倾向于的。但是产品价格变化的情况呢?您会创建类似 ProductOrder 实体的东西,它存储与产品相关的价格和数量,并且只在交易中列出这些对象的列表吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
相关资源
最近更新 更多