システム開発時においてデータベースは欠かせない存在です。しかしその際に利用するSQLはテクニックによってはもの凄いデータが取れる一方、誤ったコーディングによってデータを消失したり抜き取られるリスクがあります。 そこで使ってみたいのがSQLCheckです。問題、リスクあるSQLをあらかじめチェックしましょう。

SQLCheckの使い方

SQLCheckの実行結果です。SQLファイルを渡すだけです。

$ sqlcheck -f /path/to/tmp-publisher.sql 
-------------------------------------------------
> RISK LEVEL    :: ALL ANTI-PATTERNS
> SQL FILE NAME :: /path/to/tmp-publisher.sql
-------------------------------------------------
==================== Results ===================

-------------------------------------------------
SQL Statement: create table user ( id text primary key, customer_id text, -- customer provided
id email text, phone text, name text, uploaded boolean, created_at bigint,
updated_at bigint );
[/path/to/tmp-publisher.sql]: (HIGH RISK) (LOGICAL_DATABASE_DESIGN ANTI-PATTERN) Multi-Valued Attribute
[Matching Expression: id text]

[/path/to/tmp-publisher.sql]: (HIGH RISK) (LOGICAL_DATABASE_DESIGN ANTI-PATTERN) Generic Primary Key
[Matching Expression:  id ]
  :
-------------------------------------------------
SQL Statement: create index user_customer_id on user (customer_id);
[/path/to/tmp-publisher.sql]: (LOW RISK) (PHYSICAL_DATABASE_DESIGN ANTI-PATTERN) Index Attribute Order
[Matching Expression: create index]
  :
==================== Summary ===================
All Anti-Patterns  :: 7
>  High Risk   :: 4
>  Medium Risk :: 0
>  Low Risk    :: 3

条件によってリスクの高い、中間、低いと判別して結果を出してくれます。SQLにおけるアンチパターンを使ってチェックしてくれますので、システムが実行するSQLログをチェックしてみたりすると改善ポイントが分かるはずです。

SQLCheckはC++製のオープンソース・ソフトウェア(Apache Licnese 2.0)です。

jarulraj/sqlcheck: Automatically identify anti-patterns in SQL queries