Как я могу улучшить дизайн этой базы данных для простого каталога продуктов с фасетным поиском? - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь найти лучший способ организовать своего рода каталог продукции. Я читал все об общем шаблоне, используемом для каталога продуктов, но мой случай другой. Это не электронная коммерция, а просто библиотека с описанием продуктов.

Каждый день провайдер выпускает ежедневный индекс с новыми продуктами. С помощью задачи в моем приложении rails я добавлю в базу данных новый продукт (или обновлю обновленные).

Каждый продукт является объектом Json, и этот объект Json содержит всю информацию . Не только продукт, но и организация внутри категорий ... Это json образец ...

{
   "msg":"OK",
   "data":{
      "Dictionary":{},
      "GeneralInfo":{},
      "Image":{},
      "Multimedia":[],
      "Gallery":[],
      "FeaturesGroups":[],
      "FeatureLogos":[],
      "ReasonsToBuy":[],
      "Reviews":[],
      "ProductRelated":[],
      "Variants":[],
      "ProductStory":[],
      "DemoAccount":true
   }
}

У меня есть изображения, у меня есть категория продукта, у меня есть таблица данных, я у меня есть все, что мне нужно для создания своего "демонстрационного" представления, в котором я показываю отдельный продукт. документы. Я прочитал какой-то учебник и сейчас поставил параметр MongoDB в режим ожидания, мое приложение использует Postgres, и я не хочу добавлять другую базу данных, если она действительно не нужна.

Кстати, мое решение.

Для «демонстрации продуктов» я начинаю создавать таблицу с двумя атрибутами: кодом продукта и полем jsonb, в котором я храню весь свой продукт. Это просто, я использую название продукта для URL-адреса, а в представлении я использую данные json.

Но в моем каталоге есть еще две особенности: возможность сравнения от 2 до 4 продуктов одной категории и некоторый многогранный поиск. Вот мои сомнения.

Чтобы сравнить продукт из той же категории, я могу использовать компонент Vue, но мне нужно запросить категорию. Категория теперь является атрибутом моего товара json data, это узел внутри GeneralInfo. Поэтому я думаю «извлечь» категорию из json в индексированном атрибуте моей таблицы продуктов.

Мне также нужно добавить базовый c фасетный поиск технических характеристик. Технические характеристики находятся внутри узла FeaturesGroups моего объекта продукта. Я читал об ElasticSearch, я читал о MongoDB anche. Я знаю, что Mon go имеет встроенную функцию фасетного поиска. Но, как я уже говорил, я никогда ее не использую.

Мое решение на данный момент состоит в том, чтобы использовать другие данные, предоставляемые моим поставщиком таблицы данных, дерево FeaturesGroups для каждой категории и Feature для каждой FeaturesGroups, с минимальным и максимальным значением, вычисленным для продуктов базы данных.

Итак, резюмируем, три таблицы:

Products:
  id
  name
  category_id
  data (jsonb)

Category

FeaturesGroups
  category_id
  features (jsonb) -> every feature with min and max value

Для фасетного поиска я создаю фильтры, используя таблицу FeaturesGroups, а затем запрашиваю поле данных таблицы продуктов.

Что-то не так с этим подходом? Есть ли что-то, что я могу улучшить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...