Как лучше всего хранить эту структуру данных? - PullRequest
1 голос
/ 19 февраля 2010

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

Мне нужно создать версию этой структуры данных в моей базе данных для функциональности вики.Это было бы просто, если бы это был только один стол, но так как это два, это немного сложнее.Я думал об удалении дочерней таблицы сущностей и сохранении их в виде данных XML в поле родительской таблицы сущностей.Мне не нужно искать по этим дочерним объектам.Это хорошая или плохая идея?Есть ли лучшие способы хранения моих данных?

1 Ответ

1 голос
/ 19 февраля 2010

Я думал о том, чтобы убрать ребенка таблица сущностей и хранение их в виде XML данные в поле родительского объекта таблица

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

Существует много разных способов хранения версионных данных, но они делятся на две категории:

  • текущая версия в одном магазине, исторические версии в другом магазине
  • все версии в одном магазине

Выбор между этими подходами зависит от того, что вы хотите сделать с историческими версиями. Они там только для отката? Или пользователи будут регулярно просматривать изменения?

Еще одним осложнением, которое не всегда применимо, но которое, я думаю, может быть уместным здесь (из-за предложенного вами решения), является взаимосвязь между родительскими и дочерними изменениями: когда вы показываете историческую версию родителя, вам нужно показать соответствующие версии ребенка? И наоборот, если вы показываете старую версию ребенка, нужно ли показывать соответствующие версии его родителя (и родных братьев)?

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

Если вам нужно записать дочерние версии, которые применялись к данной родительской версии, вы можете ввести дополнительную таблицу инфраструктуры (parent_id, parent_version, child_id, child_version). Ведение этой таблицы не слишком обременительно, если у вас есть таблицы только для одного родителя и одного ребенка. Когда дело доходит до нескольких детей, вам нужно отследить.

...