#sql #database #postgresql #nosql #marketplace
#sql #База данных #postgresql #nosql #Магазин
Вопрос:
В настоящее время я разрабатываю службу каталогов (базу данных SQL) и пытаюсь объединить SQL и NoSQL для хранения данных, например, для «Таблицы элементов формы поля данных».
Служба каталогов:
- Таблица Item_type позволяет выбирать различные типы элементов, такие как простой, переменный, цифровой…
- Таблица атрибутов не имеет прямого отношения к таблице item, но они используются для заполнения атрибута, поданного в таблице item, и сохранения их в формате JSON.
- Поле данных в таблице item является полем jsonb, оно используется для хранения данных, таких как переменные продукты с их ценой, количество, связанное с ценой…
- RelatedStoreID — это идентификатор хранилища из службы store.
Вопросы:
- хорошо ли хранить атрибуты в поле json, особенно если эти атрибуты будут использоваться для индексации?
- Как я могу улучшить дизайн?
Комментарии:
1. Короткая версия, не делайте этого. В более длинной версии использование JSON внутри поля просто скрывает структуру данных и заставляет вас иметь с ней дело каждый раз, когда вы распаковываете данные. Сделайте структуру явной в виде таблиц и избавьте себя от головной боли в будущем.
2. @AdrianKlaver Спасибо за ваш отличный комментарий, JSON — это простое решение, позволяющее избежать большого количества объединений.
3. Нет, это не так, вам все равно придется «присоединять» эту информацию, когда вы извлекаете
JSON
и присваиваете ее табличной информации. Если вы хотите упростить конечный результатSQL
, тогда создайте функции, которые возвращают нужные вам данные в верхний запрос.4. Хранение структурированной информации в формате JSON уменьшает количество соединений с помощью процесса, называемого денормализацией . Однако соединения не являются проблемой, реляционные базы данных предназначены для эффективного выполнения соединений. Если вам регулярно требуется доступ к компонентам JSON, вы хотите использовать их в
WHERE
или условиях соединения или хотите наложить на них ограничения, вы обнаружите, что это либо сложно, либо вообще неэффективно работает.5. Я говорил о JSON, хотя это применимо ко всем составным типам данных.
jsonb
также затронуто. Да, вы можете ее проиндексировать, поэтому определенныеWHERE
условия будут работать нормально, но недостатки и ограничения будут болезненными.