2012-01-15 2 views
0

У меня есть база данных SQL Server 2008 R2, содержащая таблицу, содержащую мои объекты из объявления. Это выглядит примерно так:Как обрабатывать версии сущностей в SQL Server?

объект
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 

Объявление может иметь следующие этапы: Published, Ожидание обзора, Устаревший.

Сообщайте, что объявление опубликовано, и клиент решает изменить объявление, это означает, что настройки в объявлении выше будут изменены. Подобное изменение требует нового обзора, а это означает, что объявление будет идти от публикации до ожидающего рассмотрения.

Проблема заключается в том, что при изменении объявления и ожидании его пересмотра он больше не публикуется.

Мне нужно, чтобы объявление было опубликовано со старыми (рассмотренными) данными, и когда обзор сделан с обновленным объявлением, он переключит места, но сохранит старый идентификатор.

Вопрос в том, как правильно обращаться с этим?

Предположим, что у меня могут быть две идентичные таблицы, чтобы сократить количество записей и упростить поиск опубликованных объявлений, но будет намного больше работать с Entity Framework с двумя идентичными таблицами в одно и то же время.

Другим решением может быть добавление двух дополнительных столбцов в таблицу объявлений, в которой содержится версия объявления и оригинал adId. Поток в этом случае будет примерно таким:

  1. Создать объявление (id = 1), originalId = null, version = null.
  2. Обзор Ad (ID = 1)
  3. Публикация объявлений (ID = 1), версия = 1
  4. клиентов Обновление объявлений, новое объявление (ID = 2) создается с версией, установленной на нуль (= ожидает проверки) и originalId = 1
  5. Проведенное объявление (id = 2), Ad (id = 1) будет скопировано в новые записи (id = 3 (or2)), originalId установлен в 1. Ad (id = 2) будут перенесены/скопированы в Ad (id1), originalId = null, version = 2.

В этом случае таблица объявлений может отличаться друг от друга, но трассировка истории объявлений будет намного проще.

ответ

0

Я считаю, что это можно сделать с использованием многих подходов, это просто вопрос предпочтения. Я бы сделал новую таблицу с именем, скажем, ReviewedAds с int Id, int AdId, bit Reviewed. 1: много отношений с таблицей объявлений, поэтому AdId из этой таблицы является внешним ключом и сопоставляет идентификатор из таблицы объявлений. Тогда я бы отобразил только те объявления, чей пересмотренный бит установлен на «1». Две записи в ReviewedAds не могли иметь тот же бит AdId и Reviewed, что и «1».

Смежные вопросы