2

我有下表:

Product (Id, CategoryId, Description, Value)

有一天,所有旧产品都不再销售,新产品到货。但是,我想保留旧的购买历史。我曾想过添加一个可用于区分新旧的字段并制作此表:

Product (Id, CategoryId, Description, Value, Available)

或者

使用新表:

ProductVersionTwo (Id, CategoryId, Description, Value)

相同的策略将应用于 tableProductCategory和可能正在使用的任何其他表Product

我不知道这种变化会发生多少次,但肯定会非常罕见。

你会推荐什么解决方案?

4

2 回答 2

1

我会采用第一种方法,稍作改动。由于您不知道以后是否需要此信息,因此我将available使用时间戳列替换该列validFromvalidTo. validTo如果NULL它是现在可用的产品。为了不让您的用户感到困惑,我会创建一个视图SELECT * /*except maybe validFrom and validTo*/ FROM Product WHERE validTo IS NULL;

使用第二种方法,除了可能有更好的性能之外,您没有任何优势,以防您无法正确索引第一种方法并且确实有很多产品。相反,您只会得到丑陋的查询,UNION并且您必须即时创建一个额外的列来区分产品版本。另外,您必须在某处存储有关不同版本表的信息。一年后,您会想知道第 2 版和第 3 版有何特别之处?

第二种方法的另一个问题可能是加入其他表,以防您使用自动递增列。您必须从以前版本表中的 max(autoincrement) 开始,以免在对旧产品等进行分析时感到困惑。在我看来是个坏主意。

于 2013-02-14T14:37:27.460 回答
0

If I were you, I would go with the first option. It is easier to do and when this change occurs again in the future, you just have to flag the old products as 'unavailable'.

于 2013-02-14T14:53:37.620 回答