类别数据库设计

时间:2015-02-12 16:18:22

标签: sql database database-design

我是数据库设计的新手,我需要一些帮助才能解决问题。对不起,如果这个问题已经得到解答,我一直在搜索,但没有成功。

这是最新情况的简化情景: 它是一个ITEM数据库,每个项目可以属于一个,两个,三个......或5个级别的类别结构(层次结构),例如:

`Product     | Category1 | Category 2 | Category 3 | Category 4 | Category 5
 ClassicLens   Clothing    Men          Accesories   Summer
 Old Lens      Clothing    Men          Accesories
 Phone 2G      Cell Phones Locked       2G
 Pulp Fiction  Movie       DVD          

假设我有三个表ITEM,CATEGORY和CATEGORY_HIERARCHY,其中包含以下模式:

ITEM
-----------
Id_Item (PK),
Id_Category_Hierarchy (FK)
Name

CATEGORY_HIERARCHY
------------
Id_Category_Hierarchy (PK),
Id_Category1 (IX) (FK),
Id_Category2 (IX) (FK),
Id_Category3 (IX) (FK),
Id_Category4 (IX) (FK),
Id_Category5 (IX) (FK)

CATEGORY
------------
Id_Category (PK),
Name

正如您所看到的,我强制使用唯一索引,只能存在category1,category2,... category5的一个组合。

这种方法可行,但我敢打赌,这种方案有更好的解决方案。 你怎么看? 任何帮助/意见将不胜感激!

我无法将所有类别分组到不同的表中,因为这将是无穷无尽的。

编辑:我忘了提到数据库是Access + VBA,递归解决方案会起作用吗?我猜SQL查询会更复杂。

1 个答案:

答案 0 :(得分:3)

我可能会选择更像这样的东西:

Product
----------
ProductId
Name

Categories
----------
CategoryId
Name
ParentCategory --Recursive Key

ProductCategories
-----------------
ProductId
CategoryId

任何时候你发现自己一遍又一遍地添加columnName_{some number}这样的东西,可能是时候把那组列分成它自己的表了。我几乎可以保证,在某些时候你会得到一个请求,从最多5个类别到更大的类别。使用上面的表结构将允许您在不做任何重大更改的情况下执行此操作。

相关问题