Я работаю над дизайном схемы электронной коммерции, где продавец обязан предоставить информацию о продукте, и эта информация может быть общей или производной от категории.То есть каждая категория должна иметь некоторые особенности, значения которых могут быть ограничены на выбор . Этот пост SO суммирует проблему и дизайн, который я тоже придумал.То есть:
Продукт
Product_ID, Name, Price, Photo, Category_ID
Категория
Category_ID, Name, Parent_ID, isLeafCategory (only a leaf category has products assigned)
Category_Field
Category_Field_ID, Category_ID, Name, Type, Values (range of values to choose from)
Product_Category_Field_Value
ID, Product_ID, Category_ID, Category_Field_ID, Value
Например, предположим, что для категории «Таблицы» имеются следующие особенности и ограничения:
| category_id (ID) | name (string) | type (`enum` field) | values (array of strings) | isRequired (Boolean) |
|-------------------|--------------------|---------------------|---------------------------------------------------|----------------------|
| 1 | "Color" | SELECT | ["red","black", "black gray", ... say 36 more] | True |
| 1 | "Shape" | SELECT | ["Rectangular","Round","Square", ... say 19 more] | True |
| 1 | "Storage included" | BOOLEAN | ["YES", "NO"] | False |
| 1 | "Seating capacity" | INT | ["0","8"] | False |
| 1 | "Brand" | SELECT | ["Ikea","Godrej", ... say 1024 more] | True |
| 1 | "Suitable for" | SELECT_MULTIPLE | ["ADULT","CHILDREN","DINING", ... say 6 more] | False |
Вопросы:
- Является ли использование столбца
type
(enum
) правильным способом ограничения HTML-форм?Или, должны ли поля формы быть предметом только внешнего интерфейса разработчика, и это поле не нужно в БД? - Является ли использование массива строк правильным способом управления ограничениями на диапазон значений для типов данных, таких как
boolean
и number
?Или следует управлять этими видами ограничений на уровне приложений и серверов, а не в БД? - Следует ли сохранять значения для элемента категории в отдельной таблице, поскольку размер массива может быть очень большим (например, "бренды")?
РЕДАКТИРОВАТЬ: По вопросам 1и, в частности, 2, я имею в виду, если мне следует подумать о сопоставлении всех возможностей с enum
и диапазонами?
РЕДАКТИРОВАТЬ 2: Что касается заключительных запросов, по крайней мере, дайте мне знать в комментариях, что так очевидно илинеправильно об этих вопросах, потому что мне стоит их задавать?