Как лучше спроектировать бд?
Всего 3 таблицы:
2 таблицы: items и options
и одну "многие-ко-многим" (промежуточную): item_id, option_id (есть строка-"связка" - опция есть/включена у объекта)
Т.е. промежуточная таблица будет хранить только уникальные связи.
А быстрый поиск - можно делать как по опции, так и по айтему.
И добавить свойства или айтемы - проблем нет.
1
Разреженности таблицы не будет, тк у вас нет нула
EAV - для булевых оверкил
jsonb - оверкил по занимаемому месту