Отменить с базой данных - PullRequest
2 голосов
/ 21 июля 2010

Я пытаюсь закодировать сценарий типа «отмена» или «откат».Часть меня думает, что я слишком усложняю это, и это должно быть решено раньше.

Справочная информация: У меня есть Продукт (например, книга), у продукта есть 20 полей.Продукт имеет тип носителя (PDF, Hardcopy, EPUB), и каждый тип носителя имеет несколько цен (цена, местоположение, т. Е. Европа, Азия, Америка).

Глядя на предыдущие вопросы, образец сувенира кажетсяближайший, но я не уверен, как сделать несколько уровней.

Например, Изменить 1 - Создайте продукт "Кодирование для чайников", он доступен в Hardcopy и доступен за $ 100в Европе и 75 долларов в Азии

Изменение 2 - Измените цену на печатную версию в Европе до 90 долларов.Добавьте PDF, для Европы это будет стоить 90 долларов, а для Азии - 75 долларов

Изменить 3 - удалить запись в печатном виде

Изменение 3 было ошибкой, я хотел бы откатИзменить 2.

Глядя на предыдущий вопрос , Memento шаблон , кажется, ближе всего, но я бы скопировал очень много данных.то есть в Изменениях 2 и 3 вы повторяете Продукт, Носитель и Ценообразование.

Набор данных, который я использую, содержит почти 1 000 000 продуктов.(Приведенный выше пример упрощен). На самом деле в Product имеется около 50 полей, в Media Type - около 15 полей

Есть ли лучший способ?

Ответы [ 2 ]

1 голос
/ 21 июля 2010

внедрить поля даты в ваших таблицах.

таким образом, вы будете вводить тот факт, что цена изменилась с 21 на 30 01 марта 2011 года или что-то в этом роде, а не просто ударить старые значения. тогда вы сможете запросить не только самое последнее изменение, но и вернуться к старым ценам, просто манипулируя датами.

0 голосов
/ 21 июля 2010

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

Что вы подразумеваете под дублированием данных?Вы просто помните изменения в состоянии продуктов - другого пути нет, если вы хотите отменить их позже ...

...