一段时间以来,我一直在努力如何最好地处理SQL中的层次结构。由于邻接表的限制以及MPTT /嵌套集的复杂性而感到沮丧,我开始考虑将密钥路径简单地存储为简单的node_key/node_key/...字符串。我决定汇总以下三种技术的优缺点:
node_key/node_key/...
在每个用例中,除了一个之外,存储路径技术使用的调用数量与其他技术相同或更少。通过这种分析,存储路径无疑是赢家。更不用说,它易于实施,易于阅读等。
因此,问题是,难道不应该将存储路径视为比MPTT更强大的技术吗?为什么存储路径不是更常用的技术,为什么在给定实例中不通过MPTT使用存储路径?
另外,如果您认为此分析不完整,请告诉我。
MPTT可以开箱即用地执行以下至少两项操作:存储路径解决方案无法做到:
您可能还会考虑我在回答“将平面表解析成树的最有效/最优雅的方法是什么?”中描述的“闭合表”设计。
还有其他一些注意事项:
我还将在演示文稿“使用SQL和PHP的层次结构数据模型”以及《SQL反模式:避免数据库编程的陷阱》一书中介绍闭包表。