gpt4 book ai didi

objective-c - 有效地记录某些核心数据关系的每次更改

转载 作者:行者123 更新时间:2023-12-03 17:36:49 25 4
gpt4 key购买 nike

我正在设计一个需要保留日期记录的核心数据应用程序。

想象一下用户使用该程序一段时间并存储了一些记录。然后,用户更改重要的属性和关系(超越单个记录),并继续使用具有此新配置的程序。现在想象一下,用户回顾第一条记录。我想以某种方式存储旧的配置,以便当用户查看任何给定的记录时,更改的数据(我重复一遍,超越单个记录)看起来就像写入记录时一样。 (请注意,需要记录的更改类型非常罕见。)

  1. 每次进行更改时,存储按日期归档的整个对象图的副本显然很糟糕(尽管它提供行为如果我上面的描述难以理解,我寻求)。

  2. 我考虑每次只存储更改的对象,并通过整理所有以前的时间段来导出任何给定记录的最新图表。 (如果是这种情况,我想知道如何跟踪一对多关系中对象的缺乏?我是否能够为 NSManagedObject 编写一些通用的东西,或者会我需要将此功能添加到每个相关实体吗?)

是否有更简单或更好的方法来进行这种与日期相关的数据存储?

最佳答案

由于您需要存储旧的关系以及单个对象,因此您实际上别无选择,只能以某种方式保存旧对象图的快照。

有多种选择:

(1) 如果更改很少且图很小,那么保存整个对象图的快照可能是最简单且最可靠的解决方案。为什么要为很少使用的功能增加复杂性?

(2) 对所有关系使用获取的关系。获取谓词将获取日期戳。这样做的缺点是复杂。您必须为每个关系配置一个提取,并且没有任何东西会自动起作用。上下文也不能轻松地强制图形完整性。

(3) 链接堆栈:每个实体都有一个前一个和一个下一个关系,指向其自身的前一个和下一个版本。当属性/关系更改时,新对象及其关系目标的新对象将被推送到各自的链接堆栈上。每次您进行更改时,这都会克隆图表的一大块。查找先前的图表只需遍历先前的关系,直到找到正确的日期。

(4) 关系实体:假设您有两个实体 AB 。通常,您只会拥有诸如 A<-->>B 之类的关系。 。但是,您需要保留旧的关系,因此您创建一个中间实体,其唯一任务是建模和跟踪 A 之间不断变化的关系。和B 。所以类似:

AlinkB {
dateStamp:Date;
a<-->>A.theBs;
b<<-->B.theA;
}

要查找以前的关系,您可以在关系中搜索正确的日期范围。您需要为每个实体创建一个自定义子类,以便自动管理链接实体的添加和遍历。

关于objective-c - 有效地记录某些核心数据关系的每次更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3295601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com