📒 ミライのITパス日誌

第16話「顧客名簿がぐちゃぐちゃ」

テクノロジ系 / データベース ── テーマ:関係データベース・主キー・外部キー・正規化

▶ マンガで読む(無料・登録なし)

この話で覚える用語(7語)

関係データベースかんけいでーたべーす
データを行と列からなる「表」の形で管理し、表どうしを共通の項目で関連づけるデータベース。リレーショナルデータベース(RDB)ともいう。
DBMSでぃーびーえむえす
データベース管理システム。データベースの作成・検索・更新を行い、複数の人が同時に使っても矛盾が起きないよう管理するソフトウェア。
主キーしゅきー
表の中で、1行を特定するための列。値が重複してはいけない(一意)、空(NULL)にしてはいけない、という条件がある。例:顧客番号・社員番号。
外部キーがいぶきー
他の表の主キーを参照する列。注文表の「顧客番号」が顧客表の主キーを指す、など。参照先に無い値は入れられない。
正規化せいきか
データの重複をなくすように表を分割し、整理すること。更新したときに一部だけ書き換わって矛盾する、といったことを防ぐ。
選択せんたく
関係演算のひとつ。表から、条件に合う「行」を取り出す操作。
射影しゃえい
関係演算のひとつ。表から、指定した「列」を取り出す操作。

試験に出るポイント

主キーの2つの条件
覚え方:せんたく物は横に干す
ここ試験に出る!

確認クイズ(ITパスポート試験の形式)

問1 関係データベースの主キーの性質として、適切なものはどれか。
  1. 値が重複せず、空の値も許されない
  2. 他の表の主キーの値を参照する
  3. 値の重複は許されるが、空の値は許されない
  4. 表の中でいちばん左の列でなければならない
答えと解説を見る

正解:ア 値が重複せず、空の値も許されない
主キーは1行を特定するための列なので、重複も空もダメです。他の表の主キーを参照するのは外部キーです。

問2 関係データベースの表から、特定の条件を満たす行だけを取り出す操作はどれか。
  1. 選択
  2. 射影
  3. 結合
  4. 正規化
答えと解説を見る

正解:ア 選択
行を取り出すのは選択、列を取り出すのは射影、表どうしをつなぐのは結合です。正規化は表の設計の話です。

問3 データベースの設計で正規化を行う主な目的はどれか。
  1. データの重複をなくし、更新したときの矛盾を防ぐ
  2. 複数の表を1つにまとめて、検索を速くする
  3. データを暗号化して、漏えいを防ぐ
  4. データを定期的に別の媒体に複製して保管する
答えと解説を見る

正解:ア データの重複をなくし、更新したときの矛盾を防ぐ
正規化は重複をなくして整合性を保つため。表を1つにまとめるのはむしろ逆です。暗号化はセキュリティ、複製はバックアップの話です。

▶ アプリでクイズに挑戦(間違えた問題は復習に残ります)

マンガのセリフ(文字版)

ミライ「顧客名簿、同じお客さまが3行も…しかも住所がバラバラ…!」

ツカサ先輩「そろそろデータベースの出番だな。データをまとめて管理し、みんなで使うしくみだ」

ミライ「表計算とは違うんですか?」

ツカサ先輩「データを表の形で管理するのが関係データベースだ」

ツカサ先輩「管理するソフトがDBMS。大勢が同時に使っても矛盾しないよう見張る」

顧客番号氏名住所C001佐藤 一郎東京C002鈴木 花子大阪C003佐藤 一郎福岡
顧客表 横1行=レコード(行)、縦1列=フィールド(列)

ミライ「佐藤一郎さんが2人…ドッペルゲンガー!?」

ツカサ先輩「同姓同名だ。だから重複しない番号で見分ける。これが主キーだ」

📝 メモ:主キーの2つの条件
  • ① 値が重複しない(同じ値は2つとない)
  • ② 空(NULL)にできない
  • たとえ:学校の出席番号。同じ番号の人はいないし、番号のない人もいない
  • 氏名や生年月日は重なりうるので、主キーには向かない

ツカサ先輩「注文のたびに、お客さまの住所まで毎回書いたらどうなる?」

ミライ「引っ越したら全部の行を直さなきゃ…1か所でも忘れたら矛盾します!」

ツカサ先輩「重複をなくすよう表を分けるのが正規化。住所は顧客表に1回だけ書く」

ツカサ先輩「注文表には顧客番号だけ。他の表の主キーを指す列が外部キーだ」

注文表🔑注文番号🔗顧客番号商品A01C001ノートPCA02C002マウスA03C001キーボード顧客表の主キーを参照顧客表🔑顧客番号氏名住所C001佐藤 一郎東京C002鈴木 花子大阪🔑主キー:重複しない・空にできない🔗外部キー:他の表の主キーを参照する
表を分けて、キーでつなぐ 住所が変わっても、顧客表の1か所を直すだけ

ミライ「東京のお客さまだけ取り出したいときは?」

ツカサ先輩「条件に合う行を取り出すのが選択。列を取り出すのが射影だ」

選択射影番号氏名住所番号氏名住所行(横)を取り出す列(縦)を取り出す2つの表を共通の列でつなぐのが「結合」
選択と射影 行か列か。ここがいちばんのひっかけ
📝 メモ:覚え方:せんたく物は横に干す
  • 選択(せんたく)=洗濯物は物干しに横に並ぶ → 行を取り出す
  • 射影=影は縦にのびる → 列を取り出す
  • 結合=共通の列(顧客番号など)で2つの表をつなぐ

部長「なるほど、洗濯物は射影で干すんだな!」

ツカサ先輩「部長、逆です!洗濯は横=選択で行、影は縦=射影で列です!」

ミライ「注文表と顧客表を顧客番号でつなげば、注文した人の住所も出せる?」

ツカサ先輩「そう、それが結合だ」

ミライ「顧客番号を主キーにして、住所は1か所だけ!もうバラバラになりません!」

ツカサ先輩「いいデータベース設計だ」

📌 ここ試験に出る!:ここ試験に出る!
  • 主キー=重複しない・空にできない
  • 外部キー=他の表の主キーを参照する列
  • 正規化=重複をなくし、更新時の矛盾を防ぐ
  • 行を取り出す → 選択 / 列を取り出す → 射影
  • 表どうしをつなぐ → 結合 / 管理するソフト → DBMS

部長「ワシも主キーを決めた!家の鍵だ!これで重複なし!」

ミライ「主キーは鍵じゃなくて、行を見分ける列です!!」

← 第15話 社内カフェは黒字になる?第17話 全員に売れ、は無理? →