見出し画像

【Iパス7問を基礎から】用語問題で粘れるデータベース | 「キー」と「正規化」

データベースのラスボスは正規化(表分け)や結合の計算問題です。

このNoteでは計算問題に備えて、キーや正規化の用語を解説し過去問を解きます。主キーと外部キーを概念、約束事(制約)、過去問を実例図解を交えて解説してみます。

ITパスポートのデータベース問題対策は以下で構成しています。Part4までは用語問題なので、頑張りましょう。


なお、このNoteは私が専門学校で教えてきた指導経験と970点合格をした実績に基づいていますので、ちょっとでも信用してくれたら嬉しいです。

\全てのNoteへのリンク集/



役割のある列 | 主キーと外部キー

データベースの表の列(項目)には、特別な役割があることを学習します。

  • 主キーと主キー制約

  • 外部キーと参照制約

  • 主キーであり外部キーであるケース

  • 複合主キーであるケース



主キーについて

主キーは、その表から1行を引き出すための列です。

主キーには2つの約束事「制約」があります。

  • 一意制約:他の行との重複を許さない

  • 非NULL制約:空白を許さない

以上2つを合わせて「主キー制約」と云います。



外部キーについて

外部キーは、別の表と紐づけるための項目で、他の表の主キーと共通します。

外部キーの約束事は参照制約と云います。参照先(別の表)の項目を勝手に消してしまってはいけないなど、追加や変更に関する約束です。



主キーであり外部キーである場合

主キーであり外部キーである場合もあります。

なお、主キーに下線外部キーに点線をしますが、主キー&外部キーの場合は下線 にします。よって下線を見たら「主キーだけど、ワンチャン外部キーの可能性も」 と思いましょう。



主キーが複数の列になる場合「複合主キー」

主キーとは、一行を特定できれば良いので、複数の列の組み合わせでもOKです。

例えば、成績表で「学籍番号S001の1年生の時」「~2年制の時」という特定も仕方もありますからね。


キーに関する問題演習

解く前に用語を追加します。

  • は、レコードとも云います

  • は、フィールドや項目とも云います

以下の問題の太字は、覚えて欲しい言葉・解く時に注目して欲しい言葉です。


主キーを設定する理由はどれか。
ア:算術演算の対象としないことが明確になるから
イ:主キーを設定した列が検索できるようになるから
ウ:他の表からの参照を防止できるようになるから
エ:表中のレコード(行)一意に識別できるようになるから

「ITパスポート試験 令和元年度問66」より改変

正答はエ。一意制約のことですね。

主キー制約は、一意制約と非NULL制約から成ります。


主キーの設定に関する記述で正しいのはどれか。
a:値が他のレコードと重複する場合、主キーとして適格ではない
b:インデックスとの重複設定はできない
c:主キーの値は数値である必要がある
d:複数のフィールド(列)を使って主キーを構成できる
ア:a, c イ:a, d ウ:b, c エ:b, d

「ITパスポート試験 令和5年度問78」より改変

正答はイ。

aは一意制約の通り。dは複合主キーのこと。この時点でイに絞られます。

考えやすいcもお薦め。ユーザーIDなんて数値だけじゃない場合ありますからね。よってcはあり得ないから、アとウは消えます。残りはイとエ。

なおbのインデックスとは、検索を高速化するために設定します。>>データベース基本用語Note<< にて過去問を扱っています。


外部キーに関する記述で正しいのはどれか。
ア:外部キーは、一意制約(ユニーク制約)が付けられている
イ:外部キーを設定したフィールドには、重複する値を設定できない
ウ:一つの表に複数の表の外部キーを設定できない
エ:複数のフィールドをまとめて一つの外部キーに設定できる

「ITパスポート試験 平成30年度秋問73」より改変

具体例を考えながら消去法が良いかもしれません。

  • ア:外部キーにかかっているのは、参照制約

  • イ:外部キーは一意制約されてないので、重複して大丈夫

  • ウ:複合主キーのように複数列の組み合わせもできます

イだけ見てみましょう、簡単なので。外部キーに1年1組は複数ありますよね。


正規化について

データベースにおいて、表を適切に分けることを正規化と云います。

一つの表に全てのデータをぶち込むと、大変なのは想像できますよね。例えば、クラス表・成績表などのように表を分けます。


