うぃろぅ.log

140字で綴りきれない日々の徒然備忘録

【備忘録】 「楽々ERDレッスン」を読む

うぃろぅです。

今日も今日とて備忘録。ですが今日はe-ラーニングではありません。読書です。 ここのところDBについて学習していたため、その流れで実践的な本を読みます。 所用と重なって読むのに4日かかってしまった、かなC。

Fjord BootCampのプラクティス対象にもなっているため、一石三鳥ですね。

今日のテーマ

楽々ERDレッスン (CodeZine BOOKS)

楽々ERDレッスン (CodeZine BOOKS)

「楽々ERDレッスン」を読む

とはいえ本の内容を詳細に書くわけにはいかないため、大事だと思ったことをいくつか記録しておく。

正規化について

業務視点から見た正規化が大事。
例えば「商品」と「単価」は従属しているが、セール等で割り引くことがあるのならば「商品」テーブルにも「明細」テーブルにも「単価」カラムを設定しておく必要があるよね、という話。
2つの「単価」は名前が同じでも指し示しているものが違う(設定価格と実売価格)ため、むしろ両方に設定してしかるべきであると。なるほど。

IDの重要性

主キーに「○○コード」を設定することが多くある。
たとえこれがユニークだとしてもコード体系が変わる可能性が0でないのであれば、この値は外部キーとして設定するべきではない。郵便番号ですら5桁から7桁になったのだから恒久的に変わらないという保証 はどこにもない。
確かにそのとおりで、そうなってしまうのであれば「○○コード」とは別に「○○ID」を定義するべきなのである。すなわち識別子(アイデンティファイア)。これならコード体系が変わっても大丈夫。どんどん疎結合にしよう。

標語

One Fact In One Place

1つの事実は1つの場所へ。

正規化のコツは「いかに無理なく無駄なくするか」を念頭に置くこと。
この「無駄なく」が曲者で、先ほどの「実売価格」や例えば「セット価格」のように、「事実を重複なく記録できる」状態になるように正規化しなければ「作業の無駄」が生じてしまうことになる。重複項目のように見えるが事実を記録する上で必要な項目なため重複はしていない、とそういうことになる。

可逆性に注目する

可逆性のあるものは項目削除としてよいが、不可逆性のあるものは項目として設定しないと正規化とはいえない。

2部

2部は歴史のお勉強が主な内容となっている。成り立ちから必要性を明らかにしていくわけである。
こちらは詳細に書くような内容ではないため割愛。

3部

3部がこの本の核となっている。とてもわかりやすい(小並感)。

実際に表組みになっている用紙や入力欄を見かけたらDBに落とし込んでみようよ、という試み。

手順

  1. イベント系
    「予約」とか「注文」とか、入力結果が最終的に何をするものなのかを見出す。
  2. リソース系
    「誰が」予約 / 注文するのか、「何を」予約 / 注文するのか、といった風に主語や目的語を見出す。
  3. 項目追加
    作ったテーブルに項目を追加していく。
  4. 識別子追加
    何はともあれ識別子を追加する。
  5. リレーションシップ設定
    外部キーは識別子を対象にしてリレーションシップを設定していく。
  6. 完了!!

ざっくりこの流れに沿えば数分でER図が完成する。私はまだ数分では終わらないので基礎連を重ねて基礎体力を身につけていく所存。

「~日」と語尾につけて違和感がないのはイベント系、「~名」と語尾につけて違和感がないのはリソース系と判断できる。「予約日」「予約者名」と考えるとなるほど、となる。

ファーストフードが難しい

実際にSQL Fiddleあたりを使ってやってみると、第3回のファーストフード店レシートがなかなか曲者。セットがあるわここで食べるか持ち帰るかの選択肢があるわレジナンバーも管理するわでもうね。てんやわんや。順番に基礎力をつけるべし。

ファーストフードのセット商品の表示に若干手間取ったため、実際に作ってみた。これが美しい形なのかは不明。自己参照は慣れが必要。

導出項目と向き合う

ガス料金、電気料金の例では導出項目の排除がポイントとなっている。読み進めていくと「確かにそうだな」となってシンプルな形に落ち着くが、自分で手を動かしてみると全くそうはいかない。基礎体力、つけよう。

4部

付録。SQLについてのあれこれ。
簡単そうに見える処理でも内部的には多くの処理が走っているんだよ、という話。
「書き順」についても触れられていて、処理順に沿って書くと可読性が上がる。心がけよう。

さらにRDBMSボトルネックについて。最近はネットワーク自体がボトルネックとなってきていて、そのことから「NoSQL」という考え方が広まりつつある。私は詳しくないため詳しく書かれている記事を以下に貼っておく。

qiita.com

まだまだ学びが溢れているなあ。

まとめ

この本、非常に実践的でためになる。実際に手を動かすのが一番の勉強になるため、これからもサクサク手を動かしていこうとなる良書だった。

DBまわりの座学はいったんこんなところかなあ。

ではまた。