Контроль версий контента

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

У меня есть таблица содержимого, которая содержит следующие поля: идентификатор первичного ключа serial, content_id int (поле для идентификации другого содержимого), заголовок varchar, longtext содержимого, версия int по умолчанию '1', дата создания_даты,

Я видел, как некоторые CMS разделяют ревизии в другой таблице, чем реальная ревизия. Как лучше? Есть ли оптимизированный способ?

Спасибо!

2 ответа

Решение

Я разработал что-то вроде этого, и вот суть этого;

  1. Я создаю зеркальную таблицу для каждой таблицы, для которой требуется контроль версий на уровне строк. Допустим, у вас есть таблица CUSTOMER. Ваша таблица контроля версий зеркала будет VER_CUSTOMER
  2. Каждая таблица, в которой я хочу иметь контроль версий на уровне строк, имеет столбец с именем RECORD_ID (GUID)
  3. Когда запись вставляется в эту таблицу, я генерирую новый GUID и заполняю это поле. Новая запись также вставляется в таблицу VER_CUSTOMER с RECORD_ID как добавленная к естественному PK таблицы.
  4. Когда запись обновляется, я снова генерирую новый GUID. Заполните RECORD_ID с этим новым GUID. Обновленная запись также попадает в таблицу VER_CUSTOMER.
  5. Когда запись удалена, я отмечаю запись в таблице CUSTOMER как DELETED (физически не удаляю запись). У меня есть столбец IS_DELETED на каждой таблице. Я установил для этого столбца значение ИСТИНА при попытке удаления записи. Снова копия удаленной записи также попадает в таблицу VER_CUSTOMER.

Таким образом, для каждой транзакции, которая у вас есть в этой таблице, у вас есть соответствующая запись в таблице VER_CUSTOMER с RECORD_ID и естественным PK таблицы в качестве PK. Например, если PK таблицы CUSTOMER имеет значение CUST_ID. PK VER_CUSTOMER будет составным CUST_ID и RECORD_ID.

Надеюсь это поможет...

Это уже существует, без базы данных:

  • gitit (написано на Haskell, использует git или darcs в качестве бэкэнда)
  • Икивики (написано на Perl, может использовать различные системы контроля версий в качестве бэкэнда)

Они оба с открытым исходным кодом, и оба имеют архитектуру плагинов, поэтому могут быть настроены для ваших конкретных потребностей. (Однако я использовал только gitit.)

Однако я хотел бы отметить, что git не идеален для создания версий больших двоичных файлов, и darcs ужасен в этом. Что-то, на что нужно обратить внимание.

Другие вопросы по тегам