数据库设计:单个表的常用外键

时间:2013-03-14 07:12:13

标签: oop database-design foreign-keys

我仍然是数据库设计的新手,我遇到了一些困难。

我有一个产品表,它有一个主要的类别和子类别属性,我很难为他们的数据库表和类图确定一个好的设计。

一个例子是Orange的main_category是“Fruit”,它的子类别是“果实”,另一个产品可能是Broccoli,它的main_category是“Vegetable”,它的子类别是“Fibrous Vegetables”。所以我认为子类别也在main_category下,根据所选的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  |       =======================                      ^
=======================  --------------------------------------------------|

但是我对我目前的设计有疑问,并想询问你的意见,这个设计是否可以接受,或者是否有更好的设计方法。

另外,就OOP而言,这会是什么类型的关系?

1 个答案:

答案 0 :(得分:0)

由于子类别也是一个类别,您可以将它们全部放在一个表中。你可能有这样的设计,

Product(id, name)

Category(id, name)

ProductMaincategoryAssignments(productId, categoryId)

ProductSubcategoryAssignments(productId, categoryId)

此处 productId categoryId 是外键,引用产品中相应的 ID 类别表。