【问题标题】:Static Analysis Tools for Database Design [closed]用于数据库设计的静态分析工具 [关闭]
【发布时间】:2010-11-13 16:26:03
【问题描述】:

我正在寻找用于数据库层的静态分析工具。我得到了一些answers for reviewingPLSQLTSQL 代码,我想知道有哪些选项可用于审查表及其列的命名约定、外键约束和触发器等的数据库设计。

MSDN article 谈论ApexSQL Enforce,但它主要用于SQLServer。

【问题讨论】:

标签: database-design static-analysis database-agnostic


【解决方案1】:

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

【讨论】:

【解决方案2】:

既然您提到了 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;

列出表的所有 VALID 外键列(假设您使用 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'

如果您不使用外键约束来提高性能,则需要将元信息存储在单独的表中,并编写类似上述的 ansql 脚本来检查现有数据是否违反 FK。

【讨论】:

  • bkm 没有说但暗示的是,如果您可以访问元数据(许多数据库都提供),那么您可以直接编写很多简单的静态分析检查。
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2010-09-10
  • 1970-01-01
  • 2010-10-06
  • 2010-12-30
  • 1970-01-01
相关资源
最近更新 更多