Как вы объединяете теги в уже существующей системе? - PullRequest
5 голосов
/ 18 октября 2010

У нас есть простой интерфейс для пометки конкретного вопроса

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

Мы хотели бы объединить все теги, названные "jdk-6", в jdk6. Как нам этого добиться в системе, которая приближается к производству, но содержит полезные данные.

В [1] необходимо удалить jdk-6, поскольку jdk6 уже присутствует. В [2,3] jdk-6 необходимо переименовать в «jdk6».

Какие сценарии нужны для эффективной миграции этих данных.

EDIT

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

Ответы [ 3 ]

2 голосов
/ 18 октября 2010

Я бы сделал следующее:

  1. Обновите "плохие" теги хорошими (UPDATE TagTable SET Tag = 'jdk6' WHERE tag = 'jdk-6')

  2. Удалите дубликаты тегов (где entry_id и Tag совпадают). Как именно вы это сделаете, будет зависеть от того, есть ли у вас отдельный уникальный ключ на столе или нет, но быстрый Google предоставит вам множество методов, которые работают в разных обстоятельствах.

  3. Если у вас есть таблица TagsList со списком всех доступных тегов, удалите из нее jdk-6 (DELETE FROM TagsList WHERE Tag = 'jdk-6').

0 голосов
/ 18 октября 2010
/* 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'
0 голосов
/ 18 октября 2010

Сначала я создал бы новую таблицу со списком идентификаторов записей, содержащих теги 'jdk-6' или 'jdk6'.

Затем я удалил бы все записи тегов для тегов 'jdk6'и' JDK-6 '.

А потом я бы добавил их обратно, используя таблицу, созданную в начале.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...