Database-Design
數據更改時如何對關係數據庫進行快照或版本控制?
我的系統接收數據饋送。每個數據饋送最終都會為(關係)數據庫中的大多數表創建插入和/或更新。
在收到每個數據饋送後,我需要擷取整個數據庫的快照。基本上,每次通過系統執行數據饋送時,我都需要一種方法來對數據庫進行版本控制。
請注意,通過擷取快照,我並不是指從字面上獲取數據庫的快照,而是寫入歷史記錄或某種此類機制,以便我可以跨“版本”查詢數據庫以查看版本之間的變化(以及其他案例)
是否存在可以擷取這樣的數據庫版本快照的已知數據模型設計?
NHydrate會為您執行此操作,我相當肯定許多其他 ORM 工具也提供此功能。
作為你自己的努力,有很多方法可以做到這一點,但這裡有一個簡單的例子:https ://stackoverflow.com/questions/3719180/sql-server-2005-history-tables-using-triggers 。
然後,您只需要一組查詢來檢索數據饋送更新之前的最後一條記錄。
您正在尋找的是緩慢變化的尺寸設計。表中的每一行數據都將保存該記錄的開始日期和結束日期。此設計使您能夠像過去任何時間點一樣查詢表。
例子
create table scd ( id number , open_date date, close_date date, data varchar2(10), primary key (id , open_date) ) alter session set nls_date_format='dd/mm/yyyy'; insert into scd values (1,'01/01/2013','03/01/2013','D1'); insert into scd values (1,'03/01/2013','04/01/2013','D1.1'); insert into scd values (1,'04/01/2013','31/12/9999','D1.3'); // this is the current occurrence insert into scd values (2,'01/01/2012','31/12/9999','D2'); insert into scd values (3,'01/01/2012','31/12/9999','D3'); insert into scd values (3,'01/01/2012','03/01/2012','D3.closed'); // this is a closed occurrence // querying the data as of 02/01/2013 select * from scd where '02/01/2013' => open_date and '02/01/2013' < close_date // querying currently open occurrences select * from scd where sysdate between open_date and close_date
希望這可以幫助