我正在爲報告創建一個簡單的數據庫應用程序。根據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