【问题标题】:How to handle entity versions in SQL Server?如何处理 SQL Server 中的实体版本?
【发布时间】:2012-01-15 14:09:19
【问题描述】:

我有一个 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

一个广告实体可以有以下阶段:已发布、等待审核、已过时。

假设广告发布并且客户决定编辑广告,这意味着上面的广告设置将发生变化。此类更改需要重新审核,这意味着广告将从已发布变为等待审核。

这样做的问题是,当广告更改并等待审核时,它不再发布。

我需要的是让广告与旧的(已审核的)数据一起发布,并且在对更新的广告进行审核后,它将切换位置但保留旧的 id。

问题是如何正确处理这个问题?

我假设我可以有两个相同的表来减少记录计数并简化查找已发布广告的过程,但同时针对两个相同的表使用 Entity Framework 会做更多的工作。

另一种解决方案可能是在 Ads 表中添加两个额外的列,其中包含广告版本和原始 adId。在这种情况下,流程将是这样的:

  1. 创建广告(id=1),originalId = null,version = null。
  2. 查看广告(id=1)
  3. 发布广告(id=1),版本 = 1
  4. 客户更新广告,新广告 (id=2) 已创建,版本设置为 null(=等待审核)且 originalId = 1
  5. Reviewed Ad(id=2) done, Ad(id=1) 将被复制到新记录 (id = 3 (or2)), originalId 设置为 1. Ad(id=2) 将被移动/复制到 Ad(id1),originalId = null,版本 = 2。

但是,广告表可能会因此而变化很大,但跟踪广告历史记录会容易得多。

【问题讨论】:

    标签: entity-framework database-schema


    【解决方案1】:

    我相信这可以使用多种方法来完成,这只是一个偏好问题。我要做的是创建一个名为 ReviewedAds 的新表,其中包含 int Id、int AdId、bit Reviewed。 1:与 Ads 表有很多关系,因此该表中的 AdId 是外键,并且与 Ads 表中的 Id 匹配。然后,我将只显示那些已审核位设置为“1”的广告。 ReviewedAds 中的两条记录不能将相同的 AdId 和 Reviewed 位设置为“1”。

    【讨论】:

      猜你喜欢
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      • 2010-11-08
      • 2011-04-15
      • 2019-12-31
      • 2012-10-29
      • 2021-06-11
      相关资源
      最近更新 更多