Моделирование базы данных: найдите, как выглядят данные в заданной дате и времени - PullRequest
1 голос
/ 23 июня 2011

если у меня есть table1, table2, table3..table50, которая хранит различную информацию о продукте

Каков эффективный способ отслеживания постепенных изменений таким образом, что если я захочу вернуться и посмотреть, как этот конкретный продукт выглядел в определенную дату, это было бы очень быстро и точно. я хотел бы отслеживать изменения таким образом, чтобы их можно было очень быстро получить, а также уменьшить слишком много избыточности.

1 Ответ

0 голосов
/ 24 июня 2011

1. Если вы используете Oracle 11g, технология Oracle Flashback - это функция, которая позволяет вам это делать. 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

Где последние два столбца используются для определения того, в течение какого периода времени запись была «логически активной» в базе данных. Реализация осуществляется с помощью триггеров, где

  • Каждая вставка / обновление конвертируется в «Истекает текущая строка (обновление) + Вставить новую строку "
  • Каждое удаление Преобразовано в «Истекает текущий» строка "* * 1016

Последний подход может решить вашу задачу, если вы хотите отслеживать изменения только в некоторых столбцах (например, допустим, вас интересуют только изменения в отделах и окладах).

Пожалуйста, Не Выберите модель, подобную этой. (Do not Сохранить каждое изменение столбца как отдельную строку) http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1769392200346820632

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...