我为一家小公司管理数据层应用程序,而我的SW因为部分成本核算的信息无法在历史上被检索而受到批评。因此,例如,他们希望能够在任何时间点检索6个月前零件的成本。
他们曾经通过电子表格来做到这一点。他们会每天将零件表复制到.xlsx文件中,然后随时他们想知道"嘿,去年1月20日那部分的成本是多少?"他们可以拉它在excel中。
所以,我们已经开始在SQL中做同样的事情,到目前为止的计划是每次更新部件成本时我们都会创建一个新表,用今天的日期命名表,并将其保存在数据库中以存档信息。然后,我们计划根据它的时间戳来提取我们需要的任何一张表。
我无能为力,但认为这会变得非常混乱。这对归档数据来说是一种糟糕的方法吗?我是否可以遵循任何行业标准来尽可能少地解决这个问题?
答案 0 :(得分:1)
所以,我们已经开始在SQL中做同样的事情,到目前为止的计划是 我们将在每次更新零件成本时创建一个新表, 使用今天的日期命名表,并将其保存在数据库中 存档信息。然后,我们计划拉入任何一张桌子 我们需要根据它的时间戳。
我不禁想到这会变得非常混乱。这是不好的 存档数据的方法?我有什么行业标准吗? 坚持尽可能少地解决这个问题?
你是对的......这个解决方案会很混乱。
您可以做的最简单的事情是创建一个历史表说Parts_History ,它将所有列作为主要的Parts表,并添加其他时间戳列来跟踪更新。每次有一个零件的新价格(我希望通过存储过程完成),现有价格将被移动到新表中,主表会更新 ALL一次交易。如果您没有一个处理更新的SP,那么您可以在触发器内执行此操作。
我会试着看看那里是否有好的例子。
答案 1 :(得分:1)
就我而言,现在没有标准,但方法相当明显。你有一张表part(partid int primary key, price decimal)
。在part_audit(auditId int identity(1,1) primary key, partId int, price decimal, dateChange datetime default getdate())
上创建审核表part after update, delete
和触发器。在触发器中检查update(price)
,如果是,请从part_audit
插入deleted
。要查找历史价格,请在感兴趣的日期后选择最近的dateChange
。