不足しているフィールドの関係を見つけるためにスマートOracleのツール
-
26-09-2019 - |
質問
んOracleは、私は可能性の欠落フィールドの関係を決定し、データベースとの助けを分析するために使用できるツールがありますか?私たちは、150以上のテーブルと多くの関係が欠落していると、従来のデータベースを持っています。我々は手でそれを介して行くことができるが、自動化ツールが便利かもしれません。だから、外部キーとその他もろもろを逃すようなものを見つけます。
解決
私は今、この数回を行うには持っていました。私はそれが事の非常に人間の知性のようなものだ見つける - 、カラムからのサンプルデータを照会、(例えばEvilTeachの問合せ)データディクショナリの両方にわたるクエリの多くを実行しているデータがアプリケーションによって作成された方法を検討し、理解することによって助けましたビジネス要件とユーザプロセスます。
たとえば、多くのレガシーアプリケーションで私がチェックし、データが制約(ほぼ100%を:))は以下の意味フロントエンド・アプリケーションに実装されている(参照整合性制約を含む)制約を見つけるが、それは実際には拘束されていないですデータベースレベルで。楽しい結果の多くます。
ツールが自動的にこののいずれかを実行し、有用な結果をもたらすことができれば、私は驚かれると思います。
他のヒント
これは良いスタートかもしれません。
select column_name, table_name, data_type
from user_tab_cols
order by column_name, table_name
あなたは、可能な外部キーが存在しないことを見つけることができますそのキーへ。
あなたはこのようなクエリを使用することができます
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であり、そしてもう一方はそれを参照しない場合。
しかし、ここで私はそれが事の非常に人間の知性のようなものだ、ジェフリーに同意し、特別な工具は確かにこれを行いません。いずれにせよ、あなたは手でそれを行う必要があるでしょう。