2012-02-16 16 views
7

मैं निम्नलिखित की तरह एक साधारण कोर डाटा मॉडल स्थापित करने के लिए कोशिश कर रहा हूँ के साथ संबंध:मॉडल और पॉप्युलेट कोर डाटा कई-से-अनेक विशेषता

Order(code, customer) 
Book(code, title, price) 
OrderBook(order_code, book_code, quantity) 

कोर डाटा प्रलेखन से मुझे लगता है कि यह संभव नहीं है गुणों में जोड़ने के लिए कई से अधिक रिश्तों को मॉडल करें। इस कारण से मैंने इसे निम्नलिखित की तरह मॉडलिंग किया।

enter image description here

जहां:

    Order से
  • OrderBook को वहाँ एक एक-से-अनेक संबंधOrder करने के लिए एक हटाने नियम कास्केड
  • रूप OrderBook साथ है एक है एक से एक रिश्ते एक हटा नियम के साथ कोई कार्रवाई

ही Book और OrderBook लिए मान्य है।

पहला प्रश्न: क्या यह मॉडल मान्य है?

मान लीजिए कि मॉडल ठीक है, मैंने संबंधित NSManagedObject सबक्लास बनाए हैं।

Book.h/.m 
Order.h/.m 
OrderBook.h/.m 

उस ने कहा, मुझे कोर डेटा तंत्र के माध्यम से इसी डीबी को पॉप्युलेट करने की आवश्यकता है। ऐसा करने के लिए मैंने निम्नलिखित श्रेणियों को निम्न जैसे बनाया है, जहां प्रत्येक श्रेणी स्वयं को बनाने के लिए ज़िम्मेदार है (ऑब्जेक्ट encapsulation को बनाए रखने के लिए)।

+ (Book *)bookWithXMLElement:(GDataXMLElement *)xmlElement inManagedObjectContext:(NSManagedObjectContext *)context; 

अब मैं एक समस्या है और मैं इसे कैसे हल करने के लिए पता नहीं है:

Book+Creation.h/.m 
Order+Creation.h/.m 
OrderBook+Creation.h/.m 

उदाहरण के लिए Book+Creation श्रेणी निम्नलिखित की तरह एक वर्ग विधि है।

मॉडल आबादी अलग-अलग समय पर होती है। किताबों के लिए तालिका पहले आबादी है (मैं एक एक्सएमएल फ़ाइल से किताबों की एक सूची बना रहा हूँ)। एक बार समाप्त हो जाने पर, मैं ऑर्डर और ऑर्डरबुक टेबल को पॉप्युलेट करने में सक्षम हूं। निम्नलिखित की तरह इन तालिकाओं मैं एक xml फ़ाइल का उपयोग कर रहा भर दें:

<orders> 
    <order> 
    <code>1234</code> 
    <book>2567</book> 
    <customer>299</customer> 
    <quantity>4</quantity> 
    </order> 
</orders> 

एक Order प्रबंधित वस्तु मैं अपनी श्रेणी Order+Creation में निम्न विधि बना लिया है बनाने के लिए:

+ (Order *)orderWithXMLElement:(GDataXMLElement *)xmlElement inManagedObjectContext:(NSManagedObjectContext *)context; 

बन जाने के बाद वस्तु OrderBook+Creation वर्ग विधि वर्ग से पारित हो जाता है एक OrderBook कामयाब वस्तु बनाने के लिए:

+ (OrderBook *)orderWithXMLElement:(GDataXMLElement *)xmlElement withOrder:(Order*)order inManagedObjectContext:(NSManagedObjectContext *)context 
{ 
    OrderBook* orderBook = [NSEntityDescription insertNewObjectForEntityForName:@"OrderBook" inManagedObjectContext:context]; 
    orderBook.order = order; 
    //orderBook.book = <-- how can I retrieve the book? 

    return orderBook; 
} 

क्या गुम है Book ऑब्जेक्ट को OrderBook ऑब्जेक्ट को असाइन करने के लिए ऑब्जेक्ट को कैसे बनाएं (या पुनर्प्राप्त करें)।

दूसरा प्रश्न: मैं Book ऑब्जेक्ट को कैसे पुनर्प्राप्त कर सकता हूं और इसे OrderBook पर असाइन कर सकता हूं? क्या मुझे सही ऑब्जेक्ट Book लाने के लिए NSFetchRequest बनाना है (जिसकी एक ही कोड xml फ़ाइल में है, उदाहरण के लिए <book>2567</book>)? यदि हां, तो क्या fetching rquest के प्रदर्शन में सुधार करने के लिए एक तंत्र है?

