Это называется EAV .
Вы можете найти некоторые вопросы о EAV и SQL Server здесь на SO:
Это тема, в которой у многих людей разные мнения.
Некоторые скажут, что вам следует придерживаться Product_%ProductTypeId%
таблиц, а некоторые скажут, что ваш ProductTypeColumns
стол - лучший способ.
По сути, я нахожусь в ProductTypeColumns
лагере.
Мы используем нечто подобное и на работе:
Наша таблица содержит атрибуты для элементов заказа (более миллиона элементов заказа и более 250 миллионов атрибутов), и мы используем их уже почти десять лет.
Недостатки: отсутствие безопасности типов (как вы уже упоминали) и запрос может быть немного сложнее .
Но для нас это единственный возможный способ, потому что у нас более 1000 атрибутов, более 100 продуктов, и каждый продукт может иметь от 100 до 300 атрибутов. С такими размерами таблица атрибутов является единственным возможным способом.
Но, вероятно, это не лучшее решение для всех, и я не знаю, будет ли это лучшим решением для вас.
Если ваше количество продуктов и специальных атрибутов не так уж велико, возможно, вам удастся избежать первого предложения (Product_%ProductTypeId%
таблицы).
Это, безусловно, будет проще сделать запрос, но, возможно, это не вариант, если существует слишком много возможных комбинаций продуктов и атрибутов.
Как часто, это зависит.