树状类别系统的数据库设计

时间:2010-01-04 07:45:11

标签: mysql database-design

我正在使用邻接列表模型来创建类别,并且它运行良好。

当检索特定类别的文章(例如电子产品)时,我还想检索子类别中的文章(例如电子产品 - >相机,甚至电子产品 - >相机 - >相机镜头)

我现在这样做的方法是从数据库中提取电子子类别的所有类别ID,并在此列表中找到所有带有category_id的文章。

这在我看来非常低效和耗时,因为这可能导致许多查询检索这些子类别。

我想到这样做的另一种方法是让每篇文章与整个类别树相关联(例如关于相机镜头的文章也将与MANY_MANY表中的相机和电子类别相关联),当我检索所有文章时电子产品也会出现。

这会为数据库添加大量冗余数据,因为我可能需要为每篇文章存储3或4个类别。此外,它会使诸如将文章移动到另一个类别之类的操作复杂化。

这是正确的方法吗?或者有没有更好/更简单的方法我没有想过?

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:12)

阅读本文关于嵌套集建模的内容:Managing Hierarchical Data in MySQL

使用建议的技术,您可以在一个SELECT中获得整个树或子树。它比“正常”方法复杂一点,但如果您要从表中进行大量读取,这是完全值得的。