为类别、子类别和相关图书设计数据库

Design database for category, subcategory and associated books

我知道有几个与我提出的问题类似的问题得到了一些回答。但他们的做法看起来并不令人信服。

我的问题是如何为可以包含书籍的类别和也可以包含书籍的子类别构建数据库?

我已经设计了一个数据库,但我对这种方法不满意。因此,如果有经验的人给我一些建议或改进或完全不同的方法,我将不胜感激。

这是我的 table 的样子(切记这不是实际代码)

TABLE Category
    ID
    user_id -- Foreign key from user
    name

TABLE SubCategory
    ID
    user_id
    category_id
    name

本书的table具有相同的设计。

如果parent_category 为空则它是顶级。如果它非空则它是一个子类别。

TABLE Category
  ID
  name
  parent_category

"categories" 没有理由超过一个 table,无论是顶级类别还是子类别。他们都只是 "categories".

所以,有一个名为 "categories" 的 table,带有一个 parent_id 字段:

// categories table
id
name
user_id
parent_id

当您想要提取所有顶级类别时,只需 运行 您针对 categories table 的查询,条件是 parent_id 为空。

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

这不仅让一切变得更干净,而且还允许扩展,以防您想继续添加 sub-sub-sub-sub 类别...等等


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

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