不足しているフィールドの関係を見つけるためにスマートOracleのツール

StackOverflow https://stackoverflow.com/questions/3815744

  •  26-09-2019
  •  | 
  •  

質問

んOracleは、私は可能性の欠落フィールドの関係を決定し、データベースとの助けを分析するために使用できるツールがありますか?私たちは、150以上のテーブルと多くの関係が欠落していると、従来のデータベースを持っています。我々は手でそれを介して行くことができるが、自動化ツールが便利かもしれません。だから、外部キーとその他もろもろを逃すようなものを見つけます。

役に立ちましたか?

解決

私は今、この数回を行うには持っていました。私はそれが事の非常に人間の知性のようなものだ見つける - 、カラムからのサンプルデータを照会、(例えばEvilTeachの問合せ)データディクショナリの両方にわたるクエリの多くを実行しているデータがアプリケーションによって作成された方法を検討し、理解することによって助けましたビジネス要件とユーザプロセスます。

たとえば、多くのレガシーアプリケーションで私がチェックし、データが制約(ほぼ100%を:))は以下の意味フロントエンド・アプリケーションに実装されている(参照整合性制約を含む)制約を見つけるが、それは実際には拘束されていないですデータベースレベルで。楽しい結果の多くます。

ツールが自動的にこののいずれかを実行し、有用な結果をもたらすことができれば、

私は驚かれると思います。

他のヒント

これは良いスタートかもしれません。

select column_name, table_name, data_type
from user_tab_cols
order by column_name, table_name
あなたが別のテーブルに同じ名前とデータ型を持つ列を見つけることによって可能に外部キーrelationshinp、主キーとなっているものを特定することができることを前提とし、他の1は何の参照を持っていない場合は、

あなたは、可能な外部キーが存在しないことを見つけることができますそのキーへ。

あなたはこのようなクエリを使用することができます

select c1.TABLE_NAME, c1.COLUMN_NAME, c2.TABLE_NAME, c2.COLUMN_NAME
  from user_tab_columns c1,
       user_tables      at1,
       user_tab_columns c2,
       user_tables      at2
 where c1.COLUMN_NAME = c2.COLUMN_NAME
   and c1.DATA_TYPE = c2.DATA_TYPE
   and c1.TABLE_NAME = at1.TABLE_NAME
   and c2.TABLE_NAME = at2.TABLE_NAME
   and c1.TABLE_NAME != c2.TABLE_NAME
   /*and c1.TABLE_NAME = 'TABLE' --check this for one table
     and c1.COLUMN_NAME = 'TABLE_PK'*/
   and not exists (select 1
          from user_cons_columns ucc,
               user_constraints  uc,
               user_constraints  uc2,
               user_cons_columns ucc2
         where ucc.CONSTRAINT_NAME = uc.CONSTRAINT_NAME
           and uc.TABLE_NAME = ucc.TABLE_NAME
           and ucc.table_name = c1.TABLE_NAME
           and ucc.column_name = c1.COLUMN_NAME
           and uc.CONSTRAINT_TYPE = 'P'
           and uc2.table_name = c2.TABLE_NAME
           and ucc2.column_name = c2.COLUMN_NAME
           and uc2.table_name = ucc2.table_name
           and uc2.r_constraint_name = uc.constraint_name
           and uc2.constraint_type = 'R')

この1(ないように最適化されたスケッチ、、が)スキャンすべての列名型等価のペア、および発見を介して一方がPKであり、そしてもう一方はそれを参照しない場合。

しかし、ここで私はそれが事の非常に人間の知性のようなものだ、ジェフリーに同意し、特別な工具は確かにこれを行いません。いずれにせよ、あなたは手でそれを行う必要があるでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top