2010-10-18 12 views
5

Mamy prosty interfejs, aby oznaczyć dane pytanieJak scalić tagi na już istniejącym systemie

(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) 

Chcielibyśmy połączyć wszystkie znaczniki nazwane jako „JDK6” do JDK6. Jak to osiągnąć w systemie, który zbliża się do produkcji, ale zawiera użyteczne dane.

W [1] jdk-6 musi zostać usunięty, ponieważ jdk6 jest już obecny. W [2,3] jdk-6 musi zostać zmieniony na "jdk6".

Jakiego rodzaju skryptów potrzebuję do przeprowadzenia migracji tych danych w skuteczny sposób.

EDIT

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

można wyjaśnić strukturę tabeli? – JNK

+0

dodano schemat pod EDYTEM – Sam

Odpowiedz

0

Chciałbym najpierw utworzyć nową tabelę z listą identyfikatorów wejściowych, które zawierają zarówno tagów „JDK6” lub „JDK6”.

Następnie usunę wszystkie rekordy znaczników dla znaczników "jdk6" i "jdk-6".

A potem dodałbym je ponownie używając tabeli utworzonej na początku.

+0

Naprawdę przykręci to za pomocą współczynnika klastrowania indeksu na entry_tag.entry_id –

2

chciałbym wykonać następujące czynności:

  1. zaktualizować "złe" tagi z dobrej jednego (UPDATE TagTable SET Tag = 'jdk6' WHERE tag = 'jdk-6')

  2. Usuń zduplikowane tagi (gdzie entry_id i naklejki są takie same). Dokładnie to, jak to zrobisz, będzie zależało od tego, czy masz oddzielny unikalny klucz na stole, czy nie, ale szybkie google dostarczy Ci różnych metod, które działają w różnych okolicznościach.

  3. Zakładając, że masz tabelę TagList z listą wszystkich dostępnych znaczników, usuń z niej jdk-6 (DELETE FROM TagsList WHERE Tag = 'jdk-6').

+0

+1, ale cały punkt tagowania zwykle nie określa z wyprzedzeniem całej domeny. Co prowadzi do: po co to naprawić, skoro może znów wyjść z "rodzaju"? –

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' 
Powiązane problemy