Хранение и выборка параметров фильтрации в БД

Задача: имеется таблица продуктов

CREATE TABLE Products (
    id UUID NOT NULL,
    name VARCHAR(256) NOT NULL,
    shop VARCHAR(256) NOT NULL,
    PRIMARY KEY(id)
);

Нужно определить - как хранить фильтры к этим продуктам в БД с учетом следующего:

Первое условие - фильтры бывают следующие:

  1. фильтр продуктов по полю name - допускаются только те продукты, наименования которых встречаются в заданном массиве строк.
  2. фильтр продуктов по полю shop - допускаются только те продукты, магазины которых встречаются в заданном массиве строк.
  3. фильтры в пунктах 1 и 2 можно комбинировать с применением булевых операций И, ИЛИ, НЕ. Например:
    ['name a','name b'] И НЕ ['shop c'] ИЛИ НЕ(['name 1'] И ['shop 2', 'shop z'])

Второе условие - иногда для фильтров нужно будет выполнять такой запрос:
Задается массив с наименованиями продуктов. Нужно найти все фильтры, которым соответствует хотя бы один продукт, наименование которого встречается в заданном массиве.

Что не получается: т.к. фильтры могут представлять собой сложное логическое выражение, то я решил представить их в виде дерева - где узлами являются логические операции, а листьями фильтры типов 1 и 2. Я посчитал, что для хранения иерархической структуры хорошо подойдет тип JSONB. Собственно с сохранением фильтров у меня проблем не возникло. Однако с таким подходом я не могу понять, как построить описанный в задаче запрос.


Ответы (0 шт):