为类别、子类别和相关图书设计数据库
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。
我个人更愿意使用我上面建议的方式,但可能只是因为我没有花时间真正理解这种行为。
我知道有几个与我提出的问题类似的问题得到了一些回答。但他们的做法看起来并不令人信服。
我的问题是如何为可以包含书籍的类别和也可以包含书籍的子类别构建数据库?
我已经设计了一个数据库,但我对这种方法不满意。因此,如果有经验的人给我一些建议或改进或完全不同的方法,我将不胜感激。
这是我的 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。
我个人更愿意使用我上面建议的方式,但可能只是因为我没有花时间真正理解这种行为。