minimize

プログラムとデータベースの関係についての話。
以下、データベースはDBと略します。

なぜDBが必要か

プログラムからデータを扱う方法にはいくつかありますが
ほとんどの場合に最も優れた手段はDBを使うことです。
使い方が簡単ですし、大量のデータを高速に扱うことが出来ます。

ここで強調しておきたい事があります。
あくまで、DBはプログラムを便利にするための道具に過ぎません。
DBがプログラムの中心になる事など有り得ないのです。

SQL文

最近ではHibernateなどのDBマッピング手法も用いられるようになってきましたが
やはりまだ主流はSQL文を使った手法です。

しかしここで勘違いをする事が無いように再び言っておきます。
SQL文はDBの一部ですから、それはプログラムの補助的役割に過ぎません。
プログラムとSQL文を組み合わせて、目的の動作を達成するように心掛けましょう。

決して、SQL文だけで全てを済まそうとしてはいけません。
複雑なSQL文を書いて悦に浸ってる場合ではないのです。
なぜなら、それはプログラムの保守を大幅に妨げるからです。

オブジェクト指向言語 vs SQL文

複雑なプログラムを書くと、保守作業が困難になることは誰もが知っています。
しかしそれ以上に厄介なのが、複雑なSQL文です。

Javaで、1文(行頭からセミコロンまで)が200行もあるプログラムを
見たことのある人(もしくは書く人)は滅多にいないでしょう。
しかし、1文で200行以上あるSQL文を僕は何度も目にした事があります。
このSQL文を理解するのに一体何十分、何時間掛かるか考えただけで
恐しくなります。

Simple is Best

プログラムは、よりシンプルに書くのがベストとされています。
SQLも同じです。まずシンプルに書いて
パフォーマンスが重要になった時に初めてちょっと複雑なSQL文を書くようにします。
初めから複雑に書いてしまうと、その後全ての場面で保守が大変になります。

単純なSQL文で十分な場面の方が多いのです。
そして皮肉なことに、その方がパフォーマンス的にも優れている事が多いです。
複雑なSQL文は、何の利益も生み出しません。

プログラムとデータベース

そう、結局DB(SQL)はプログラムの一部なのです。

優れたライブラリを使うことでプログラムの質が向上するように
優れたDB(SQL)を使うことも質の向上に繋がるのです。

プログラムのソース管理をするように、
DBのソース(CREATE TABLE文など)もきちんとソース管理しましょう。
決して、DBベンダが提供する管理ツールだけで済ませてはいけません。

SQL文

その管理ツールは、誰もが読むことが出来て
どんな環境でもリストアできるような形式、つまりSQL文で
テーブル定義やテーブル内容を出力してくれますか?

YESならば問題はありません。
しかし、多くの場合そうではないはずです。
これでは、そのツールを使わないと環境が再現できません。
全ての開発者が、あなたと同じツールを使っているわけではないということを
知っておきましょう。

自動化のススメ

管理ツールを使った作業は通常、自動化できません。
ですから、プログラマは管理ツールを使いたがらないのです。
そして、手動では操作を誤る可能性があります。
さらに、ユーザが望む柔軟な要望にも対応できません。

例えば、100個あるテーブル名称に先頭に「T_」というプレフィックスを
付けたいときにあなたならどうしますか?
手作業でテーブル名称を変更して、その操作を100回繰り返したいとは
誰も思わないはずです。

SQL文で管理していれば、そのSQL文を自分の好きな方法で
編集することが出来ます。
この例ならば、テキストエディタの置換機能を使って
テーブル定義の先頭にプレフィックスを付けてそのSQL文を実行するだけです。
簡単ですし、ミスもありません。

CSVファイルについて

DBレコードを受け渡すのにCSVファイルを使う人は多いようです。
これには若干の危険が含まれますが、注意すればその危険を回避することが出来ます。
CSVファイルをインポート(CSV→DB)するとき、次の点を明確にします。

・カラムの区切り文字
・カラムデータを囲む文字
・エスケープ文字
・ファイルの文字コード

これさえ注意しておけば、CSVのインポートに失敗する可能性は低くなります。
決して独自のダンプファイルなどで扱ってはいけません。
DBのバージョンが異なったりするだけで、
そのダンプファイルは使いものにならないからです。

あ、そうそう。CSVファイルは決してExcelで編集しないで下さい。
きっと悲惨な結果があなたを待っています。

SQL文の威力

一番確実なのはSQL文で扱うことです。
僕は常にこの方法を取ります。
SQL文であれば、どんなクライアントプログラムからもJavaプログラムからも
簡単に実行できるからです。
そう、どんな環境でも使えるという汎用性こそが
SQL文が持つ最大の利点なのです。

SQL文だとファイルサイズが大きくなるので嫌だという人は
そのファイルを圧縮してみましょう。
それなりの圧縮形式(gzip2など)を使えば
CSVを圧縮したのと同じ位のファイルサイズになるはずです。

MySQL4.1以降を使っていれば、mysqldumpは一括形式のSQL文を出力してくれます。
これならば、圧縮しなくてもCSV形式と同じ程度のファイルサイズになるでしょう。

[コメント(0)]