2016-07-25 183 views
0

对于一个项目,我想为我的记录创建一个“历史记录”表。我对这个(例如)系统的两个表:创建记录历史记录表 - 如何创建创建记录?

RECORDS 
    ID 
    NAME 
    CREATE_DATE 

RECORDS_HISTORY 
    ID 
    RECORDS_ID 
    LOG_DATE 
    LOG_TYPE 
    MESSAGE 

当我记录插入RECORDS,我怎么能自动创建RECORDS_HISTORY相关的条目,其中RECORDS_ID等于新插入IDRECORDS

我目前有在RECORDSID当插入新行自动递增的顺序,但我不知道该如何预填充在RECORDS_HISTORY这一纪录看起来像这样为每个新创建(未更新)记录。

INSERT INTO RECORDS_HISTORY (RECORDS_ID, LOG_DATE, LOG_TYPE, MESSAGE) VALUES (<records.id>, sysdate(), 'CREATED', 'Record created') 

如何在创建时创建关联的_HISTORY记录?

+1

你想要一个触发器。 –

+0

像@a_horse_with_no_name说的,触发器:http://stackoverflow.com/questions/13756110/trigger-that-inserts-row-into-log-table-on-insert-or-delete-in-a-persons-table- c or http://dba.stackexchange.com/questions/26953/trigger-to-automatically-add-values-to-a-table-in-oracle – vercelli

回答

0

你没有提到你正在使用的数据库。我承担它的甲骨文。最明显的答案是:使用“插入触发器”。你甚至可以将插入语句中的ID(序列)返回到表RECORDS中。此解决方案的缺点:触发器有点“隐藏”代码,可能会导致大量插入操作的进程减慢,并且您在使用双磁盘空间时会消耗部分冗余的数据。 RECORDS如何更新或删除?这是否会发生,你还必须照顾这一点?最大的问题是:你的目标是什么? 有证明历史概念。看看这个:https://en.wikipedia.org/wiki/Slowly_changing_dimension