Я думал о том, чтобы убрать ребенка
таблица сущностей и хранение их в виде XML
данные в поле родительского объекта
таблица
Каждый раз, когда вы меняете родителя, вы создаете копию дочерних: если родительские данные сильно изменяются, то вы довольно быстро истощаете свое хранилище. Кроме того, хранение всех дочерних изменений в одной родительской записи может привести к тому, что родительский объект будет раздутым (поскольку имеет тенденцию иметь много дочерних элементов), что может иметь значение для производительности извлечения данных.
Существует много разных способов хранения версионных данных, но они делятся на две категории:
- текущая версия в одном магазине, исторические версии в другом магазине
- все версии в одном магазине
Выбор между этими подходами зависит от того, что вы хотите сделать с историческими версиями. Они там только для отката? Или пользователи будут регулярно просматривать изменения?
Еще одним осложнением, которое не всегда применимо, но которое, я думаю, может быть уместным здесь (из-за предложенного вами решения), является взаимосвязь между родительскими и дочерними изменениями: когда вы показываете историческую версию родителя, вам нужно показать соответствующие версии ребенка? И наоборот, если вы показываете старую версию ребенка, нужно ли показывать соответствующие версии его родителя (и родных братьев)?
Ключевым моментом, который вам нужно установить, является то, что большинство пользователей собирается делать большую часть времени? Приоритет это. Если наиболее распространенным вариантом использования является , посмотрите только текущие версии всех записей , тогда вам следует использовать отдельные таблицы для хранения версий.
Если вам нужно записать дочерние версии, которые применялись к данной родительской версии, вы можете ввести дополнительную таблицу инфраструктуры (parent_id, parent_version, child_id, child_version). Ведение этой таблицы не слишком обременительно, если у вас есть таблицы только для одного родителя и одного ребенка. Когда дело доходит до нескольких детей, вам нужно отследить.