#mysql #django #database-design #e-commerce #entity-attribute-value
Вопрос:
Пожалуйста, поделитесь со мной, так как я новичок в разработке баз данных. Я пытаюсь создать магазин электронной коммерции в Django с вариантами продуктов, как показано на прилагаемом изображении.
Для модели/таблицы ProductVariations я хотел бы иметь внешний ключ для параметров (который представлял бы что-то вроде размера), а затем на основе этого внешнего ключа я хотел бы иметь другой внешний ключ для значений параметров (например, маленький). Возможные значения для последнего внешнего ключа должны быть ограничены первым внешним ключом. Более конкретно, я не хочу, чтобы в раскрывающемся списке на сайте администратора отображалось «маленький, красный, синий, 32, 33, большой», когда предыдущий внешний ключ был «размер». В этом случае я бы хотел, чтобы он отображал только «маленький, большой».
Как мне это сделать? Я был бы признателен за любые идеи, относящиеся либо к Django, либо просто к дизайну базы данных в целом.
Комментарии:
1. Не разделяйся
Option
иOptionValue
. Прочитайте о EAV (Значение атрибута сущности); у него много проблем; вы также можете прочитать о том, как начали другие.2. Спасибо, Рик! Я прочитаю о подслушивании прямо сейчас. Мои размышления о разделении этих двух состояли в том, что я хотел бы создать ограничение таким образом, чтобы пользователь не добавлял 2 размера к одному и тому же варианту продукта, но мог добавить опцию размера и другой цвет. Поэтому я надеялся, что наличие unique=True в опции для размера предотвратит это, т. Е. Если бы существовала только одна сущность с записями «размер: маленький», «размер: большой», «цвет: красный», тогда им могло бы сойти с рук добавление двух размеров.