読者です 読者をやめる 読者になる 読者になる

雑草SEの備忘録

[旧:東大卒SEの備忘録]東大を卒業し、SEとして働くことになった。備忘録的に作業を綴る。

楽々ERDレッスン

RDB

前々回の記事で、リレーショナルデータベースに関する良書として、こちらの本の紹介をしました。

今回は、前々回も紹介した、楽々ERDレッスンも読み終わったので紹介したいと思います。

この本は大きく3つの部に分かれています。第1部のDB設計総論、第2部のRDBMS総論、第3部の楽々ERDレッスンです。

 

第1部のDB設計総論では、データベース設計の手順について書かれているのですが、その中で口を酸っぱくして書かれているのは、アイデンティファイアをつけるべきだということです。ここでいうアイデンティファイアとは、いわゆるid。Railsを触ったことのある方なら、テーブルをつけると問答無用で各タプルにidが付与されます。これがこの本でいうアイデンティファイアであると言えます。

純粋なテーブル設計をしていた人がRailsを触ると、何勝手にid振ってくれてんねん!と思う人もいると思います。かくいう私がそうでした。私はRailsをやるまえにデータベーススペシャリストの資格を取得していたので、複合キーなども駆使して他テーブルと連関づけるというのを普通に(社会人2年目の4月に資格をとったので、実務上の経験ではなく、試験の問題上でですが)やっていました。そういう人から見ると全てのデータにidを付与するというのは奇妙に感じます。しかし、楽々ERDレッスンでは、idを付与することがいかに有用かが書かれています。詳細は本を読んでいただくとして(きちんと説明しきる自信もない)、実はこれは私もRailsを始めて1年近く経ちましたが、実感として感じていることです。idの付与があることで他テーブルとの関連づけが非常に楽になりました。

 

第2部は経営資産としてのRDBMSの重要性について書かれています。データはもはや経営にとって欠かせないものになっています。これをいかに管理し、いかに活用するかが競争力のある会社になるかどうかの肝となってくるのは言うまでもありません。経営資産であるデータをうまく管理すること、そのためには、ERDを作ってデータを正規化(筆者は数学的正規化と業務的正規化の両方を考える必要があると言っています)する必要があり、その過程で既存の業務の見直しもできることになります。

確かに、RDBMSにデータを落とし込めるということは、既存の業務を正しく理解していないといけません。ERDを書いてデータを管理するということは、業務理解が大前提です。これは現実の世界と向き合うということなので、ただ機械と向き合えば良いプログラミングの世界とは違ったスキルが求められます。個人的には、ソフトウェアエンジニアとしてこの部分こそが一番面白みのあるところなのではないかと思っています。

 

第3部はいよいよ楽々ERDレッスン。ここでは、実際の例を元にERDを作成する過程を説明しています。ファストフード店でのレシートや病院の明細書兼領収書等をもとに説明されています。具体例があるので、まずは自分でERDをつくってみて、本書と照らし合わせてみるといった実践的な使い方もできます。

 

この本を読んでよかったことは、Railsが強制する各データにidを付与するということの重要性です。Railsを1年やってみて、その有用性を感じながらも経験者に裏付けされた理由は非常に納得感のあるものです。

また、単に教科書的なリレーショナルデータベースの知識ではなく、経営とも密接に結びついたデータベースを、ともするときれいな実装や理想ばかりにとらわれがちなエンジニアに、それをやる本来の目的を思い出してくれてくれます。

また、この本は初版が2006年ですが、10年をたった今でも色褪せないリレーショナルデータベースの技術であることを確信させてくれます。また、データベースの正規化をすると性能が悪くなるからあえて正規化しないという意見を持つ人もいますが、こういう立場に対して、

今のCPUのスペックは一体どれほどのものかということです。あるいはメモリです。RAMの容量がもう平気で1Gを超えられるようになっている状態で、ましてOSが64ビットに突入している状況において、20年ほど前のハードスペックを前提にした方法論をいまだに引きずっているというのは、ナンセンスではないのかということです。

(羽生章洋「楽々ERDレッスン」p 99)

 

と丁寧な口調でこき下ろしています。

10年前の書籍においてもこのように言われているのですから、まして2016年の今となっては、ということです。

 

最後に、前々回の記事でも書きましたが、@t_wadaさんに勧められたデータベース関連の書籍を改めて載せてこの記事を締めくくりたいと思います。