Я знаю, что это старый - однако могут быть и другие читатели ...
Я видел баланс EAV для атрибута смоделированного подхода. Ну, это все еще EAV. «EAV - это как наркотики» - это правда. Так что подумайте еще раз - и давайте будем действительно агрессивными:
Мне все еще нравилось приложение супертипа, где многие таблицы используют один и тот же первичный ключ от генератора ключей. Давайте снова использовать этот. Так как насчет создания новой таблицы для каждого набора атрибутов, причем все они имеют первичные из одного и того же генератора ключей? Например. у вас будет таблица с полями «цвет, труба», другая таблица «фитинги, труба» и так далее. Требование «изменчивость атрибутов» в любом случае требует тщательно (автоматически) поддерживаемого словаря данных.
Этот подход полностью нормализован и может быть полностью автоматизирован. Вы можете поддерживать проверки, материализуются ли уже определенные наборы атрибутов в виде таблицы путем хэширования кластеров имен атрибутов, например. crc32 (нижний ('color ~ Fittingize ~ pipe')), где имена атрибутов должны быть отсортированы в алфавитном порядке. Конечно, это требует наличия хэша в словаре данных. На основе словаря данных можно искать каждый объект (используя 'UNION'), особенно если словарь данных является таблицей. Наличие словаря данных в качестве таблицы также позволяет вам использовать его первичный (суррогатный) ключ в качестве основы для уникальных имен таблиц, чтобы в итоге получить таблицы, такие как «attribute1», «attribute2», ... Большинство баз данных в настоящее время поддерживают несколько миллиардов таблиц - поэтому мы вроде как сэкономить на этом. Вы можете даже иметь каталог товаров с очень распространенными атрибутами, которые ссылаются на расширенные таблицы атрибутов.
Открытым выпуском являются наборы данных 1: n. Боюсь, вам нужно отсортировать их в отдельных таблицах. Однако это очень сильно зависит от вашего представления данных и стратегии запросов. Должны ли они всегда быть представлены в виде разделенной запятыми строки, прикрепленной к продукту, или вы хотите, например. быть в состоянии запросить все продукты определенной сертификации?
Прежде чем использовать этот подход, обратите внимание на следующее: он предназначен для случаев использования, когда у вас очень высокая изменчивость атрибутов - только по количеству и качеству. Также было задано, что вы не можете знать большинство атрибутов в тот момент, когда создается решение. Поэтому не обсуждайте это в контексте, где вы можете смоделировать свои атрибуты заранее, что позволило бы вам гораздо лучше сбалансировать компромиссы.