にゃみかんてっくろぐ

猫か百合を見守る壁になりたい

「インデックスが作成されていないカラムを WHERE 句に書かない」コーディング規約と、暗黙的なコンテキスト

一部フィクションを含むポエムです。

XX システム SQL コーディング規約

性能劣化の可能性があるため、インデックスが作成されていないカラムを WHERE 句に書かないこと。
(インデックスの作成有無はテーブル定義書を参照)

こうしたコーディング規約が ある ところは、 SQL 文を書くメンバが、概ね文法のみを知っていればよい、と言える。 誤解を恐れずに言えば、 メンバは RDBMS をあまり知らなくてよい

では、逆の場合、コーディング規約が ない ところを考えたい。

SQL 文を書くメンバは、 RDBMS を知っていて当然」、つまり暗黙的なコンテキストを設定していると言えるだろうか。必ずしもそうではないように感じる。いくつかのケースが思いつく。

暗黙的なコンテキストとして「みな知っていて当然」としているケース。 SQL 文を書くメンバは 当然 RDBMS の検索処理を知っており、適切な SQL 文を書くことができる、というもの。

「誰かが知っていて、ツッコミが入るはず」としているケース。たとえば、 SQL 文にアーキテクトやレビュアのチェックが入り、リリースまでに適切な SQL 文になるはずである、といったもの。

無秩序なケース。リリースして火を吹く可能性があるが、そのリスクを受け入れる、というもの。


「みな知っていて当然」は状態として最高のように思えるが、人間は全知全能の神ではないため「当然」というのはプレッシャーにもなりうる。一方で、無秩序なケースはプレッシャーを感じなかったとしても将来大きな損害を被る恐れがある。

いまのチーム、いまのプロジェクト、いまの現場は、どのケースだろうか。リスクとリターンを天秤に乗せたときに、ベターな状態だろうか。