Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

RevisionDB: механизм версионности записей в БД MySQL 5 (ревизии) (Rin)
Author Message
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 184
   поощрить/наказать

Location: Москва

PostPosted: Mon Apr 20, 2009 10:49 am (написано за 5 минут 37 секунд)
   Post subject: RevisionDB: механизм версионности записей в БД MySQL 5 (ревизии)
Reply with quote

Механизм версионности записей в БД MySQL 5.

Актуальные данные и ревизии хранятся в одной таблице.

Преимущества такого подхода:
  1) Интеграция -- легко модернизировать существующий проект;
  2) Удобство -- нет второй таблицы, удобно менять свойства колонки, добавлять/удалять колонки, уникальные и внешние ключи;
  3) Надёжность -- ревизии, как и актуальные данные, полностью сохраняют целостность данных (при наличии внешних ключей).

Недостатки такого подхода:
  Увеличение кол-ва записей в таблице и, как следствие, более медленные выборки записей из таблицы

Возможности:
  1. Добавление/обновление ревизии при обновлении актуальной записи
  2. Откат ревизии (восстановление актуальной записи из ревизии)
  3. Отслеживание дубликатов
  4. Ограничение на время, в течение которого обновление актуальной записи приведёт к обновлению последней ревизии, а не к добавлению новой ревизии
  5. Ограничение на максимальное кол-во ревизий для одной записи
  6. Ограничение на максимальное время жизни ревизий
.
Пример таблицы (шаблон):
Code (SQL): скопировать код в буфер обмена
  CREATE TABLE `t` (
    `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `ref_id` int(10) UNSIGNED DEFAULT NULL COMMENT ' ( )  `id`',
    `ref_uniq_part` tinyint(1) UNSIGNED DEFAULT '1' COMMENT '       ,      (  NULL)  ',
    `ref_created` datetime DEFAULT NULL COMMENT '    ',
    `caption` varchar(255) DEFAULT NULL,
    -- ...
    PRIMARY KEY (`id`),
    UNIQUE KEY `caption` USING BTREE (`caption`,`ref_uniq_part`),
    KEY `ref_id__ref_created` USING BTREE (`ref_id`,`ref_created`),
    CONSTRAINT FOREIGN KEY (`ref_id`) REFERENCES `t` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
.
Пример выборки только актуальных записей (срез):
Code (SQL): скопировать код в буфер обмена
SELECT * FROM t WHERE ref_id IS NULL



RevisionDB-1.1.0.rar
 Description:

Download
 Filename:  RevisionDB-1.1.0.rar
 Filesize:  17.68 KB
 Downloaded:  582 Time(s)



Last edited by Rin on Thu Aug 06, 2009 2:21 pm; edited 3 times in total
Back to top
View user's profile Send private message Send e-mail
Rin
Участник форума



Joined: 01 Jun 2005
Posts: 515
Карма: 184
   поощрить/наказать

Location: Москва

PostPosted: Thu Apr 23, 2009 4:48 pm (спустя 3 дня 5 часов 59 минут; написано за 25 секунд)
   Post subject:
Reply with quote

1.1.0 / 2009-04-23
  1. Для таблиц БД, поддерживающих механизм ревизий, необходимо добавить новое служебное поле `ref_created`.
  2. Добавлен открытый метод columns().
  3. Добавлено ограничение на время, в течение которого обновление актуальной записи приведёт к обновлению последней ревизии, а не к добавлению новой ревизии
  4. Добавлено ограничение на максимальное кол-во ревизий для одной записи
  5. Добавлено ограничение на максимальное время жизни ревизий
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML