Существует ли шаблон проектирования для объединения дублированных записей базы данных? - PullRequest
8 голосов
/ 02 ноября 2011

Например, допустим, у меня был сайт социальной сети для поклонников кино. Некоторые люди называют «Рокки» своим любимым фильмом, другие - «Рокки 1», другие - «Рокки I». Очевидная вещь состоит в том, чтобы объединить три вместе и обновить связанные таблицы. Однако для каждого очевидного решения есть шаблон проектирования, который 1) более сложный и 2) имеет некоторые дополнительные преимущества. Существует ли шаблон проектирования для объединения дублированных записей базы данных? В частности, что-то, что обеспечивает возможность аудита или обратимость?

1 Ответ

5 голосов
/ 04 ноября 2011

Как только вы, как вы говорите "обратимость", я думаю, Команда Шаблон.

Типичным примером является поддержка поведения в стиле отмены, но я думаю, что это также подойдет для возможности проверки - особенно потому, что отдельные «шаги» (из-за отсутствия лучшего слова) настолько малы и их легко представить(например, {Merged "Rocky I" -> "Rocky" }).

Как бы заставить шаблон Command для на самом деле работать для вашего сценария?

Что ж, сохранить это очень много на арене СУБД, а не на ОО моделировании, если вы 'у нас уже есть таблицы USER_FAVORITE и MOVIE, я бы добавил новую таблицу USER_FAVORITE_MOVIE_MERGE_COMMAND со столбцами:

  • id
  • date
  • user_id
  • old_favorite_movie_title
  • new_favorite_movie_title

Итак, ваш сценарий ночной очистки (или что-то еще) выполняется по таблице USER_FAVORITE в поискахнестандартные названия фильмов.Каждый раз, когда он находит его, он исправляет его и записывает соответствующие факты в таблицу USER_FAVORITE_MOVIE_MERGE_COMMAND.

Ваш контрольный журнал находится прямо там, и если вам когда-либо понадобится отменить задание очистки, «воспроизведите»строки в обратном хронологическом порядке, заменив new на old.

Обратите внимание на то, что вы получаете как обратимость, так и возможность аудита как в временном смысле (например, пакетный прогон прошлой ночью стал страннымв 2.12 утра давайте откатим все проделанную после этого работу) и в смысле на пользователя .

Это такойчто вы ищете?

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