Контроль версий контента - PullRequest
1 голос
/ 20 апреля 2011

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

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

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

Спасибо!

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

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

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

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

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

1 голос
/ 21 апреля 2011

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

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

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

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

...