2010-05-01 4 views
6

Я пытаюсь использовать простую базу данных mysql, но настраиваю ее так, чтобы каждое поле было подкреплено неограниченным числом версий. Лучший способ я могу проиллюстрировать это, заменив каждое поле каждой таблицы стеком всех значений, которые это значение когда-либо имело (каждое из этих значений должно быть временным). Я думаю, что это похоже на настройку контроля версий для всех моих данных.Как данные контроля версий, хранящиеся в mysql

Любые идеи о том, как это сделать?

+0

Возможный дубликат http://stackoverflow.com/questions/2724187/where-are-all-the-native-revisioned-databases –

ответ

7

Обычный метод «отслеживания любых изменений» в таблице заключается в добавлении триггерных процедур добавления/обновления/удаления в таблицу и сохранения этих записей в таблице истории.

Например, если ваша основная таблица данных «ItemInfo», вы также должны иметь таблицу ItemInfo_History, которая получает копию новой записи каждый раз, когда что-либо изменяется (через триггеры).

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

Вот некоторые примеры, они предназначены для SQL Server, но они демонстрируют логику:

Мои Repository table Мои Repository History table Мои Repository Insert trigger procedure Мой Repository Update trigger procedure

+0

Я еще точно не пойду за тобой, но вы познакомили меня с триггерами, и они, вероятно, будут тем, что я буду использовать. Спасибо – Shawn

+0

Добавлены ссылки на некоторые примеры, которые могут (надеюсь) сделать процесс более понятным. :-) –

1

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

+0

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

3

Хм, о чем вы говорите о созвучно Slowly Changing Dimension.

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

+0

Кажется, что медленно меняющаяся размерность требует, чтобы я копировал каждое поле в строке, даже если было изменено только одно из полей. Кажется немного расточительным, память wise – Shawn

+0

Ну, вот почему вы используете его для * медленно * изменения Габаритные размеры. – Ken

0

Возможно, инструмент поможет вам сделать это за вас. Посмотрите Nextep дизайнер:

http://www.nextep-softwares.com

С помощью этой IDE вы сможете делать снимки структуры базы данных и данных, и поставить его под контроль версий. После этого вы можете вычислить различия между любыми 2 версиями и сгенерировать соответствующий SQL, который может вставлять/обновлять/удалять ваши данные.

Возможно, это альтернативный способ достижения желаемого.

Смежные вопросы