我正在寻找数据库层的静态分析工具。我得到了一些关于审查 PLSQL、TSQL代码的答案,我想知道有哪些选项可用于审查用于表及其列的命名约定、外键约束和触发器等的数据库设计。
有一篇关于ApexSQL Enforce的MSDN 文章,但它主要针对 SQLServer。
我正在寻找数据库层的静态分析工具。我得到了一些关于审查 PLSQL、TSQL代码的答案,我想知道有哪些选项可用于审查用于表及其列的命名约定、外键约束和触发器等的数据库设计。
有一篇关于ApexSQL Enforce的MSDN 文章,但它主要针对 SQLServer。
由于您提到 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 违规。
不是一个工具,而是一个很好的资源是SSW Rules to Better SQL Server Databases