本日はテーブル・正規化・ER図の基本について書く。
テーブルについて
- テーブルに始まりテーブルに終わる。テーブルはデータの唯一の入れ物であり表。よって適切なテーブル管理がとても大切。
- テーブルは現実世界の鏡像。私たちは言葉という抽象概念で現実を区切っている。テーブルもこの最上位概念に対応する形に作ると良い。(直感的にわかりやすく、扱いやすく、メンテが楽になる)
- テーブルは集合であり関数。意味のあるまとまりであり、入力に対し一意に出力が決まる。(関数従属性とい言う)。これが最も重要なルールで、正規化やER図はこのエッセンスの補助技法。このルールに沿った美しいテーブルをいかに作れるかでシステムの良し悪しが決まる。
正規形について
- 意味は「きちんとした(テーブルの)形」。テーブルの基本ルールをマニュアル通り実現するための公式。第一正規形は「テーブルのセルに複合的な値を含まない」で当たり前。(入力に対し一意の出力が決まらないから)
- 第二正規形は「部分関数従属がないこと」。主キーが複数あり、その一部にだけ関数従属があるのは×。データを追加するときに間違えるリスクがあるから。(例。顧客ID(主キー)、注文連番(主キー)、注文日、顧客名のテーブル。顧客名は別に分けるべき。注文とるたび顧客名を入れるのは大変なので)
- 第三正規形は「推移関数従属がないこと」。主キー以外のキー同士に関数従属があるのは×。データを追加するときに間違えるリスクがあるから。
ER図について
- テーブルの関係を一望するための図。正規化を進めるとテーブルが増えるので、グラフィカルに理解しやすくする。
- 四角の枠で一つのテーブル。上のエリアに主キー(PK)、下のエリアにその他代表キー。
- テーブル間は線でつなぐ。あるテーブルの下のエリアにある外部キー(FK)が肝。
- 上の図はER図の例。まず「Aさんがスタンバイパス予約。スタンバイパス№0001、顧客ID001、アトラクションID01」。次に「Bさんもスタンバイパス予約。スタンバイパス№0002、顧客ID002、アトラクションID01」とする。なお、アトラクションID01は「くまのプーさん」。
- この場合、アトラクションID01「くまのプーさん」から見ると、2つのデータが存在する。ただ、アトラクションによっては一つもデータがないこともある。このようなときは0~多数の意味で、「〇と矢印」で表す。一方スタンバイパス側からみると、何らかのアトラクションは一つ決まるので「線で繋げる」のみで表す。
テーブル設計の重要性
- これから、テーブルやER図、スキーマなどかなり具体的な学習に入っていく。そのとき、「なぜこれを学んでいるのか」に立ち返れるようにするため、ここに記す。
- まず、ずさんなテーブル設計をして、データ不整合が起きて大問題になるケースは後を絶たないのが現状。だから、データベーススペシャリストはテーブル設計の基礎をしっかり理解し、体にしみこませる必要がある。(昔読んだ「拳児」という漫画に「半歩崩拳」というエピソードがあったが、色々な技を試すより基礎をしっかり身につけるほうが大事と考える)
- そうしないと、価値観や業務を守れず顧客の信頼を失う。スタンバイパス予約時にデータがうまく取り出せず家族が喧嘩になるようなケースを想定すればよい。自分がいかに、大事で尊い学びをしているのか理解できる。
参考書籍
おうちで学べるデータベースのきほん/ミック,木村明治/翔泳社
コメント