第16話「顧客名簿がぐちゃぐちゃ」
テクノロジ系 / データベース ── テーマ:関係データベース・主キー・外部キー・正規化
▶ マンガで読む(無料・登録なし)この話で覚える用語(7語)
- 関係データベースかんけいでーたべーす
- データを行と列からなる「表」の形で管理し、表どうしを共通の項目で関連づけるデータベース。リレーショナルデータベース(RDB)ともいう。
- DBMSでぃーびーえむえす
- データベース管理システム。データベースの作成・検索・更新を行い、複数の人が同時に使っても矛盾が起きないよう管理するソフトウェア。
- 主キーしゅきー
- 表の中で、1行を特定するための列。値が重複してはいけない(一意)、空(NULL)にしてはいけない、という条件がある。例:顧客番号・社員番号。
- 外部キーがいぶきー
- 他の表の主キーを参照する列。注文表の「顧客番号」が顧客表の主キーを指す、など。参照先に無い値は入れられない。
- 正規化せいきか
- データの重複をなくすように表を分割し、整理すること。更新したときに一部だけ書き換わって矛盾する、といったことを防ぐ。
- 選択せんたく
- 関係演算のひとつ。表から、条件に合う「行」を取り出す操作。
- 射影しゃえい
- 関係演算のひとつ。表から、指定した「列」を取り出す操作。
試験に出るポイント
- ① 値が重複しない(同じ値は2つとない)
- ② 空(NULL)にできない
- たとえ:学校の出席番号。同じ番号の人はいないし、番号のない人もいない
- 氏名や生年月日は重なりうるので、主キーには向かない
- 選択(せんたく)=洗濯物は物干しに横に並ぶ → 行を取り出す
- 射影=影は縦にのびる → 列を取り出す
- 結合=共通の列(顧客番号など)で2つの表をつなぐ
- 主キー=重複しない・空にできない
- 外部キー=他の表の主キーを参照する列
- 正規化=重複をなくし、更新時の矛盾を防ぐ
- 行を取り出す → 選択 / 列を取り出す → 射影
- 表どうしをつなぐ → 結合 / 管理するソフト → DBMS
確認クイズ(ITパスポート試験の形式)
- 値が重複せず、空の値も許されない
- 他の表の主キーの値を参照する
- 値の重複は許されるが、空の値は許されない
- 表の中でいちばん左の列でなければならない
答えと解説を見る
正解:ア 値が重複せず、空の値も許されない
主キーは1行を特定するための列なので、重複も空もダメです。他の表の主キーを参照するのは外部キーです。
- 選択
- 射影
- 結合
- 正規化
答えと解説を見る
正解:ア 選択
行を取り出すのは選択、列を取り出すのは射影、表どうしをつなぐのは結合です。正規化は表の設計の話です。
- データの重複をなくし、更新したときの矛盾を防ぐ
- 複数の表を1つにまとめて、検索を速くする
- データを暗号化して、漏えいを防ぐ
- データを定期的に別の媒体に複製して保管する
答えと解説を見る
正解:ア データの重複をなくし、更新したときの矛盾を防ぐ
正規化は重複をなくして整合性を保つため。表を1つにまとめるのはむしろ逆です。暗号化はセキュリティ、複製はバックアップの話です。
マンガのセリフ(文字版)
ミライ「顧客名簿、同じお客さまが3行も…しかも住所がバラバラ…!」
ツカサ先輩「そろそろデータベースの出番だな。データをまとめて管理し、みんなで使うしくみだ」
ミライ「表計算とは違うんですか?」
ツカサ先輩「データを表の形で管理するのが関係データベースだ」
ツカサ先輩「管理するソフトがDBMS。大勢が同時に使っても矛盾しないよう見張る」
ミライ「佐藤一郎さんが2人…ドッペルゲンガー!?」
ツカサ先輩「同姓同名だ。だから重複しない番号で見分ける。これが主キーだ」
- ① 値が重複しない(同じ値は2つとない)
- ② 空(NULL)にできない
- たとえ:学校の出席番号。同じ番号の人はいないし、番号のない人もいない
- 氏名や生年月日は重なりうるので、主キーには向かない
ツカサ先輩「注文のたびに、お客さまの住所まで毎回書いたらどうなる?」
ミライ「引っ越したら全部の行を直さなきゃ…1か所でも忘れたら矛盾します!」
ツカサ先輩「重複をなくすよう表を分けるのが正規化。住所は顧客表に1回だけ書く」
ツカサ先輩「注文表には顧客番号だけ。他の表の主キーを指す列が外部キーだ」
ミライ「東京のお客さまだけ取り出したいときは?」
ツカサ先輩「条件に合う行を取り出すのが選択。列を取り出すのが射影だ」
- 選択(せんたく)=洗濯物は物干しに横に並ぶ → 行を取り出す
- 射影=影は縦にのびる → 列を取り出す
- 結合=共通の列(顧客番号など)で2つの表をつなぐ
部長「なるほど、洗濯物は射影で干すんだな!」
ツカサ先輩「部長、逆です!洗濯は横=選択で行、影は縦=射影で列です!」
ミライ「注文表と顧客表を顧客番号でつなげば、注文した人の住所も出せる?」
ツカサ先輩「そう、それが結合だ」
ミライ「顧客番号を主キーにして、住所は1か所だけ!もうバラバラになりません!」
ツカサ先輩「いいデータベース設計だ」
- 主キー=重複しない・空にできない
- 外部キー=他の表の主キーを参照する列
- 正規化=重複をなくし、更新時の矛盾を防ぐ
- 行を取り出す → 選択 / 列を取り出す → 射影
- 表どうしをつなぐ → 結合 / 管理するソフト → DBMS
部長「ワシも主キーを決めた!家の鍵だ!これで重複なし!」
ミライ「主キーは鍵じゃなくて、行を見分ける列です!!」