В принципе в вашем случае подойдет скорее всего любая nosql база данных, вы спокойно сможете хранить на каждый товар обьект с массивом связанных товаров + каждый массив будет объектом с полями о степени соответствия.
Дело в другом, как вы будете их выбирать, по одному, или по условию связи? Если по связи, то это в принципе ресурсоемкая операция, тогда лучше подобрать реляционную бд, там будет табличка id, link_id, level
В таком случае вы сможете спокойно выбирать по уровню связи, например.
Бд лучше выбирайте не по "как лучше хранить", а по "как проще выбирать", и тут уже появляется вопрос, по каким критериям вы будете выбирать?