Хранение и выборка параметров фильтрации в БД
Задача: имеется таблица продуктов
CREATE TABLE Products (
id UUID NOT NULL,
name VARCHAR(256) NOT NULL,
shop VARCHAR(256) NOT NULL,
PRIMARY KEY(id)
);
Нужно определить - как хранить фильтры к этим продуктам в БД с учетом следующего:
Первое условие - фильтры бывают следующие:
- фильтр продуктов по полю name - допускаются только те продукты, наименования которых встречаются в заданном массиве строк.
- фильтр продуктов по полю shop - допускаются только те продукты, магазины которых встречаются в заданном массиве строк.
- фильтры в пунктах 1 и 2 можно комбинировать с применением булевых операций И, ИЛИ, НЕ. Например:
['name a','name b'] И НЕ ['shop c'] ИЛИ НЕ(['name 1'] И ['shop 2', 'shop z'])
Второе условие - иногда для фильтров нужно будет выполнять такой запрос:
Задается массив с наименованиями продуктов. Нужно найти все фильтры, которым соответствует хотя бы один продукт, наименование которого встречается в заданном массиве.
Что не получается: т.к. фильтры могут представлять собой сложное логическое выражение, то я решил представить их в виде дерева - где узлами являются логические операции, а листьями фильтры типов 1 и 2. Я посчитал, что для хранения иерархической структуры хорошо подойдет тип JSONB. Собственно с сохранением фильтров у меня проблем не возникло. Однако с таким подходом я не могу понять, как построить описанный в задаче запрос.