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

And*_*raz 3 mysql sql database-design database-schema

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

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

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

我的表格看起来如何(记住这不是实际的代码)

TABLE Category
    ID
    user_id -- Foreign key from user
    name

TABLE SubCategory
    ID
    user_id
    category_id
    name
Run Code Online (Sandbox Code Playgroud)

这本书的表格设计相同.

Dav*_*ave 7

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

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

// categories table
id
name
user_id
parent_id
Run Code Online (Sandbox Code Playgroud)

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

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

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


另一种选择是使用CakePHP的TreeBehavior.

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