0

我有一个相当大的数据表,其结构如下:

 StaffNo    Grade    Direct   Boss2    Boss3    Boss4    Boss5    Boss6
 -------    -----    -----    -----    -----    -----    -----    -----
 10001        1      10002    10002    10057    10094    10043    10099
 10002        2      10057    NULL     10057    10094    10043    10099
 10003        1      10004    10004    10057    10094    10043    10099  
 10004        2      10057    NULL     10057    10094    10043    10099  
 10057        3      10094    NULL     NULL     10094    10043    10099

ETC....

即一个唯一的id,他们在层次结构中的级别(等级),他们的老板ID和上面的主管ID的记录。(2、3、4等是指那个特定等级的老板)。

该系统依赖于严格的等级制度——如果你是我的老板(/父母),那么你的老板必须是我的祖父母。

不幸的是,该规则并未在数据模型中强制执行,并且数据最终来自甚至不知道该规则的其他系统,更不用说观察它了。所以你和我可能是同一个boss,但我们的bossboss不会是同一个boss。

笔记:

  • 我无法更改数据模型
  • 我无法从源头修复数据。

所以(目前)我必须在数据到位后修复它。两周后有人会做一些破坏模型的事情,我需要稍微修改 procs 来解决。不理想,但我在接下来的六个月里一直坚持这个。

无论如何,特定的查询很容易产生,但我发现很难跟踪更大的图景。坐在上面的应用程序运行时没有任何抱怨,但在系统中导航变得非常混乱。所以我的问题是:

  • 任何人都可以推荐一种工具(或技术)在这种情况下生成某种“断树”图吗?

我不想要可以为我解决问题的东西,或者尝试进行统计分析,但至少可以直观地表明它在任何时候的损坏程度。

注意:目前这是在 SQL Server 数据库中,但我对使用 C#、Perl 或 Python 的想法持开放态度。

4

2 回答 2

0

list all records where boss1 has more than one boss2:

select staffno, boss1
from brokentable
where boss1 in
(
 select boss1
 from brokentable
 where count(boss2) > 1
)
order by staffno
于 2009-09-07T01:57:48.003 回答
0

我将从仅使用直接报告的原始数据在树结构中严格分层构建组织结构图开始

- 10099
    - 10043
        - 10094
            - 10057
                - 10002
                    - 10001
                - 10004
                    - 10003

一旦你有了这个,你就可以运行审计例程来验证所有 bossX 数据在这个树中正确表示。

当然,这是假设您对直接下属的信任至少足以构建一棵树作为基线。如果直接下属最有可能受到怀疑,那么您就有更大的问题。

于 2010-06-01T15:29:29.657 回答