याद रखें कि पुस्तक तालिका पहले ही आबादी में है।

आशा है कि यह स्पष्ट है। पहले ही, आपका बहुत धन्यवाद।

+0

मुझे खेद है, लेकिन डाउनवोट क्यों? –

+0

आपके वर्तमान मॉडल के साथ, यदि आपके पास कोई ऑर्डर बुक ऑब्जेक्ट है जिसमें पुस्तक और ऑर्डर विशेषता दोनों हैं, तो यदि आप पुस्तक या ऑर्डर हटाते हैं, तो ऑर्डर बुक ऑब्जेक्ट हटा दिया जाएगा। क्या तुम यही चाहते हो? – jrturton

+0

@jrturton आपके उत्तर के लिए धन्यवाद। हाँ, यह वही है जो मैं चाहता हूं। क्या तुम्हारे पास कोई सुझाव है? –

उत्तर

3
  1. एक-दूसरे संबंधों के लिए "कोई कार्रवाई नहीं" होना चाहिए।
  2. हाँ, आप सही हैं, आपको एक fetch अनुरोध की आवश्यकता है।

यदि आपके पास fetch अनुरोध (इसमें शामिल संख्याओं को जानने के बिना कहने में कठिनाई) के साथ प्रदर्शन समस्याएं हैं तो आप पुस्तकों के पूरे सेट को स्मृति में ला सकते हैं (फिर, संख्याओं के आधार पर व्यावहारिक नहीं हो सकता है) और फिर उपयोग करें विशिष्ट आइटम खोजने के लिए सरणी फ़िल्टरिंग/गणना, लेकिन आपको निश्चित रूप से पहले सबसे सरल विकल्प बनाना और प्रोफाइल करना चाहिए।

हटाने नियम प्रकार here वर्णित हैं, को रद्द orderbook से एक संबंध बुक और व्यवस्था के लिए सही है:

मंसूख़

गंतव्य पर वस्तुओं के लिए व्युत्क्रम संबंध सेट करें शून्य करने के लिए।

उदाहरण के लिए, यदि आप एक विभाग को हटाते हैं, तो सभी मौजूदा सदस्यों के लिए विभाग को शून्य पर सेट करें। यह केवल तभी समझ में आता है जब कर्मचारी के लिए विभाग संबंध वैकल्पिक है, या यदि आप सुनिश्चित करते हैं कि आप अगले बचत अभियान से पहले प्रत्येक कर्मचारी के लिए एक नया विभाग निर्धारित करें।

इसका मतलब है कि यदि आप ऑर्डरबुक हटाते हैं, तो ऑर्डरबुक और पुस्तक ऑर्डर से ऑर्डर बुक और ऑर्डर में हटा दिया जाता है।

+0

धन्यवाद। एनएसओपरेशन के माध्यम से पृष्ठभूमि में तालिका आबादी की जाती है। आपका मतलब क्या है "आपको निश्चित रूप से सबसे सरल विकल्प बनाना और प्रोफाइल करना चाहिए"? आपके समर्थन के लिए +1। –

+1

मेरा मतलब है, इसे एक fetch अनुरोध के साथ लिखें (आपको केवल इसे एक बार बनाने की आवश्यकता है, आप केवल पूर्वानुमान को संशोधित कर सकते हैं) और अपने ऑर्डर को पॉप्युलेट करते समय लौटाई गई पुस्तक ऑब्जेक्ट का उपयोग करें। तब तक कुछ और कोशिश न करें जब तक कि इससे समस्याएं न हो जाएं। – jrturton

+0

आपके लिए एक साधारण सवाल है। क्या यह सही है कि ** ऑर्डरबुक से ऑर्डर करने के लिए एक डिलीट नियम नो एक्शन ** के साथ एक-से-एक संबंध है? जब मैं इसे संकलक करता हूं तो संकलक मुझे एक संगति त्रुटि देता है। शायद अगर मैं पूर्ण नियम का उपयोग करता हूं तो यह और अधिक सही हो सकता है। तुम क्या सोचते हो? धन्यवाद। –

संबंधित मुद्दे