2012-01-28 36 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