设计类别,子类别和相关书籍的数据库

时间:2015-03-22 19:02:41

标签: mysql sql database-design database-schema

我知道有几个类似于我要求的问题的答案。但他们的方法看起来并不令人信服。

我的问题是如何构建一个可以拥有书籍的类别的数据库以及一个也可以有书籍的子类别?

我已经设计了一个数据库,但我不相信这种方法。如果有经验的人给了我一些建议或改进或完全不同的方法,我真的很感激。

这是我的表格的样子(请记住这不是实际的代码)

TABLE Category
    ID
    user_id -- Foreign key from user
    name

TABLE SubCategory
    ID
    user_id
    category_id
    name

本书的表格设计相同。

2 个答案:

答案 0 :(得分:7)

没有理由为“类别”设置多个表,无论它是顶级类别还是子类别。他们都只是“类别”。

因此,有一个名为“categories”的表,其中包含parent_id字段:

// categories table
id
name
user_id
parent_id

如果要提取所有顶级类别,只需针对categories表运行查询,条件为parent_id为空。

然后,当您想要提取子类别时,只需针对categories表运行查询,条件为parent_id = 123(或其他)。

这不仅可以使一切变得更加清洁,而且还可以在您想要继续添加子子子类别等的情况下进行扩展。


另一种选择是使用CakePHP's TreeBehavior

我个人只是使​​用我上面建议的方式,但可能只是因为我没有花时间真正理解这种行为。

答案 1 :(得分:2)

如果parent_category为空,那么它是顶级。如果它是非null,那么它是一个子类别。

TABLE Category
  ID
  name
  parent_category