Контроль версий контента
Я только начинаю проект, я хотел бы иметь небольшой менеджер контента с контролем версий. Однако я не знаю, как лучше всего моделировать базу данных.
У меня есть таблица содержимого, которая содержит следующие поля: идентификатор первичного ключа serial, content_id int (поле для идентификации другого содержимого), заголовок varchar, longtext содержимого, версия int по умолчанию '1', дата создания_даты,
Я видел, как некоторые CMS разделяют ревизии в другой таблице, чем реальная ревизия. Как лучше? Есть ли оптимизированный способ?
Спасибо!
2 ответа
Я разработал что-то вроде этого, и вот суть этого;
- Я создаю зеркальную таблицу для каждой таблицы, для которой требуется контроль версий на уровне строк. Допустим, у вас есть таблица CUSTOMER. Ваша таблица контроля версий зеркала будет VER_CUSTOMER
- Каждая таблица, в которой я хочу иметь контроль версий на уровне строк, имеет столбец с именем RECORD_ID (GUID)
- Когда запись вставляется в эту таблицу, я генерирую новый GUID и заполняю это поле. Новая запись также вставляется в таблицу VER_CUSTOMER с RECORD_ID как добавленная к естественному PK таблицы.
- Когда запись обновляется, я снова генерирую новый GUID. Заполните RECORD_ID с этим новым GUID. Обновленная запись также попадает в таблицу VER_CUSTOMER.
- Когда запись удалена, я отмечаю запись в таблице 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 ужасен в этом. Что-то, на что нужно обратить внимание.