我知道有几个类似于我要求的问题的答案。但他们的方法看起来并不令人信服。
我的问题是如何构建一个可以拥有书籍的类别的数据库以及一个也可以有书籍的子类别?
我已经设计了一个数据库,但我不相信这种方法。如果有经验的人给了我一些建议或改进或完全不同的方法,我真的很感激。
这是我的表格的样子(请记住这不是实际的代码)
TABLE Category
ID
user_id -- Foreign key from user
name
TABLE SubCategory
ID
user_id
category_id
name
本书的表格设计相同。
答案 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