データの正規化を行う目的として適切なのはどれか。
ア:データに冗長性をもたせ、データ誤りを検出するため
イ:データの矛盾や重複を排除して、データの維持管理を容易にするため
ウ:データの文字コードを統一して、データの信頼性と格納効率を向上させるため
エ:データを可逆圧縮して、アクセス効率を向上させるため

「ITパスポート試験 平成31年度問92」より改変

正答はイ。

特にウとエは、表を分けることと関係ないので必ず消してくださいね。イチイチ覚える必要はありません。


データベースにおいて売上伝票の表を設計するとき、表を構成するフィールドの関連性を分析し、データの重複・不整合が発生しないように、複数の表に分ける作業はどれか。
ア:結合 
イ:射影 
ウ:正規化 
エ:排他制御 

「ITパスポート試験 令和元年度問87」より改変

正答はウ。>>データベース基本用語Note<< にまとめています。

  • 結合:複数の表から一つの表を作る操作

  • 射影を抽出する操作

  • 選択を抽出する操作。「選行主婦」と覚えると良き

  • 排他制御:複数のアクセスがあった時にデータベースに矛盾が発生しないように、一つのアクセスを受け入れ、他のアクセスに待ってもらう制御。ロックとも云います。


正規化された表におけるキー

最後に、正規化された表でのキーの特性についての問題をしましょう。


次の社員表において、冗長な項目(列)はどれか。
社員表(社員番号, 社員名, 生年月日, 現在の満年齢, 住所, 趣味)

ア:生年月日 イ:現在の満年齢 ウ:住所 エ:趣味

「ITパスポート試験 令和年度問」より改変

正答はイ。

「冗長」とは重複と同じ意味です。転じて、他の項目と同じ、または求めることができる項目と考えます。

イの年齢は、表中の生年月日と現在日時から計算できます。データベースはコンピュータ上で動いてますからね。ちょっと発想が必要でずるかったかもしれません。

とはいえ、他の生年月日・住所・趣味を他の項目から求めようがないですから。

よくあるパターンだと、「単価」列と「購入個数」列があるときに、「購入額」列は要らないですね。(実は、いちいち計算すると処理に時間がかかるので、あえて購入額列を設ける場合もありますが別の話です。)


以下の5つの条件で従業員表と部門表を作成した。従業員表の主キーはどれか。
①各従業員は他人と重複しない従業員番号を一つもつ
②同姓同名の従業員がいてもよい
③各部門には重複のない部門コードを一つもつ
④一つの部門には複数名の従業員が所属する
⑤1人のの従業員が所属する部門は一つだけとする
従業員表(従業員番号, 従業員名, 部門コード, 生年月日, 住所)
部門表(部門コード, 部門名, 所在地)
ア:従業員番号
イ:従業員番号と部門コード
ウ:従業員名
エ:部門コード

「ITパスポート試験 令和4年度問65」より改変

正答はア。あまり考える必要ないかもですね。

なおどうしても分からないとき、主キーを名前で選んでもよいですよ。「~番号」「~ID」「~コード」という列名。または、一番左の列でも良いです(複合主キーの可能性もあり)。


①~⑤の条件を満たす表を作ってみました。

イの従業員名は、②で「同姓同名を許す」ので一意制約を満たしていないので主キーには不適格。

ウの従業員番号&部門コードは、部門コードなくても主キーになれます。もし⑤が「一人の従業員が複数の部署に配属される」とあれば、従業員番号と部門コードが複合主キーになります。

エの部門コードでは個人を特定できません。④より一部門には複数の従業員が所属するから。


まとめ | いよいよ次は計算問題

復習がてらまとめます。

特別な役割を持った項目の名前、

  • 主キー:表から一行を特定するための項目

    • 複合主キー:複数の項目で主キーとする

  • 外部キー:別の表と関連付けるための項目

キーにつけられる制約。

  • 主キー制約

    • 一意制約(ユニーク制約):他の行との重複を許さない

    • 非NULL制約:空白を許さない

  • 参照制約:外部キーに付ける制約

    • 参照先のデータ「勝手に消さないで!」

あとは、行や列の別名。

  • 行:レコード

  • 列:フィールド、項目

次はいよいよ、データベースの結合・正規化の計算問題(未定)を準備しますね。

\全てのNoteへのリンク集/

p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。

でわでわ(・ω・▼)ノシ







この記事が参加している募集

学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