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

等....

つまり、一意の ID、階層内のレベル (グレード)、上司 ID の記録、および上位の監督者の ID です。(2、3、4 などは、その特定のグレードのボスを指します)。

このシステムは厳密な階層構造に依存しています。あなたが私の上司 (/parent) である場合、あなたの上司は私の祖父母でなければなりません。

残念ながら、このルールはデータ モデル内では適用されず、データは最終的に、ルールを知らない、ましてやルールを守らない他のシステムから取得されます。だからあなたと私は同じ上司を共有するかもしれませんが、私たちの上司の上司は同じではありません.

ノート:

  • データモデルを変更できません
  • ソースでデータを修正できません。

そのため(当面は)データが整ったら修正する必要があります。2 週間に 1 回、誰かがモデルを壊すようなことをするので、解決するにはプロシージャを少し変更する必要があります。理想的ではありませんが、私は今後 6 か月間これに固執しています。

とにかく、特定のクエリを作成するのは簡単ですが、全体像を追跡するのは難しいと思います. この上にあるアプリケーションは問題なく動作しますが、システム内を移動すると非常に混乱します。だから私の質問は:

  • この種の状況である種の「壊れたツリー」ダイアグラムを生成するためのツール (または手法) を推奨できる人はいますか?

物事を修正したり、統計分析を試みたりするものは望んでいませんが、少なくとも、一度にどれだけ壊れているかを視覚的に示すものは必要です。

: 現時点では、これは SQL Server データベースにありますが、C#、Perl、または Python を利用するアイデアを受け入れています。

4

2 に答える 2

0

Boss1 に複数の 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 に答える