【发布时间】:2012-02-20 23:37:21
【问题描述】:
需要关于几个实体及其关系以及整个处理方法的建议。一段时间后,当您真正尝试使某些东西变得真实时,那里的许多核心数据教程和示例似乎很简单!..因此问题是:
我需要知道方法以及我所做的是否可行。假设用户创建了他的个人资料并开始整理名片。从一开始,假设该应用程序能够处理许多用户。
型号: 实体:
1-用户 2卡组 三张牌 4-条目
现在这是四个实体。 User 是添加的用户列表,每个用户都持有自己的一组卡片。这只是使用设备(应用程序)的用户,而不是正在存储的实际名片列表。例如,一个用户是我,我有一堆名片在这个应用程序中整理。这个实体“用户”不会持有印在名片上的姓名,.. 希望你明白这一点。
实体卡,持有名片列表。这是实际将数据保存到卡中的主要部分。
CardGroup,这是智能组。用户可以向其中添加类别,例如“Wallstreet”作为一个组,另一个可以是“Silicon valley”,他们可以是“UniversityMen”或只是“Laydees”。
条目有点像卡片的复制品,假设那个人随着时间的推移有 5 个不同的工作,这个条目只包含卡片的那些随着时间而改变的方面。可以说是跟踪器..
我想弄清楚这里的关系..
1- 用户>卡组 一个用户可以有多个卡片组 - Wallstreet、SiliconValley、MyCity、WorkPlace
2- CardGroup >CardDude 每个 cardGroup 可以容纳一堆 biz 卡。 CardDude 可以是 WallStreet 和/或 MyCity 的一部分,这是否相同..? 此外,华尔街可以容纳许多卡片。 我很困惑这是多对多关系还是一对多关系 CardGroup > CardDude
这让我意识到英语不是我的第一语言。
3。 用户只能知道 One CardDude 对吗?让我们叫他们杰森,显然不能有很多有点杰森。?它必须只有一个。 因为这种关系是 用户CardDude 一对一。 我什至不确定这里..
另外,如果我父亲是这个应用程序的另一个用户(他的名字在第一个实体“用户”中),那么他可能有他的 CardDude Jason 副本。是的,我愿意这样做是有原因的。嗯.. 所以最后,我和我爸爸都有他们的杰森在 CardDude。如果我将 Jason 修改为用户,那么它应该反映在其他 CardGroup 上,例如wallstreet、silicon,而不是我父亲的用户整体上,这应该保持不变(假设他之前创建了一个类似的)。
再次,我不确定现在的关系是什么.. 用户 CardDude
这里的借口是,当添加卡片时,这应该为用户只发生一次,并且不能让用户多次添加同一个卡片,如果不同的用户正在添加,他可以。
这是更大的难题, 现在我想将最新信息添加到 CardDude, 我称之为入口。它所做的只是创建一个时间戳,并添加一个 CardDude Jason 的条目,关于他可能拥有的一张新卡。可以说是一份新工作。
我想查看每个组.. 用 sql 术语,
选择 ENTRY.name ENTRY WHERE USER = ME AND CARDGROUP = WALLSTREET
I thot I'd have
CardGroup(WallStreet) <----------->>CardDude (Jason) and some more<----------->>Entry
在哪里,用户(我)CardDude(杰森)
USER<-------------->>CardGroup to many
USER<--------------->CardDude (onetoone)
USER<--------------->>Entry (to many)
CardGroup<------------>>CardDude
CardDude<------------->>Entry (tomany) can tell me how many last cards did Jason get..
请指导我如何在此处获得清晰的图片,而且由于每个用户只能与 CardDude 有一个关系,我将如何避免输入重复的类似条目.. 另一点是,我父亲的用户会重新创建整个卡片组、卡片和条目。他们非常独立。
谢谢各位,这是一个很长的问题..
更新:在回答之后,我明白了很多事情,现在还剩下一件事,这是从 CardGroup 到 CardGroup 中的 CardEntry(包括所有 CardPerson)的理想方式。 . 现在我只是在迭代,但必须有更好的方法来获取所有这些 CardEntries。
//cardGroupFriends is a CardGroup object
for(CardPerson *person in [cardGroupFriends persons]){
for(CardEntry *entry in [person entries]){
NSLog(@"%@ = %@", person.name, entry.company);
}
}
我只是忍不住通过 sqlite 路由来解决这个问题。但我越来越喜欢核心数据了!它实际上使事情变得非常简单。 我正在考虑 NSFetchedResultsController 从 CardGroups 获取 CardEntries,绕过 CardPerson 实体(假设我正在获取 CardGroups 中的所有 CardPersons)并使用时间戳作为排序顺序获取 CardEntries。
据我了解..当我添加新的 CardEntry 时,我只是在使用
[cardPerson addCardEntryObject:newEntry];
是否理解这个“newEntry”是 CardPerson-->then CardGroup-->Current -User 的一部分?假设在应用启动时选择了一个用户并且 cardGroups 是从那里派生的?核心数据能解决这个问题吗?当应用程序切换用户并选择相同的 CardPerson 时,我不希望这个 newEntry 出现! 非常感谢您的帮助
【问题讨论】:
标签: iphone objective-c xcode cocoa-touch core-data