我正在为报告创建一个简单的数据库应用程序。根据DB设计理论,您不应该两次存储相同的信息。这对大多数数据库应用程序都有意义,但我需要一些可以简单地选择一个通用主题的方法,然后可以保持通用主题的新实例副本不变或更改信息,但通用主题不应该通过修改实例来修改复制,但需要在原始主题和主题的实例副本之间跟踪关系。数据库设计困境
令人困惑,我知道。这里有一个图表,可以帮助:
我需要的报告基于关闭的情况是不可变的或可变的。
一个简单的例子是你选择一个客户,然后你完成你的报告。一个月后,客户的电话号码会发生变化,因此您需要更新数据库的客户部分,但您不想提取完成的报告,并将新的信息更新到已完成的报告中。
这种情况下最优雅的解决方案是什么?
这可能工作:
但是利用这种方法我会用循环语句发现自己和if语句来识别通用之间的关系,经过关和报告。
for (NSManagedObject *managedObject in checkedOffTaskObjects) {
if ([[reportObject valueForKeyPath:@"tasks"] containsObject:managedObject]) {
if ([[managedObject valueForKeyPath:@"tasks"] containsObject:genericTaskObjectAtIndexPath]) {
cell.backgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cellbackground.png"]] autorelease];
}
}
}
我知道存在更好的解决方案,但我看不到它。
谢谢你的时间。
在你的示例代码中,我把它的意思是“在checkedOffTaskObjectS”(复数,小写)?如果你用大写字母编写ivars,因为它们看起来像类,这很让人困惑。 – occulus 2011-03-31 18:35:40
并应该@“任务”是@“任务”?多数人的错误使得你很难理解你在做什么,你能修正你的代码示例吗? – occulus 2011-03-31 18:41:35
在你的示例代码中,达到“...”意味着什么?您正在检查的检出的任务对象是否在当前的报告中,并且这是一个通用任务? – occulus 2011-03-31 18:49:54