2012-01-28 64 views
0

需要关于一对实体及其关系和整个方法的建议。很多核心数据教程和示例在那里看起来很简单,但实际上你试图让某些东西变得真实!因此,问题是:复杂的核心数据关系混乱

我需要知道该方法,如果我所做的是好的..让我们说一个用户创建他的个人资料,并开始组织名片。从一开始,让我们说这个应用程序能够处理很多用户。

的型号: 实体:

1-用户 2- CardGroup 3卡 4-条目

现在这些是四个实体。 用户是添加的用户列表,每个用户拥有自己的一组卡。这仅仅是用户使用该设备(应用程序)而不是人员实际商业名单的名单正在存储。例如,用户将是我,并且我有一堆名片躺在这个应用程序组织。这个实体'用户'不会持有印在名片上的名字,..希望你明白这一点。

实体卡,持有名片清单。这实际上是将数据保存到卡上的主要部分。

CardGroup,这是一个智能群体。用户可以将类似于“Wallstreet”的类别添加为一个组,另一个可以是“Silicon Valley”,他们可以是“UniversityMen”或“Laydees”。

条目是有点像卡片的副本,可以说随着时间的推移,这家伙有5个不同的工作,这个条目只是持有卡随时间变化的那些方面。跟踪器可以这么说..

我想弄清楚这里的关系..

1 - 用户< ----------------- >> CardGroup 一个用户可以有多个卡组 - Wallstreet,SiliconValley,MyCity,WorkPlace

2- CardGroup < ------------ >> CardDude 每个cardGroup可以容纳一堆biz卡。 CardDude可以成为WallStreet和/或MyCity的一部分,它说的是相同的..?另外,Wallstreet可以容纳很多卡片。 林混淆whther这是一个许多一对多关系或者一个一对多 CardGroup < < ------------- >> CardDude

这是使我认识到,英语不是我的第一语言。

3. 用户只能知道一个CardDude的权利吗?让我们打电话给杰森,显然不能有许多杰森。它只能是一个。 而这种关系的因素是 用户< ----------------> CardDude一对一。另外,如果我父亲是这个应用程序中的另一个用户(他的名字在第一个实体“User”中),那么他可能有他的CardDude Jason副本。是的,我愿意这样做的原因。最后,我和我的父亲都在CardDude中拥有自己的Jason。如果我以用户身份修改Jason,那么它应该反映在其他CardGroups,如wallstreet,silicon,但不在我父亲的User entires上,应该保持不变(假设他之前创建了一个类似的)。

同样,林不知道现在什么关系.. 用户< ------------------> CardDude

这里的借口是,当添加carddude,这只会对USER发生一次,并且不会让USER多次添加相同的CARDUDE,如果不同的USER正在添加,他可以。

继承人更大的拼图, 现在我wana添加最新的信息,该CardDude, 我叫它入口。它所要做的就是创建一个timeStamp,并添加一张CardDude Jason的条目,关于他可能拥有的一张新卡片。可以这么说。

我愿意看到每个组。在SQL方面,

选择ENTRY.name条目,其中USER = ME AND CARDGROUP =华尔街

 I thot I'd have 
    CardGroup(WallStreet) <----------->>CardDude (Jason) and some more<----------->>Entry 

WHERE,用户(我)< ------------> 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关系,怎么会我避免ID放在一个重复的类似条目.. 另一点是,我爸的用户会重新创建整个cardgroups,carddude和条目。他们相当独立。

谢谢你们,这是一个looong问题..

UPDATE:答案后,我明白了很多东西,现在有一件事是,它的他们理想的方式从CardGroup得到CardEntry(其将包括CardPerson的所有CardPerson)...现在我只是迭代,但是这些都是获得所有CardEntry的更好方法。

//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)并使用timeStamp作为排序顺序获取CardEntries。

而对我的理解。当林添加新的CardEntry,我只是用

[cardPerson addCardEntryObject:newEntry]; 

是否了解,这个“newEntry”是部分CardPerson - >然后CardGroup - >电流 - 用户??假设在应用程序启动时选择了用户,并且CardGroups是从那里派生的?核心数据是否考虑到了这一点?我不希望这个newEntry出现时,应用程序切换用户,并选择相同的CardPerson! 真的很感谢你的帮助

回答

1

首先。

我希望看到每一个组中。在SQL方面

停止这样做。核心数据不是sql。


您的核心数据模型其实并不复杂。你可能在过度思考。

如果我创建了一个核心数据模型,它可以帮助我用现实世界的术语思考。

所以你有一个用户(谁使用自己的物理卡盒)。此框有组(复数!=对多)。但是每个组只有一个卡盒(与单个用户的反向关系)。
这些群体中的每一个都有很多人(复数)。接下来的事情在现实世界的卡片盒里是不可能的,但是每个人都可以在许多群体中(反向关系,多对多)。
最后,您想要存储多张(至多)名片。但是,每个名片只能属于一个人(反向关系,单)

你最终的东西是这样的:

enter image description here


那么如何避免CardPersons的重复条目?

手动。
通常,您没有足够的业务联系人信息来区分具有相同名称的人。
也许你认识两个名叫杰森史密斯的人。对他们来说是一个iOS开发者,另一个是农民。 您可能不希望将它们存储为同一个人。
但很可能你对这个人不太了解。你知道他们的名字和姓氏。通常就是这样。如果你知道例如出生日期和出生地点,你可以自动区分这两个人。但是由于您没有这些信息,您必须询问用户该新名片是否属于名为Jason Smith的现有用户。

+0

你是真棒!.. 感谢您抽出时间出来的人。我觉得我理解的东西在这里..虽然 一件事,那里有用户和CardPerson没有关系? – user134611 2012-01-28 05:48:11

+0

And ..最后一件事, – user134611 2012-01-28 06:05:22

+0

And ..最后一件事,我假设在获取CardGroups时,我必须为该用户分配一个NSPredicate,那没关系。 可以说,我点击** WallStreet **这有**两个** CardPerson - _John,Jane_,每个每个至少有** 3 **条目。我想挖掘底线条目,通常是CardGroup.persons = [NSSet],通过每个设置..'CardPerson.entries',最后结合两个NSSets将获得6个条目。 什么是正确的Coredata方法直接提取没有CardPerson的条目,..因为我现在不在寻找一个特定的人.. – user134611 2012-01-28 06:15:32