Я все еще новичок в разработке баз данных, и у меня с этим немного сложности.Дизайн базы данных: общие внешние ключи к одной таблице
У меня есть таблица продуктов, которая имеет атрибут главной категории и подкатегории, и у меня возникают трудности с определением хорошего дизайна для их таблиц базы данных и диаграммы классов.
Примером может служить основная статья Orange: «Фрукты», и это подкатегория будет «мякотью фруктов», а другой продукт может быть брокколи, а его основной_категорией будет «Овощи», а подкатегорией будет «Фиброзные овощи». Поэтому я считаю, что подкатегория также находится в main_category, где в зависимости от выбранной основной_каталинии может быть выбран список подкатегорий.
Мой текущий дизайн, как это:
======================= ======================= =====================
| PRODUCT | | SUBCATEGORY | | MAIN CATEGORY |
======================= ======================= =====================
| PK id | |PK id | |PK id |
| name | ---> | name | ---> | name |
| FK main_category_id | |FK main_category_id | =====================
| FK subcategory_id | ======================= ^
======================= --------------------------------------------------|
Но у меня возникают сомнения в моей нынешней конструкции и хотел бы спросить вашего мнения, является ли приемлемым этот проект или есть лучший способ проектирования этого ,
Также, с точки зрения ООП, какими были бы отношения?
Это действительно слишком много столбцов в ПРОДУКТЕ! Наличие ОСНОВНОЙ КАТЕГОРИИ и СУБПАТЕГОРИИ, как в ПРОДУКТЕ, дает дублируемую информацию, так как ОСНОВНАЯ КАТЕГОРИЯ полностью зависит от SUBCATEGORY. Теперь, удалив 'main_category_id', как вы могли бы найти имя главной категории для данного ПРОДУКТА? Идите, присоединяйтесь! –
Считается, что если есть больше, чем основные/подкатегории, структура BOM/Иерархия может быть более подходящей. –
Я был связан с моим дизайном диаграммы классов, когда я создал свой проект базы данных, так это значит, что хотя мой класс продукта имеет атрибут main_category, моя таблица продуктов также необязательно должна иметь его? –