« 開発効率化のための基本戦略「類型化」 | トップページ | プログラミングは前後の工程を侵襲しつつ変化してゆく »

2011.04.24

DB設計が楽しくなければたぶん失敗している

 データベース設計の手順は、さまざまな書籍やサイトでだいたい次のように説明されている。

1.業務用語をリソース・イベントや動詞・名詞等の観点で整理する
2.テーブルとデータ項目の関係として用語をグルーピングする
3.テーブル間の多重度を検討して関連を決定する
4.正規化する

 私はこのように律儀な手順でデータベース設計をしたことは初心者の頃から一度もないし、今もこれでやれるとは思えない。誰かがこれでやれることは事実だろうからスタイルのひとつとして認めるべきではあろう。しかし、なんというか辛気臭い事務作業みたいで「楽しさ」に欠けている。

 「楽しさ」にこだわるのには理由がある。楽しくなければ、必要な試行錯誤がじゅうぶんなされない。それゆえに自分の成果物に対する「揺さぶり」が起こらず、妥当な落としどころにたどり着いていない可能性が高いからだ。設計上の試行錯誤がなされていない高層ビルや飛行機を利用したいと思う人はいないだろう。

 データベース設計はある意味でグラフィックデザインに似ている。とくにデータモデリングは似顔絵を描く作業に喩えることができる。学生時代に似顔絵描きのバイトをよくやったのだが、その楽しさとデータモデリングの気分とがそっくりな感覚がじっさいにある。

 断片的な手がかりにもとづいて、とりあえずおおらかに描き広げる。これが現実に即しているかどうかを吟味し、必要ならば調整を加えさらに吟味を重ねる。このような試行錯誤をつうじて絵は対象に肉薄してゆく。いわば「直観的洞察」と「分析的調整」を行き来しながら出来上がってゆくわけで、いっぽうのアプローチだけでは、少なくとも複雑な対象は扱えない。その意味で上述の手順は「分析」に偏向しすぎているような気がしてならない。

 データモデリングには明確な文法(理屈)があるが、これはおもに分析的局面しか支援してくれない。ゆえに直観的局面に手馴れるためには別の体験が必要で、これはもう何度もモデルを描くしかないのだと思う。新人漫画家の絵が巻を追うごとに上手く手際よくなってゆくように、データモデルも何度も描くうちに上手く手際よくなる。その過程で直観的センスやイディオムが身につく。慣れてくれば、傍目には直感的洞察と分析的調整が同時になされているように見えるだろう。

 「直観」という言い方が曖昧ならば「パターン認識」と言い換えてもいい。現実や経験からパターンやそれらの組み合わせを見出す創造的過程。これはコンピュータが苦手とする課題の代表だが、人間にとっても必ずしも簡単ではない。とくにそれが専門分野であれば、適性も訓練も要る。そういう事実を無視して「誰にもやれそうな機械的な手順」として説明しても、あまり実りはないような気はする。

 いずれにせよ、技術者にデータベース設計の適性があるかどうかを判定するのは簡単だ。それをやることが「楽しい」と思えるようならスジがある。もちろん楽しいことばかりではないのだが、苦しさの中にもわくわく感を覚えるようであれば、その人の創造性が適切に刺激されている可能性が高い。そしてこれは脳の前頭前野が活動している証拠でもある(そうでなければあんな難しい課題は扱えないような気がする)。その意味でデータベース設計は「工業デザイン」あたりと同程度の、微妙に非工学的な性質を帯びている。

 絵や歌が上手い人は、その行為が楽しかったのでそれを繰り返した人だ。同様にデータベース設計やシステム設計が得意な人も、その作業が楽しかったゆえに上機嫌のうちにそれを繰り返した人だ。試してみて楽しさを感じられるようであれば、必要な理屈をじっくりと学べばいい。直観と分析を繰り返す過程で、腕は自然に上達する。データベース設計を含め、ある種の技能にかんしては「楽しいこそモノの上手」であり、「楽しさを見出せること」が決定的な適性である。

|

« 開発効率化のための基本戦略「類型化」 | トップページ | プログラミングは前後の工程を侵襲しつつ変化してゆく »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: DB設計が楽しくなければたぶん失敗している:

» 仕事は楽しくやらなければ、いいものは絶対にできない。 [団塊ジュニアの意地と根性を見せます!]
今日、非常に共感できるブログを発見しました。 「DB設計が楽しくなければたぶん失敗している」 引用:いずれにせよ、技術者にデータベース設計の適性があるかどうかを判定するのは簡単だ。それをやることが「楽しい」と思えるようならスジがある。もちろん楽しいこと...... [続きを読む]

受信: 2011.04.24 22:53

« 開発効率化のための基本戦略「類型化」 | トップページ | プログラミングは前後の工程を侵襲しつつ変化してゆく »