Mysql 为类别、子类别和相关书籍设计数据库
我知道有几个问题的答案与我所问的类似。但他们的方法看起来并不令人信服 我的问题是如何为一个可以有书的类别和一个也可以有书的子类别构建一个数据库 我已经设计了一个数据库,但不相信这种方法。因此,如果有经验的人能给我一些建议或改进,或者给我一个完全不同的方法,我会非常感激 这就是我的表的外观(请记住,这不是实际的代码)Mysql 为类别、子类别和相关书籍设计数据库,mysql,sql,database-design,database-schema,Mysql,Sql,Database Design,Database Schema,我知道有几个问题的答案与我所问的类似。但他们的方法看起来并不令人信服 我的问题是如何为一个可以有书的类别和一个也可以有书的子类别构建一个数据库 我已经设计了一个数据库,但不相信这种方法。因此,如果有经验的人能给我一些建议或改进,或者给我一个完全不同的方法,我会非常感激 这就是我的表的外观(请记住,这不是实际的代码) 这本书的桌子有同样的设计 如果parent\u category为空,则为顶层。如果它不为空,则它是一个子类别 TABLE Category ID name parent
这本书的桌子有同样的设计 如果
parent\u category
为空,则为顶层。如果它不为空,则它是一个子类别
TABLE Category
ID
name
parent_category
没有理由为“类别”设置多个表,无论是顶级类别还是子类别。它们都只是“类别” 因此,有一个名为“categories”的表,其中有一个
parent\u id
字段:
// categories table
id
name
user_id
parent_id
当您想要提取所有顶级类别时,只需在parent\u id
为空的条件下对categories
表运行查询
然后,当您想要提取子类别时,只需对categories
表运行查询,条件是parent\u id=123
(或其他)
这不仅使一切变得更干净,而且还允许在您想继续添加子类别时进行扩展…等等
另一个选择是使用
我个人更倾向于使用我上面建议的方式,但可能只是因为我没有花足够的时间来真正理解这种行为。有趣的是,
user\u id
在问题中出现的唯一地方是在表定义中,而您声称其他解决方案并不“专业”。请修正你的问题,让它真正解释你想要表达的数据。你似乎没有理解我的问题。不要把注意力集中在用户id上,这不是问题所在。问题是我如何为一个可以有书的类别和一个也可以有书的子类别构建一个数据库?换句话说,我必须如何为子类别和父类别设计两个表?类别和书籍之间的关系是什么?类别(或子类别)与书籍关联还是书籍与(子)类别关联?哪个是主要实体,哪个是次要实体?@TommCatt别担心。我想出了一个解决办法。谢谢你的帮助。很公平,你觉得这些书怎么样?如果我想将一本书添加到父类别中,并且我还可以选择添加到非父类别中,我该怎么做?您将拥有一个名为books\u categories
的联接表,并为书和类别之间的每个关联保留一行。id、book\u id、category\u id如何添加行取决于您,但是一旦结构存在,它应该是非常自解释的。如果不是,请随意写另一个关于这个问题的问题。INDEX(parent\u id)
是必需的。我会非常非常非常小心地使用这样的解决方案。MySQL基本上不支持分层数据结构或递归查询,因此使用这种结构可能会导致问题。@GordonLinoff-我在许多相当大的项目中使用过它,但没有任何明显的缺点。我不知道你指的是什么“问题”,但我还没见过。
// categories table
id
name
user_id
parent_id