2013-03-14 4 views
1

Я все еще новичок в разработке баз данных, и у меня с этим немного сложности.Дизайн базы данных: общие внешние ключи к одной таблице

У меня есть таблица продуктов, которая имеет атрибут главной категории и подкатегории, и у меня возникают трудности с определением хорошего дизайна для их таблиц базы данных и диаграммы классов.

Примером может служить основная статья 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 |  =======================     ^
======================= --------------------------------------------------| 

Но у меня возникают сомнения в моей нынешней конструкции и хотел бы спросить вашего мнения, является ли приемлемым этот проект или есть лучший способ проектирования этого ,

Также, с точки зрения ООП, какими были бы отношения?

+1

Это действительно слишком много столбцов в ПРОДУКТЕ! Наличие ОСНОВНОЙ КАТЕГОРИИ и СУБПАТЕГОРИИ, как в ПРОДУКТЕ, дает дублируемую информацию, так как ОСНОВНАЯ КАТЕГОРИЯ полностью зависит от SUBCATEGORY. Теперь, удалив 'main_category_id', как вы могли бы найти имя главной категории для данного ПРОДУКТА? Идите, присоединяйтесь! –

+0

Считается, что если есть больше, чем основные/подкатегории, структура BOM/Иерархия может быть более подходящей. –

+0

Я был связан с моим дизайном диаграммы классов, когда я создал свой проект базы данных, так это значит, что хотя мой класс продукта имеет атрибут main_category, моя таблица продуктов также необязательно должна иметь его? –

ответ

0

Поскольку подкатегория также является категорией, вы можете иметь их все в одной таблице. Вы можете иметь конструкцию, как это,

Product(id, name)

Category(id, name)

ProductMaincategoryAssignments(productId, categoryId)

ProductSubcategoryAssignments(productId, categoryId)

Здесь PRODUCTID и CategoryId внешние ключи, которые ссылаются на соответствующие я dПродукт и Категория столы.

+0

Этот подход теряет информацию между категорией и подкатегорией и позволяет продукту быть частью подкатегории и категории, которые не относятся. –

+0

Точно так же, как сказал pst, будут подкатегории и основные категории, которые не могут быть связаны друг с другом. –

+0

Ох. Я просто подумал, что мы можем хранить все категории и подкатегории в одном отношении. Итак, нужно ли указывать связь между категорией и ее подкатегориями? Как отношения «один ко многим»? – sriyan

Смежные вопросы