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