Добрый день.
Нужен совет от людей, разбирающихся в проектировании баз данных. Исходные условия таковы:
1) есть
один тип товара (и других не будет)
2) у товара
фиксированное и известное количество свойств (максимум 2 разных цвета, форма, материал)
В дальнейшем по данным свойствам необходимо выполнять поиск товаров.
Самое очевидное решение — добавить столько полей в таблицу product, сколько у нас свойств:
PRODUCT
- id
- name
- color_one
- color_two
- style
- fabric
Но дальше возникает вопрос — как поступать с представлением свойств? Делать поля VARCHAR и позволять пользователю самостоятельно вписывать значения не слишком правильно — будут опечатки, неизбежно появятся дубли значений. К тому же, количество возможных значений для каждого из свойств не так уже велико (т.е. проще заранее составить список возможных значений для каждого свойства и потом уже просто выбирать значение из списка).
Создавать отдельные таблицы для каждого свойства (COLOR, FABRIC, STYLE) тоже кажется лишним. Поэтому пока пришёл к такому решению:
PROPERTY
- id
- property_name
- property_value
И поля в таблице PRODUCT просто содержат ссылки на записи из таблицы PROPERTY. Нормальное ли это решение? Возможно есть способы сделать это лучше?
PS: да, понимаю, что по сути между PRODUCT и PROPERTY получается связь MANY-TO-MANY и можно вообще выкинуть поля, представляющие свойства, из таблицы PRODUCT, а связь реализовать через ассоциативную таблицу PRODUCT_PROPERTY, но такое решение уже кажется слишком громоздким для данной задачи.