2011-09-13 16 views
5

आप सभी इंडेक्सड डीबी में कई से अधिक रिश्तों को कैसे संभालेंगे?इंडेक्सड डीबी और कई से कई रिलेशनशिप

उदाहरण के लिए, मेरे पास ब्लॉग पोस्ट के टैग/लेबल के लिए ब्लॉग पोस्ट और Tag ऑब्जेक्ट रखने के लिए Blog ऑब्जेक्ट है। एक Blog में कई Tag एस और एक Tag कई Blog एस द्वारा उपयोग किया जा सकता है।

मैं पैदा करेगा एक blog store और tag store (हालांकि मैं सुझाव के लिए खुले हूँ) वस्तुओं के दो प्रकार के घर में:

:

// ... 
var blogStore = db.createObjectStore("blog", {keyPath: "blogId", autoIncrement: true}); 
blogStore.createIndex("title", "title", {unique: true}); 
var tagStore = db.createObjectStore("tag", {keyPath: "tagId", autoIncrement: true}); 
tagStore.createIndex("label", "label", {unique: true}); 

हाथ बंद मैं दो तरीकों के बारे में सोच सकते हैं दोनों को लिंक करना

  1. एक Blog.tags जो BlogTag वस्तुओं जो blogId और tagId रखती है (और यह भी पुनः प्राप्ति के लिए दुकान में होगा) या
  2. की एक सरणी हो जाएगा
  3. में Blog.tags है जो tagId एस की एक सरणी होगी जिसका उपयोग Tag एस को देखने के लिए किया जा सकता है।

पहला तरीका लंबा हवादार लगता है लेकिन यह एसक्यूएल में कैसे निपटाया जाएगा। क्या वह सिर्फ एसक्यूएल-सामान है जिसे मुझे पीछे छोड़ना चाहिए?

मुझे लगता है कि एक तीसरा तरीका Blog.tagsTag एस की एक सरणी होगी। यह सबसे आसान लगता है लेकिन फिर मैं Tag एस के लिए क्वेरी नहीं कर सका या ब्लॉग पर टैग का पुन: उपयोग नहीं कर सकता (या मैं कर सकता हूं?)।

क्या किसी और ने इंडेक्स डीडी के साथ ऐसी स्थिति संभाली है? यदि हां, तो आप क्या कर रहे थे? कुछ नुकसान क्या थे?

उत्तर

7

मैं IndexedDB-backed JS neural network implementation पर काम कर रहा हूं और इस समस्या का सामना कर रहा हूं।

हम इंडेक्सड डीबी में शामिल नहीं हुए हैं, इसलिए आप कम से कम दो ऑब्जेक्ट स्टोर हिट देख रहे हैं जब तक कि आप किसी प्रकार का ज्ञापन/कैशिंग नहीं कर रहे हों।

अनुभव से मुझे पता चला है कि एक दस्तावेज़-उन्मुख शैली इंडेक्सड डीबी ऑब्जेक्ट्स (एक ही स्टोर में सब कुछ स्टोर करें) के साथ सबसे अच्छी है, लेकिन संबंधों के लिए एक माध्यमिक स्टोर की आवश्यकता है।

यहां मैं क्या कर रहा हूं।

कहें कि आप अभिनेताओं और फिल्मों की एक स्थानीय दुकान चाहते हैं - आईएमडीबी की तरह कुछ। यह और अधिकांश से कई रिश्तों को इंडेक्सड डीबी के साथ दो तालिकाओं का उपयोग करके मॉडलिंग किया जा सकता है: ऑब्जेक्ट्स एंड रिलेशनशिप।

यहां दो टेबल हैं। आप लगभग सब कुछ पर मुख्य लुकअप * चाहते हैं। कुछ भी जो अद्वितीय नहीं कहता है वह अद्वितीय नहीं हो सकता है।

वस्तुओं वस्तु की दुकान:

type_id* 
whatever*.. 

रिश्ते वस्तु की दुकान:

var actor1 = { 
    id: 'actor_jonah_goldberg', 
    display: 'Jonah Goldberg', 
}; 

var actor2 = { 
    id: 'actor_michael_cera', 
    display: 'Michael Cera' 
}; 

var movie1 = { 
    id: 'movie_superbad', 
    display: 'Superbad', 
    year: 2007 
}; 

var movie2 = { 
    id: 'movie_juno', 
    display: 'Juno', 
    year: 2007 
}; 

//relationship primary key ids are auto-inc 

var relationship1 = { 
    from_id: 'actor_jonah_goldberg', 
    to_id: 'movie_superbad' 
} 

var relationship2 = { 
    from_id: 'actor_michael_cera', 
    to_id: 'movie_superbad' 
} 

var relationship3 = { 
    from_id: 'actor_michael_cera', 
    to_id: 'movie_juno' 
} 
:

id* (unique, auto-incrementing) 
from_type* 
to_id* 

एक अभिनेता/फिल्म उदाहरण वस्तुओं तालिका में दो रिकॉर्ड और रिश्ते तालिका में एक होगा

माइकल सीरा की फिल्मों के लिए Psuedo-code:

012 एक दिए गए वर्ष से सभी फिल्मों प्राप्त करने के लिए
IndexedDBApp({ 'store': 'relationships', 'index': 'from_id', 'key': 'actor_michael_cera', 'on_success': function(row) {...}); 
// Would return movie_superbad and movie_juno rows on_success 

छद्म-कोड: सभी कलाकार प्राप्त करने के लिए

IndexedDBApp({ 'store': 'relationships', 'index': 'to_id', 'key': 'movie_superbad', 'on_success': function(row) {...}); 
// Would return actor_jonah_goldberg and actor_michael_cera on_success 

छद्म-कोड:

IndexedDBApp({ 'store': 'objects', 'index': 'year', 'key': 2007, 'on_success': function(row) {...}); 
// Would return movie_superbad and movie_juno rows on_success 

एक फिल्म के अभिनेताओं प्राप्त करने के लिए छद्म-कोड

IndexedDBApp({ 'store': 'relationships', 'index': 'id', 'cursor_begin': 'actor_a', 'cursor_end': 'actor_z', 'on_success': function(row) {...}); 
// Would return actor_jonah_goldberg and actor_michael_cera on_success 
संबंधित मुद्दे