2009-07-24 65 views
1

我正在寻找用于数据库层的静态分析工具。我得到了一些answers for reviewingPLSQLTSQL代码,我想知道什么都可以查看数据库设计命名的表和字段的约定,外键约束和触发器等用于数据库设计的静态分析工具

MSDN article其中谈到ApexSQL Enforce的选项,但主要是针对SQLServer。

+0

查看http://serverfault.com/questions/72306/are-there-useful-static-analysis-tools-for-databases – 2012-01-30 18:46:09

回答

3

不是工具,而是一个很好的资源是SSW Rules to Better SQL Server Databases

+0

他们没有实施到一个工具:http://www.ssw.com。 au/ssw/Download/Download.aspx?GroupCategoryID = 1SQL – 2013-01-25 07:28:39

3

既然你提到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' 

在您不使用外键约束来提高性能的情况下,你需要的元信息存储在不同的表,写类似上面的检查FK违规上的现有数据ansql脚本。

+0

bkm没有说但是暗示的是如果你有权访问元数据(许多数据库提供的),那么直接写一些简单的静态分析检查你自己。 – 2009-07-31 08:15:54