Моя команда работает над модулем выставления счетов, где наши пользователи должны иметь возможность добавлять позиции в счет-фактуру и хранить эти позиции в нашей базе данных. Эти позиции можно редактировать после первоначального создания.Колонка JSON OR Традиционные столбцы
Позиция счета будет выглядеть примерно так.
LineItemName
EnteredBy
Quantity
CostPerUnit
Subtotal
Один из членов нашей команды предполагают, что мы храним данные строки в столбец JSON, а не в нескольких столбцах SQL. Его аргумент заключается в том, что будет проще хранить все данные позиции в одном столбце JSON, а не писать код, чтобы определить, какие позиции могут быть удалены, обновлены, перенаправлены или иным образом обработаны из исходного состояния базы данных.
Я раньше не работал с колонками JSON, и из того, что я могу сказать, при использовании этих функций возникает ряд проблем с производительностью, а также некоторые дополнительные сложности при построении запросов от столбца данных JSON. Нам придется отчитываться об этих позициях, поэтому производительность, безусловно, вызывает беспокойство. Мы также запускаем SQL Server 2012, который, как я понимаю, не содержит встроенной поддержки столбцов JSON, если мы не обновляемся до SQL Server 2016. Боковое замечание, скорее всего, мы перейдем к MYSQL в течение следующих 2-3 лет.
Может ли кто-нибудь дать некоторые рекомендации относительно того, что здесь правильный звонок? Мой инстинкт заключается в том, что мы должны использовать существующие методы и написать дополнительный код для обнаружения изменений базы данных, чтобы избежать головной боли проблем с производительностью и сложности отчетности позже.
Если у вас есть отдельные явные столбцы, вы сможете фильтровать свои данные по этим критериям или находить максимальное значение данного столбца или подсчитывать все вхождения определенного значения и т. Д. - все эти приятные, полезные реляционные операции. Если все сжимается вместе в JSON (или XML), это становится ** основным ** кошмаром. Я бы не рекомендовал его. –
Я не понимаю, как было бы проще отслеживать все эти обновления с помощью JSON. Вероятно, лучше всего оставить так же, как в SQL, но если вы хотите сохранить в одном столбце, почему бы не использовать XML вместо JSON, так как у SQL Server есть встроенная поддержка для этого? –
Если вы знаете, что вы и каждый клиент, которого вы имеете, никогда не захотите или не захотите фильтровать или анализировать данные вне приложения * когда-либо *, и БД в основном хранит его как прославленный двоичный код, тогда хорошо хранить структурированные данные в XML/JSON в базе данных. Да, есть методы для его анализа в SQL Server, но они не знают конечных пользователей. Многие средства отчетности, в том числе потенциальные сторонние инструменты, которые ваши клиенты могут использовать, также не будут поддерживать их. Убедитесь, что вы делаете то, что лучше для вашего приложения, а не просто избегаете объектно-реляционной проблемы, потому что вы хотите. –