我有一个表格,代表组织层次结构的传递闭包(即一棵带有单个根的树):
create table ancestry (
ancestor integer,
descendant integer,
distance integer
);
我还有另一个表,里面包含每个用户被允许访问的组织:
create table accessible (
user integer,
organization integer
);
系统向用户展示与每个用户可以访问的组织相关的支出概览。我可以从显示用户公司(根)的视图开始,展示用户直接子组织的清单以及他的组织对总支出的贡献。在大多数情况下,只会有一个子组织,用户需要一级级下钻才能看到多个子组织。我更倾向于从第一个显示多个子组织(即LCA)的组织开始呈现。
对于给定的用户,我可以轻松找到到根路径的集合,但是查找最近公共祖先时遇到了麻烦。我正在使用postgresql 9.1,但更希望能够找到一个与数据库无关的解决方案。在最坏的情况下,我可以将路径拉回应用程序代码中,并在那里计算LCA。