我已经搜索了整个网络,无法决定如何处理这种情况。我知道我有以下选择。
1. 我可以创建递归CTEs,通用表达式(又名RCTE)来处理分层数据。这似乎是处理普通访问最简单的方法,但我担心对于确定子对象的权限级别可能会很慢。
2. 我可以在表中创建一个hierarchyId数据类型字段,并使用SQL Server提供的函数,例如GetAncestor(),IsDescendantOf()等。这似乎会使查询相当容易,但似乎需要一个相当复杂的插入/更新触发器来通过插入和移动保持hierarchyId字段正确。
3. 我可以创建闭包表,该表将存储表中的所有关系。我将其想象为这样:父列和子列,每个父->子关系都表示为(例如,1->2 2->3将在数据库中表示为1-2、1-3、2-3)。缺点是,即使它们非常简单,这需要插入、更新和删除触发器,并且此方法会生成大量记录。
我已经尝试搜索整个网络,找不到任何关于这三种方法之间的建议。
PS我也对此问题的任何替代解决方案持开放态度。