Сначала создайте Свойство . Это будет содержать все свойства. Он должен иметь (как минимум) столбец «Имя» и столбец «Тип» («строка», «логическое значение», «десятичное число» и т. Д.). Примечание: первичные ключи подразумеваются для всех этих таблиц.
Далее создайте таблицу CategoryProperty . Здесь вы сможете назначить свойства для категории. Он должен иметь следующие столбцы: CategoryID, PropertyID. Оба внешних ключа.
Затем создайте таблицу Category . Это описывает категории. Он должен иметь столбец Имя и, возможно, некоторые другие столбцы, такие как Описание.
Затем создайте таблицу ProductCategory . Здесь вы будете назначать категории для каждого продукта. Он должен иметь следующие столбцы: CategoryID, ProductID. Оба внешних ключа.
Затем создайте таблицу PropertyValue . Здесь вы «создадите экземпляр» свойств и дадите им значения. Столбцы включают ProductID, PropertyID и PropertyValue. Первичный ключ может состоять из ProductID и PropertyID.
Наконец, создайте таблицу Product , которая просто описывает каждый продукт со столбцами, такими как Имя, Цена и т. Д.
Обратите внимание, что для каждого отношения есть отдельная таблица. Если вам нужна только одна категория для каждого продукта, вы можете отказаться от таблицы ProductCategory и просто поместить поле CategoryID в таблицу Product. Аналогично, если вы хотите, чтобы каждое свойство принадлежало только одной категории, вы можете поместить столбец PropertyID в таблицу Category и избавиться от таблицы CategoryProperty.
Наконец, вы не сможете проверить тип данных для каждого свойства, поскольку каждое свойство имеет свой тип (и это строки, а не столбцы). Поэтому просто сделайте столбец PropertyValue строкой и затем выполните проверку в качестве триггера или в своем приложении, проверив столбец Тип таблицы свойств для этого свойства.