处理而不删除过期关系的最佳方法是什么?

时间:2017-10-05 22:13:26

标签: sql sql-server

我有一个数据库,会定期更新关系。我想存储新数据和旧数据,并且能够在需要时提取新数据。例如:

物品及其价格。物品的价格可能会发生变化,但我想记下旧价格,同时仍然只能提取当前相关的价格。

我现在认为这样做的最好方法是拥有有效的开始和结束日期。因此,如果您愿意,我可以查询仅提取尚未“过期”的关系。有没有更好或更有效的方法来做到这一点?

2 个答案:

答案 0 :(得分:0)

我能想到的最好的是创建一个触发器。

  1. 在表格中添加一个名为flag的列,指示它是否为&new;'或者' old'。
  2. 一次只有一个组/关系的新行
  3. 添加名为更新日期的列,该列将是更新日期。 (如果您有兴趣了解最新的旧数据)
  4. 创建一个触发器,在将新行插入表

    时触发
    1. 将旗帜更新为“旧”字样。 ,对于任何带有' new'项目和价格的特定组合的标志。
    2. 并将更新日期更新为sysdate
    3. 因此,您将为组合添加一个新行。当您只需要新数据时,请提示flag =' new'。所有旧行都会有更新日期,说明它何时成为旧价格

答案 1 :(得分:0)

您可以像市场上的ERP一样为价格历史创建一个表。

  

PRICE_HIST

     

此表包含所有价格变动的历史记录   在系统内应用。历史永远留在这张桌子上   SKU /商店组合。

Column                Nulls ?       Type
------                -------       ----
TRAN_TYPE             NOT NULL      NUMBER (2, 0)
REASON                NULL          NUMBER (2, 0)
EVENT                 NULL          VARCHAR2 (6)
ITEM                  NOT NULL      VARCHAR2 (25)
LOC                   NOT NULL      NUMBER (10, 0)
LOC_TYPE              NULL          VARCHAR2 (1)
UNIT_COST             NULL          NUMBER (20, 4)
UNIT_RETAIL           NULL          NUMBER (20, 4)
SELLING_UNIT_RETAIL   NULL          NUMBER (20, 4)
SELLING_UOM           NULL          VARCHAR2 (4)
ACTION_DATE           NOT NULL      DATE
MULTI_UNITS           NULL          NUMBER (12, 4)
MULTI_UNIT_RETAIL     NULL          NUMBER (20, 4)
MULTI_SELLING_UOM     NULL          VARCHAR2 (4)
POST_DATE             NULL          DATE
  

ACTION_DATE

     

包含价格变动生效的日期。