用語(5)
E-R図
実体(エンティティ)と実体間の関連(リレーションシップ)を図で表すデータモデリング手法。
E-R図(Entity-Relationship図)は、データベースに何を保存し、どう関係づけるかを設計段階で図にしたものです。『顧客』『商品』『注文』といった管理対象を実体(エンティティ)として四角で表し、実体どうしのつながりを関連(リレーションシップ)として線で結びます。
試験では、関連に付く『1対1』『1対多』『多対多』といった多重度(カーディナリティ)がよく問われます。例えば『1人の顧客が複数の注文を持つ』は1対多の関連です。E-R図はあくまで概念設計の道具で、ここで描いた関連を後から外部キーで実装します。テーブルそのものを表す図ではなく『設計図』である点を押さえましょう。
たとえ建物を建てる前の間取り図のようなもの。『リビング』『キッチン』という部屋(実体)と、ドアでつながる関係(関連)を先に図で決めてから、実際の工事(テーブル作成)に入るイメージです。
記憶フックE-R図といえば実体と関連をモデル化する設計図
主キー
テーブル内の1行(レコード)を一意に識別するための列、またはその組み合わせ。
主キー(プライマリキー)は、テーブルの中で1行を確実に1つだけ特定するための列です。例えば『社員番号』を主キーにすれば、同姓同名の社員がいても番号で必ず区別できます。
主キーには重要な制約が2つあります。値が重複してはいけない『一意性』と、空(NULL)にしてはいけない『非NULL制約』です。試験では『主キーには重複・NULLが許されない』という性質がよく問われます。氏名のように重複しうる列は主キーに向きません。複数列を組み合わせて1つの主キーとする『複合キー』も出題されます。
たとえクラスの出席番号のようなもの。名前は同じ人がいるかもしれませんが、出席番号は必ず1人に1つで重複せず、空欄もない。だから番号を言えば誰か一人に確定できます。
記憶フック主キーといえば行を一意に識別(重複・NULL禁止)
外部キー
他のテーブルの主キーを参照し、テーブル間を関連付けるための列。
外部キー(フォーリンキー)は、あるテーブルの列が別のテーブルの主キーを指し示すことで、2つのテーブルをつなぐ仕組みです。例えば『注文』テーブルの『顧客ID』列が『顧客』テーブルの主キー『顧客ID』を参照すれば、どの注文が誰のものか結びつきます。E-R図で描いた関連を実際に実装するのが外部キーです。
試験では『参照整合性』がよく問われます。これは外部キーが指す相手の行が必ず存在しなければならないというルールで、存在しない顧客IDの注文は登録できません。主キーと違い、外部キーは値の重複が許される(同じ顧客が複数注文できる)点も区別して覚えましょう。
たとえ宅配便の伝票に書く『お届け先の会員番号』のようなもの。番号は会員名簿(別テーブル)に実在する人を指していなければならず、存在しない番号は書けません。
記憶フック外部キーといえば他テーブルの主キーを参照して関連付け
インデックス
列の値と行の位置を対応づけ、検索を高速化する補助的なデータ構造。
インデックス(索引)は、テーブルの特定の列に作る『検索用の早見表』です。インデックスがないと全行を順番に調べる必要がありますが、インデックスがあれば目的の行へ素早くたどり着けます。検索や絞り込みが多い列に作ると効果的です。
試験では利点と欠点の両方が問われます。利点は検索の高速化。一方、データの追加・更新・削除のたびにインデックスも更新するため、書き込みが遅くなり、記憶領域も余分に使うという欠点があります。何にでも付ければよいわけではない点が重要です。
たとえ分厚い辞典の巻末にある『索引』のようなもの。索引があれば目的の語をすぐ引けますが、索引自体のページ分だけ本は厚くなり、本文を改訂するたびに索引も直す手間が増えます。
記憶フックインデックスといえば検索高速化だが書き込みは遅くなる
正規化
データの重複や矛盾を防ぐため、テーブルを適切に分割して整理する設計手法。
正規化は、1つのテーブルに情報を詰め込みすぎて生じる重複や更新時の矛盾(更新不整合)をなくすため、テーブルを意味のまとまりごとに分割する作業です。主キー・外部キーを使ってテーブルを結びつけながら、冗長なデータを排除します。
試験では段階が問われます。第1正規形(繰り返し項目をなくす)→第2正規形(主キーの一部だけで決まる項目を分離)→第3正規形(主キー以外の項目に依存する項目を分離)と進みます。目的は『データの重複排除』と『整合性の向上』です。逆に分割しすぎると結合処理が増える点も理解しておきましょう。
たとえ持ち物を種類ごとに引き出しへ分ける整理整頓のようなもの。何でも一つの箱に入れると同じ物が重複し探しにくいので、用途別に分けて『どこに何があるか』を主キーで参照し合うイメージです。
記憶フック正規化といえばテーブル分割で冗長排除と整合性向上