2010-10-18 8 views
5

पर टैग विलय हम किसी विशेष प्रश्नकैसे आप एक पहले से ही मौजूदा प्रणाली

(e.g. entry has 1..many tags and each tag entry has a foriegn key pointer back to the entry table) 

1. What is the current production version of the jdk? (Tags: jdk6 jdk-6 jdk java) 
2. In what version was java.util.spi package introduced? (Tags: jdk-6, jdk7, jdk5) 
3. Which version of java is going to be released soon? (Tags: jdk-6, jdk7, jdk8) 

टैग करने के लिए हम सभी टैग jdk6 करने के लिए "jdk6" के रूप में नामित मर्ज करना चाहते हैं एक सरल अंतरफलक की क्या ज़रूरत है। हम इसे ऐसे सिस्टम में कैसे प्राप्त कर सकते हैं जो उत्पादन के करीब है लेकिन इसमें उपयोगी डेटा है।

[1] जेडीके -6 में हटा दिया जाना चाहिए, क्योंकि jdk6 पहले से मौजूद है। [2,3] जेडीके -6 में "jdk6" के रूप में बदला जाना चाहिए।

इस डेटा को प्रभावी ढंग से माइग्रेट करने के लिए मुझे किस प्रकार की स्क्रिप्ट की आवश्यकता है।

संपादित

create table entry (id, question, ...) 
create table entry_tag (id, entry_id, tag) 
+1

आप अपनी तालिका संरचना की व्याख्या कर सकते हैं? – JNK

+0

EDIT – Sam

उत्तर

0

मैं पहली प्रविष्टि आईडी टैग 'jdk6' या 'jdk6' दोनों में से किसी को शामिल की एक सूची के साथ एक नया टेबल बना होगा।

फिर मैं टैग 'jdk6' और 'jdk-6' टैग के लिए सभी टैग रिकॉर्ड हटा दूंगा।

और फिर मैं उन्हें शुरुआत में बनाई गई तालिका का उपयोग करके वापस जोड़ दूंगा।

+0

के तहत स्कीमा जोड़ा गया यह प्रविष्टि_tag.entry_id –

2

मैं निम्नलिखित करना होगा:

  1. अद्यतन अच्छा एक (UPDATE TagTable SET Tag = 'jdk6' WHERE tag = 'jdk-6')

  2. साथ "बुरा" टैग डुप्लिकेट टैग (जहां entry_id और टैग एक ही हैं) निकालें। वास्तव में आप यह कैसे करेंगे इस पर निर्भर करेगा कि आपके पास टेबल पर एक अलग अनूठी कुंजी है या नहीं, लेकिन एक त्वरित Google आपको विभिन्न तरीकों से काम करेगा जो विभिन्न परिस्थितियों में काम करता है।

  3. मान लें कि आपके पास सभी उपलब्ध टैग की सूची के साथ एक टैगलिस्ट तालिका है, इसे से jdk-6 हटाएं (DELETE FROM TagsList WHERE Tag = 'jdk-6')।

+0

+1 पर इंडेक्स के क्लस्टरिंग कारक के साथ वास्तव में स्क्रू करेगा लेकिन टैगिंग का पूरा बिंदु आमतौर पर पूरे डोमेन को पहले से निर्दिष्ट नहीं करना है। जो होता है: इसे ठीक क्यों करें अगर यह केवल 'प्रकार' से बाहर निकल सकता है? –

0
/* Step 1 - Delete where both tags exist */ 
delete from et1 
    from entry_tag et1 
     inner join entry_tag et2 
      on et1.entry_id = et2.entry_id 
       and et2.tag = 'jdk6' 
    where et1.tag = 'jdk-6' 

/* Step 2 - Update remaining tags */ 
update entry_tag 
    set tag = 'jdk6' 
    where tag = 'jdk-6' 
संबंधित मुद्दे