У нас есть веб-приложение, построенное поверх базы данных SQL. К объектам нескольких различных типов можно добавлять комментарии, и некоторые из этих объектов требуют отслеживания на уровне полей, аналогично тому, как изменения полей отслеживаются в большинстве систем отслеживания проблем (например, статус, назначение, приоритет). Мы хотели бы показать, кем произведено изменение, каким было предыдущее значение и какое новое значение.
На чистом уровне проектирования было бы проще всего отслеживать каждое изменение любого объекта в универсальной таблице со столбцами для типа объекта, первичного ключа объекта, первичного ключа пользователя, внесшего изменение, имени поля и имени поля. старые и новые значения. В нашем случае они также могут иметь идентификатор комментария, если пользователь вводил комментарий при внесении изменений.
Однако, насколько быстро эти данные могут расти, является ли это лучшей архитектурой? Какие методы обычно используются для добавления такого типа функций в уже крупномасштабное приложение?
[Изменить] Я начинаю награду за этот вопрос, главным образом потому, что я хотел бы выяснить, в частности, какая архитектура является лучшей с точки зрения масштабирования. Ответ Тома Х. информативен, но рекомендуемое решение кажется довольно неэффективным по размеру (новая строка для каждого нового состояния объекта, даже если многие столбцы не изменились) и невозможным, учитывая требование, что мы должны быть возможность отслеживать изменения в полях, созданных пользователем. В частности, я, скорее всего, приму ответ, который может объяснить, как это реализовано в обычной системе отслеживания проблем (JIRA или аналогичной).