Рекомендации по разработке базы данных SQL для службы каталогов для торговой площадки

#sql #database #postgresql #nosql #marketplace

#sql #База данных #postgresql #nosql #Магазин

Вопрос:

В настоящее время я разрабатываю службу каталогов (базу данных SQL) и пытаюсь объединить SQL и NoSQL для хранения данных, например, для «Таблицы элементов формы поля данных».

Служба каталогов:

  • Таблица Item_type позволяет выбирать различные типы элементов, такие как простой, переменный, цифровой…
  • Таблица атрибутов не имеет прямого отношения к таблице item, но они используются для заполнения атрибута, поданного в таблице item, и сохранения их в формате JSON.
  • Поле данных в таблице item является полем jsonb, оно используется для хранения данных, таких как переменные продукты с их ценой, количество, связанное с ценой…
  • RelatedStoreID — это идентификатор хранилища из службы store.

Вопросы:

  1. хорошо ли хранить атрибуты в поле json, особенно если эти атрибуты будут использоваться для индексации?
  2. Как я могу улучшить дизайн?

введите описание изображения здесь

Комментарии:

1. Короткая версия, не делайте этого. В более длинной версии использование JSON внутри поля просто скрывает структуру данных и заставляет вас иметь с ней дело каждый раз, когда вы распаковываете данные. Сделайте структуру явной в виде таблиц и избавьте себя от головной боли в будущем.

2. @AdrianKlaver Спасибо за ваш отличный комментарий, JSON — это простое решение, позволяющее избежать большого количества объединений.

3. Нет, это не так, вам все равно придется «присоединять» эту информацию, когда вы извлекаете JSON и присваиваете ее табличной информации. Если вы хотите упростить конечный результат SQL , тогда создайте функции, которые возвращают нужные вам данные в верхний запрос.

4. Хранение структурированной информации в формате JSON уменьшает количество соединений с помощью процесса, называемого денормализацией . Однако соединения не являются проблемой, реляционные базы данных предназначены для эффективного выполнения соединений. Если вам регулярно требуется доступ к компонентам JSON, вы хотите использовать их в WHERE или условиях соединения или хотите наложить на них ограничения, вы обнаружите, что это либо сложно, либо вообще неэффективно работает.

5. Я говорил о JSON, хотя это применимо ко всем составным типам данных. jsonb также затронуто. Да, вы можете ее проиндексировать, поэтому определенные WHERE условия будут работать нормально, но недостатки и ограничения будут болезненными.