如何在数据库中存储目录/层次结构/树结构?
时间:2020-03-06 14:49:50 来源:igfitidea点击:
如何在数据库中存储目录/层次结构/树结构?即MSSQL Server。
@olavk:好像我们没有看到我自己的答案。我使用的方式比递归查询更好:)
p.p.s.这是要走的路!
解决方案
对我来说,这不仅仅是一个书签,而不是一个问题,但它可能对我们也有帮助。我已使用本文的方法在数据库中存储目录/树结构。
文章中也有一些有用的代码段。
希望这可以帮助。
我不以任何方式隶属于该网站
我们正在使用SQL Server 2005吗?递归查询使查询分层数据更加优雅。
编辑:我确实认为物化路径有点hack。该路径包含非规范化的冗余数据,我们必须使用触发器或者其他方法来使它们保持更新。例如。如果节点更改为父节点,则整个子树都必须更新其路径。子树查询必须使用一些难看的子字符串匹配,而不是优雅而快速的联接。
典型的方法是在表上加上外键(例如" ParentId")。
还有树的嵌套集模型,它比ParentID模型具有一些优势。参见http://www.evanpetersen.com/item/nested-sets.html和http://falsinsoft.blogspot.nl/2013/01/tree-in-sql-database-nested-set-model.html
有很多方法可以在SQL数据库中存储层次结构。选择哪一种取决于我们使用哪种DBMS产品,以及如何使用数据。当我们使用MSSQL2005标记时,我认为我们应该开始考虑"邻接表"模型。如果我们发现它对应用程序效果不佳,那么请查看Vadim Tropashko的比较,该比较突出显示了模型之间的差异,并着重于多个性能特征。
如果可以选择使用Sql Server 2008:也许我们应该签出新的architectureid数据类型。