Mysql 使用两个单独的类别表优化数据库

Mysql 使用两个单独的类别表优化数据库,mysql,database,database-design,relational-database,database-schema,Mysql,Database,Database Design,Relational Database,Database Schema,我有一个网站的数据库,它提供了网站的所有数据存储功能。它将文章存储在知识库中,并为内部和最终用户访问提供服务 文章和服务都存储在类别中,通过自引用,这些类别可以有无限数量的父类别。可以通过连接表向其中一个添加多个类别 它需要能够找到服务或文章的类别,包括类别父树的所有路径。还需要能够找到某一类别的服务或物品。当然,一个类别不能两者兼有 这是一种最佳的方法吗?这感觉不对,我欢迎其他的想法 编辑:这种方法通常有效吗?这些类别都有大致相同的内容,只有一个名称和描述,也许还有一个图像 类别服务和类别文

我有一个网站的数据库,它提供了网站的所有数据存储功能。它将文章存储在知识库中,并为内部和最终用户访问提供服务

文章和服务都存储在类别中,通过自引用,这些类别可以有无限数量的父类别。可以通过连接表向其中一个添加多个类别

它需要能够找到服务或文章的类别,包括类别父树的所有路径。还需要能够找到某一类别的服务或物品。当然,一个类别不能两者兼有

这是一种最佳的方法吗?这感觉不对,我欢迎其他的想法

编辑:这种方法通常有效吗?这些类别都有大致相同的内容,只有一个名称和描述,也许还有一个图像


类别服务和类别文章的主键应在各自的表中包括这两个字段(如果类别可以有多个服务或文章)。另外,您真的需要VARCHAR(45)类型指示器吗?我建议改为使用短枚举

否则,第二个图中的基本设计看起来不错。我建议您添加一个用于高效查询递归层次结构的


如果要强制类别类型与
category\u article
/
category\u service
中的记录保持一致,可以复制这些表中的类型指示符,并将其包含在外键约束中。是的,这样做感觉多余,但它是有效的。请抵制合并这两个表的诱惑,在一列中混合来自不同域的值通常会导致更多的困难。

类别服务和类别文章的主键应在各自的表中包括这两个字段(如果类别可以有多个服务或文章)。另外,您真的需要VARCHAR(45)类型指示器吗?我建议改为使用短枚举

否则,第二个图中的基本设计看起来不错。我建议您添加一个用于高效查询递归层次结构的


如果要强制类别类型与
category\u article
/
category\u service
中的记录保持一致,可以复制这些表中的类型指示符,并将其包含在外键约束中。是的,这样做感觉多余,但它是有效的。请抵制合并这两个表的诱惑,在一个列中混合来自不同域的值通常会导致更多的困难。

在这种情况下,您可以使用STI@在这种情况下,圣雄教是如何运作的?我还考虑使用一个类别表和一个“类型”字段,因为这样我就可以涵盖数据库中需要类别的多个部分。类别基本上都是名称、描述和url slug,尽管我将来可能会添加图像。是类别和服务/文章之间的多对多关系,用于记录每个服务/文章在类别树上的路径,或者服务/文章真的可以属于不同的叶节点类别吗?@reaanb令人尴尬的是,我不能100%确定这意味着什么,但我确实希望能够追踪到向上的路径。服务/文章可以属于不同的类别。在这种情况下,您可以使用STI@在这种情况下,圣雄教是如何运作的?我还考虑使用一个类别表和一个“类型”字段,因为这样我就可以涵盖数据库中需要类别的多个部分。类别基本上都是名称、描述和url slug,尽管我将来可能会添加图像。是类别和服务/文章之间的多对多关系,用于记录每个服务/文章在类别树上的路径,或者服务/文章真的可以属于不同的叶节点类别吗?@reaanb令人尴尬的是,我不能100%确定这意味着什么,但我确实希望能够追踪到向上的路径。服务/文章可以属于不同的类别。这些类别可能可以互换工作,但它们都需要以不同的方式引用。例如,文章类别列表不能显示服务类别,反之亦然。这些类别可能可以互换工作,但它们都需要以不同的方式引用。例如,文章类别列表不能显示服务类别,反之亦然。