- ベストアンサー
コラムの値からコラム・テーブルを検索
プライマリキーが様々なテーブルで別の名前で利用されていると、テーブル同士の関連の全てが把握できずに困っています。以前にコラム名からテーブルを検索する方法を質問したのですが、私が扱っているデータベースでは、プライマリキーがシステムの別の場所で少しだけ異なる名前で利用されていることが多いので、その方法では把握できない関連が出てきます。 具体的には、EMPLOYEES__KEYというEMPLOYEESテーブルのプライマリキーがPERSONALIZE_EMPOYEESというテーブルでPSNLZ_EMP__KEYという名前で使われている状況を考えていただきたいと思います。PSNLZ_EMP__KEYのコラムのレコードは全てEMPLOYEES__KEY内のデータからとられているとします。 以前にselect TABLE_NAME from USER_TAB_COLUMNS where COLUMN_NAME = 'EMPLOYEES__KEY' というSQLで特定のコラムを使っているテーブルを全てリストアップできると教えていただいたのですが、今回のケースでは、同じような内容のコラムなのですが名前が異なるため上記のSQLでは検索できないテーブルがある場合、それをどうやってとってきたらよいのかということです。 コラムの値にtaro, jiro, hanakoなどのようにテーブルまたはシステム内でユニークな値が指定されている場合、コラムの値を指定し、「その値が使われているコラム・テーブルを列挙せよ」というような命令を与えればよいのだということまでは分かりますが、どのようにSQLを書けば良いか教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
残念ながら回答とは言えませんが。 「EMPLOYEES__KEYとPSNLZ_EMP__KEYは外部キーの関連を持っているが、物理的に外部キーは張っていない」 の状態で、実データとディクショナリから関連を発見する事は、ほぼ不可能ですよ。 まあ、不確かながらも、気長な方法としては PL/SQLで (1)USER_TAB_COLUMNS上存在するEMPLOYEES__KEYと同じ属性の列名とテーブル名を取得 (2)上記をカーソルOPENしてループ処理 列名とテーブル名を変数に格納 上記のテーブルを動的SQLでEMPLOYEESとJOINする 件数がZERO件だったら関係ないと判断する みたいな感じかな? これは「そんな方法でできるかもなあ」と言うレベルの話であって実際の仕事ではやりませんよ。そんな事に工数を割いている暇もないでしょうしね。 EMPLOYEESかPERSONALIZE_EMPOYEESが本当にZERO件だったら?とか EMPLOYEESかPERSONALIZE_EMPOYEESのどちらかが極端に件数が少なすぎたら何らかの閾値を持って「関連がある」と判断するの?とか 穴は何ぼでも出てきます。 だから「具体的にどうやるの?」なんて事も聞かない方が吉だす。 素直にER図を作りましよ。
その他の回答 (1)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
値の類似性で持って、テーブル間の相関性を把握しようと考えた場合... 仮に、100個のテーブルがあって、それぞれに1万件のデータがあったとすると 1万件の100乗の組み合わせから、相関性を見いだすと言うことになります。 機械的に、相関性を把握しようとしたところで、それを元に最終的に 理解するのは、人間の頭です。 素直に、ドキュメントを精査するなり、プログラムを追うなり、泥臭い 作業を積み重ねることが、解決の早道と思います。
お礼
No.1とNo.2の方、どうもありがとうございました。ズルはできないということですね。アプリケーションの勉強とER図の作成に戻ります。