可以是多个类别的子类别的类别?

时间:2012-07-21 13:59:55

标签: database database-design

我的情况不同a category a sub category more than one category。我该如何设计呢?

下面的树形结构不能解决我的问题。我应该ParentCategoryId作为字符串,并且可以在其中包含多个类别ID。然后进行计算以解析父类别,或者您是否建议我另一种解决方案?解决这个问题的最佳解决方案是什么?

--Category--

Id
ParentCategoryId
CategoryName

提前致谢,

2 个答案:

答案 0 :(得分:2)

此标准SQL解决方案是一个交叉表。您将有两个表,类别和categories_x,如下所示:

categories
+------------+------------+
|categoryId  |name        |
+------------+------------+
|1           |foo         |
+------------+------------+
|2           |bar         |
+------------+------------+
|3           |huh         |
+------------+------------+

categories_x
+------------+------------+
|categoryId  |parentId    |
+------------+------------+
|3           |1           |
+------------+------------+
|3           |2           |
+------------+------------+

要获得类别3的父级,您的SQL查询将如下所示:

SELECT categoryId, name 
  FROM categories 
  WHERE categoryId IN (SELECT parentId FROM categories_x WHERE categoryId = 3)

答案 1 :(得分:1)

除了约翰·克拉克所说的,还有一个预先计算好的所有类别的表格,如:

Item Direct Categories
+------------+------------+
|itemId      |categoryId  |
+------------+------------+
|1           |1           |
+------------+------------+
|3           |2           |
+------------+------------+

然后

Item All Categories
+------------+------------+
|itemId      |categoryId  |
+------------+------------+
|1           |1           |
+------------+------------+
|3           |2           |
+------------+------------+

在第一个中,您只会保存商品的类别,但在第二个商品中,您还会将每个商品的类别的超级类别关联起来,这样您就可以检查哪个项目只有一个查询是否有类别。