1

我有一个不同的情况,a category可以a sub categorymore than one category。我应该如何设计这个?

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

--Category--

Id
ParentCategoryId
CategoryName

提前致谢,

4

2 回答 2

2

对此的标准 SQL 解决方案是交叉表。您将有两个表、categories 和 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)
于 2012-07-21T14:20:59.027 回答
1

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

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

接着

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

在第一个中,您将只保存项目的类别,但在第二个中,您还将将每个项目与其类别的超级类别相关联,因此如果项目具有类别,您可以检查哪个只是单个查询或不。

于 2012-07-21T14:26:40.807 回答