数据库建模:在给定日期和时间中查找数据的外观

时间:2011-06-23 18:29:21

标签: oracle database-design data-modeling ado.net-entity-data-model

如果我有table1,table2,table3..table50,它存储有关产品的不同信息

如何以一种方式跟踪增量变化的有效方法是,如果我想回过头来了解特定产品在给定日期中的表现,那将非常快速和准确。 我希望能够以非常快速的方式跟踪变化并减少过多的冗余。

1 个答案:

答案 0 :(得分:0)

1.如果您使用的是Oracle 11g,那么Oracle闪回技术就可以实现这一功能。 http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28424/adfns_flashback.htm#BJFGJHCJ

2.在旧版本中,您可以使用DBMS_WM程序包并为所需的表启用版本控制。但是,您可以为其启用版本控制的表格类型存在某些限制。 http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96628/long_ref.htm#80312

3.到目前为止,我见过的其他实现都有自己的DBMS_WM程序版本。基本上,有一个类似的结构。

SQL> desc scott_emp;
 Name                                      Null?    Type
 ----------------------------------------- -------- -------------
 EMPNO                                     NOT NULL NUMBER(4)
 ENAME                                     NOT NULL VARCHAR2(10)
 JOB                                       NOT NULL VARCHAR2(9)
 MGR                                                NUMBER(4)
 HIREDATE                                  NOT NULL DATE
 SAL                                       NOT NULL NUMBER(7,2)
 COMM                                               NUMBER(7,2)
 DEPTNO                                    NOT NULL NUMBER(2)
 EFF_DATE                                           DATE
 END_DATE                                           DATE

最后两列用于查看数据库中记录“逻辑上有效”的时间段。使用触发器

完成实现
  • 每个插入/更新都转换为 “使当前行过期(更新)+ 插入新行“
  • 每次删除都是 转换为“过期电流” 行“

如果您只想跟踪某些列的更改,最后一种方法可能会解决您的目的(例如,假设只有部门和工资变化都是您关注的)。

不要选择这样的型号。 (Do not将每个列更改存储为单独的行) http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1769392200346820632