データベース層の静的分析ツールを探しています。PLSQL、TSQLコードを確認するためのいくつかの回答 を得ました。テーブルとその列の命名規則、外部キー制約とトリガーなどのデータベース設計を確認するために利用できるオプションは何ですか.
ApexSQL Enforceについて説明しているMSDN の記事がありますが、主に SQLServer 向けです。
データベース層の静的分析ツールを探しています。PLSQL、TSQLコードを確認するためのいくつかの回答 を得ました。テーブルとその列の命名規則、外部キー制約とトリガーなどのデータベース設計を確認するために利用できるオプションは何ですか.
ApexSQL Enforceについて説明しているMSDN の記事がありますが、主に SQLServer 向けです。
ツールではありませんが、優れたリソースは、SQLServerデータベースを改善するためのSSWルールです。
PLSQLに言及しているので、Oracleを使用していると思います。データベース設計では、主にデータ ディクショナリ テーブルで実行される単純な SQL スクリプトのセットを作成できます。次のルールの例と、同じルールの sql を見てください。
テーブル名は 'N' 文字以下にする必要があります
DEFINE owner_name = 'SCOTT';
DEFINE max_length = 5;
set linesize 300;
spool table_name_violations.txt
Select table_name, length(table_name) Length, 'Table name too long' MSG
from ALL_TABLES where owner like '&owner_name'
and length (table_name) > &max_length;
spool off;
列名は「N」文字を超えてはなりません
DEFINE owner_name = 'SCOTT';
DEFINE max_length = 5;
set linesize 300;
spool column_name_violations.txt
Select table_name, column_name, length(column_name) Length, 'column name too long' MSG
from ALL_TAB_COLUMNS where owner like '&owner_name'
and length (column_name) > &max_length;
spool off;
テーブルのすべての有効な外部キー列を一覧表示します (fk 制約を使用していると仮定します)
Define tab_name = 'EMP'
SELECT table_name, Column_name
FROM user_tab_columns t1
WHERE NOT EXISTS (
SELECT table_name, column_name
FROM user_cons_columns
WHERE constraint_name IN (
SELECT R_Constraint_name
FROM all_constraints t2,all_cons_columns t3
WHERE t2.constraint_name = t3.constraint_name
AND t3.column_name = t1.column_name
AND t2.constraint_type = 'R'
AND t2.TABLE_name=t1.Table_name)
)
AND t1.table_name LIKE '&tab_name'
パフォーマンスを向上させるために外部キー制約を使用していない場合は、メタ情報を別のテーブルに格納し、上記のような SQL スクリプトを記述して、既存のデータの FK 違反をチェックする必要があります。