我有一个相当大的数据表结构,如下所示:
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
等...
即。一个唯一的ID,他们在层次结构中的级别(等级),他们的老板ID 的记录以及上面的主管的ID 。 (2,3,4等指特定年级的老板)。
系统依赖于严格的等级 - 如果你是我的老板(/父母)那么你的老板必须是我的祖父母。
不幸的是,这条规则并未在数据模型中强制执行,而且数据最终来自其他甚至不了解规则的系统,更不用说观察它了。所以你和我可能会分享同一个老板,但我们的老板老板会不一样。
请注意:
所以(目前)我必须在数据到位后修复数据。两周后,有人会做一些破坏模型的事情,我需要稍微修改一下以解决问题。不太理想,但在接下来的六个月里我一直坚持这一点。
无论如何,特定的查询很容易产生,但我发现很难跟踪大局。无论如何,应用程序都可以在没有投诉的情况下运行,但在系统周围导航会变得非常混乱。所以我的问题是:
我不想要能为我解决问题的东西,或者尝试进行统计分析,但至少可以用任何方式直观地表明它在任何时候都是如何破碎的。
注意:目前这是在SQL Server数据库中,但我对使用C#,Perl或Python的想法持开放态度。
答案 0 :(得分:0)
列出boss1拥有多个boss2的所有记录:
select staffno, boss1
from brokentable
where boss1 in
(
select boss1
from brokentable
where count(boss2) > 1
)
order by staffno
答案 1 :(得分:0)
我首先使用仅用于直接报告的原始数据在树结构中严格分层构建组织结构图
- 10099
- 10043
- 10094
- 10057
- 10002
- 10001
- 10004
- 10003
完成此操作后,您可以运行审计例程以验证在此树中是否正确表示了所有bossX数据。
这假设您信任至少足以将树构建为基线的直接报告,当然。如果直接下属最容易被怀疑,那么你就会遇到更大的问题。