SQLer 生島勘富 のブログ

RDB・SQLの話題を中心に情報発信をしています。

前提が抜ける

 私のコラムとか、ブログとか、前提が抜けるとよく批判される。

 半分はわざとで半分は無意識です(苦笑)

 「わざと」というのは、例えば、「SQLで書くと可読性が下がる」とか、「複雑なSQLを書くべきでない」ということが、一般的に言われていることを百も承知で無視して書いていると言うことです。

 私としては、理論値まで突き詰めて考えれば、RDBMSを使う以上SQLで処理しないといけない。工数・パフォーマンスとも、SQLの方が上で、トレードオフしているのは「技術者のスキル」であって、そのトレードオフを続けるのならプロとは呼べないという主張をしています。つまり、前提として書かないのは「そんな根拠のない迷信は認めない!」という暗黙の主張のための無視です。

 読者の中には、その暗黙の主張まで理解した上で「芸」として笑っている人と、敢えて無視することを「煽り・釣り」と取る人と、「抜けている」と感じて揚げ足を取りに来る人がいる。そんな書き方をするリスクは「煽り・釣り」と感じる人達が逃げていくことですが、そのリスクを犯しても、揚げ足を取りに来る人たちを集めて、彼らの目をこちらに向けることが目的なのです。

 そんな「煽り・釣り」がむかつくという考え方もあるでしょう。しかし、むかついて終わりなら、人生の大切な時間を無駄にしただけですよ。そこから、自分たちが主張している「SQLで書くと可読性が下がる」とか、「複雑なSQLを書くべきでない」ということを検証して欲しいわけです。それが固定観念になってないか、一人でも検証してくれたらと思って煽っています。

図1 オブジェクト指向言語での一般的な処理


図2 オブジェクト指向言語での理想的な処理


図3 ストアドプロシージャを用いた処理

 「SQLで書くと可読性が下がる」と考えているならば、図2にならないといけないのですが、図2ではRDBMSを使う意味はありません。NoSQLを使うべきです。

 図1はオブジェクト指向とも、サービス指向とも、データ指向とも、プロセス指向とも呼べない。「混沌指向」というか、「スパゲッティ設計」です。それは、私たち(40代)以上の世代の技術者が、COBOLからオープン系に移行するときに作った文化ですから、リアルタイムで見ていた私はよく分かっています。それが定着しないように何度もケンカをしてきました。

 しかし、COBOLから、GUIやイベントドリブンという概念と、リレーショナルデータベースの概念を同時に受け入れるのは余りに厳しく、当時は2000年問題とITバブルのため、猛烈な人材不足だったために、やむなく定着してしまった文化なのです。

 定着して文化になってしまってからコの業界に入ってきた若い技術者が、それを無条件に受け入れるのは仕方のないことかも知れませんが、技術者なら常識を疑うのは非常に重要なことでしょう。

 適応範囲は図2にならないシステム全部です。図2と図3のハイブリッドも単なるスパゲッティ設計ですよ。