У меня есть база данных SQL Server 2008 R2, которая содержит таблицу, в которой хранятся мои объекты из рекламы.
Это выглядит примерно так:
Title
Price
CreatedDate
UpdatedDate
Description
EndDate
PublishedDate
StateOfProduct
Id
UserId
UserLocationId
Visits
CategoryId
TypeOfAd
AdminComment
ReviewedDate
AmountOfImages
UserPostCode
UserEmail
UserPhoneNr
UserPassword
OwnerType
AdminUserId
InactivatedDate
OldPrice
PriceLastChange
Рекламный объект может иметь следующие этапы: Опубликовано, Ожидание просмотра, Устаревшее.
Скажите, что объявление опубликовано, и клиент решает изменить его, это означает, что настройки в объявлении выше будут изменены. Подобное изменение требует нового просмотра, и это означает, что объявление перейдет из категории «Опубликовано в ожидание просмотра».
Проблема заключается в том, что когда объявление изменяется и ожидает просмотра, оно больше не публикуется.
Мне нужно, чтобы объявление было опубликовано со старыми (проверенными) данными, и после проверки обновленного объявления оно поменяется местами, но сохранит старый идентификатор.
Вопрос в том, как правильно с этим справиться?
Полагаю, у меня могло бы быть две идентичные таблицы, чтобы вести обратный отсчет записей и упростить поиск опубликованных объявлений, но будет гораздо сложнее использовать Entity Framework для двух идентичных таблиц одновременно.
Другое решение может заключаться в добавлении двух дополнительных столбцов в таблицу объявлений, которая содержит версию объявления и исходный adId
. Поток в этом случае будет примерно таким:
- Создать объявление (id = 1), originalId = null, version = null.
- Просмотр объявления (id = 1)
- Опубликовать объявление (id = 1), версия = 1
- Объявление об обновлениях клиентов, новое объявление (id = 2) создается с версией NULL (= ожидание просмотра) и originalId = 1
- Рассмотренное объявление (id = 2) выполнено, объявление (id = 1) будет скопировано в новые записи (id = 3 (or2)), для атрибута originalId установлено значение 1. Объявление (id = 2) будет перемещено / скопировано для объявления (id1), originalId = null, версия = 2.
Однако таблица объявлений может сильно отличаться, но будет намного проще отслеживать историю объявлений.