
【Iパス7問を基礎から】用語問題で粘れるデータベース | 「キー」と「正規化」
データベースのラスボスは正規化(表分け)や結合の計算問題です。
このNoteでは計算問題に備えて、キーや正規化の用語を解説し過去問を解きます。主キーと外部キーを概念、約束事(制約)、過去問を実例図解を交えて解説してみます。
ITパスポートのデータベース問題対策は以下で構成しています。Part4までは用語問題なので、頑張りましょう。
なお、このNoteは私が専門学校で教えてきた指導経験と970点合格をした実績に基づいていますので、ちょっとでも信用してくれたら嬉しいです。
\全てのNoteへのリンク集/
役割のある列 | 主キーと外部キー
データベースの表の列(項目)には、特別な役割があることを学習します。
主キーと主キー制約
外部キーと参照制約
主キーであり外部キーであるケース
複合主キーであるケース
主キーについて
主キーは、その表から1行を引き出すための列です。
主キーには2つの約束事「制約」があります。
一意制約:他の行との重複を許さない
非NULL制約:空白を許さない
以上2つを合わせて「主キー制約」と云います。

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

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

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

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

主キーが複数の列になる場合「複合主キー」
主キーとは、一行を特定できれば良いので、複数の列の組み合わせでもOKです。
例えば、成績表で「学籍番号S001の1年生の時」「~2年制の時」という特定も仕方もありますからね。

キーに関する問題演習
解く前に用語を追加します。
行は、レコードとも云います
列は、フィールドや項目とも云います
以下の問題の太字は、覚えて欲しい言葉・解く時に注目して欲しい言葉です。
主キーを設定する理由はどれか。
ア:算術演算の対象としないことが明確になるから
イ:主キーを設定した列が検索できるようになるから
ウ:他の表からの参照を防止できるようになるから
エ:表中のレコード(行)を一意に識別できるようになるから
正答はエ。一意制約のことですね。
主キー制約は、一意制約と非NULL制約から成ります。
主キーの設定に関する記述で正しいのはどれか。
a:値が他のレコードと重複する場合、主キーとして適格ではない
b:インデックスとの重複設定はできない
c:主キーの値は数値である必要がある
d:複数のフィールド(列)を使って主キーを構成できる
ア:a, c イ:a, d ウ:b, c エ:b, d
正答はイ。
aは一意制約の通り。dは複合主キーのこと。この時点でイに絞られます。
考えやすいcもお薦め。ユーザーIDなんて数値だけじゃない場合ありますからね。よってcはあり得ないから、アとウは消えます。残りはイとエ。
なおbのインデックスとは、検索を高速化するために設定します。>>データベース基本用語Note<< にて過去問を扱っています。
外部キーに関する記述で正しいのはどれか。
ア:外部キーは、一意制約(ユニーク制約)が付けられている
イ:外部キーを設定したフィールドには、重複する値を設定できない
ウ:一つの表に複数の表の外部キーを設定できない
エ:複数のフィールドをまとめて一つの外部キーに設定できる
具体例を考えながら消去法が良いかもしれません。
ア:外部キーにかかっているのは、参照制約
イ:外部キーは一意制約されてないので、重複して大丈夫
ウ:複合主キーのように複数列の組み合わせもできます
イだけ見てみましょう、簡単なので。外部キーに1年1組は複数ありますよね。

正規化について
データベースにおいて、表を適切に分けることを正規化と云います。
一つの表に全てのデータをぶち込むと、大変なのは想像できますよね。例えば、クラス表・成績表などのように表を分けます。

データの正規化を行う目的として適切なのはどれか。
ア:データに冗長性をもたせ、データ誤りを検出するため
イ:データの矛盾や重複を排除して、データの維持管理を容易にするため
ウ:データの文字コードを統一して、データの信頼性と格納効率を向上させるため
エ:データを可逆圧縮して、アクセス効率を向上させるため
正答はイ。
特にウとエは、表を分けることと関係ないので必ず消してくださいね。イチイチ覚える必要はありません。
データベースにおいて売上伝票の表を設計するとき、表を構成するフィールドの関連性を分析し、データの重複・不整合が発生しないように、複数の表に分ける作業はどれか。
ア:結合
イ:射影
ウ:正規化
エ:排他制御
正答はウ。>>データベース基本用語Note<< にまとめています。
結合:複数の表から一つの表を作る操作
射影:列を抽出する操作
選択:行を抽出する操作。「選行主婦」と覚えると良き
排他制御:複数のアクセスがあった時にデータベースに矛盾が発生しないように、一つのアクセスを受け入れ、他のアクセスに待ってもらう制御。ロックとも云います。
正規化された表におけるキー
最後に、正規化された表でのキーの特性についての問題をしましょう。
次の社員表において、冗長な項目(列)はどれか。
社員表(社員番号, 社員名, 生年月日, 現在の満年齢, 住所, 趣味)
ア:生年月日 イ:現在の満年齢 ウ:住所 エ:趣味
正答はイ。
「冗長」とは重複と同じ意味です。転じて、他の項目と同じ、または求めることができる項目と考えます。
イの年齢は、表中の生年月日と現在日時から計算できます。データベースはコンピュータ上で動いてますからね。ちょっと発想が必要でずるかったかもしれません。
とはいえ、他の生年月日・住所・趣味を他の項目から求めようがないですから。
よくあるパターンだと、「単価」列と「購入個数」列があるときに、「購入額」列は要らないですね。(実は、いちいち計算すると処理に時間がかかるので、あえて購入額列を設ける場合もありますが別の話です。)
以下の5つの条件で従業員表と部門表を作成した。従業員表の主キーはどれか。
①各従業員は他人と重複しない従業員番号を一つもつ
②同姓同名の従業員がいてもよい
③各部門には重複のない部門コードを一つもつ
④一つの部門には複数名の従業員が所属する
⑤1人のの従業員が所属する部門は一つだけとする
従業員表(従業員番号, 従業員名, 部門コード, 生年月日, 住所)
部門表(部門コード, 部門名, 所在地)
ア:従業員番号
イ:従業員番号と部門コード
ウ:従業員名
エ:部門コード
正答はア。あまり考える必要ないかもですね。
なおどうしても分からないとき、主キーを名前で選んでもよいですよ。「~番号」「~ID」「~コード」という列名。または、一番左の列でも良いです(複合主キーの可能性もあり)。
①~⑤の条件を満たす表を作ってみました。

イの従業員名は、②で「同姓同名を許す」ので一意制約を満たしていないので主キーには不適格。
ウの従業員番号&部門コードは、部門コードなくても主キーになれます。もし⑤が「一人の従業員が複数の部署に配属される」とあれば、従業員番号と部門コードが複合主キーになります。
エの部門コードでは個人を特定できません。④より一部門には複数の従業員が所属するから。
まとめ | いよいよ次は計算問題
復習がてらまとめます。
特別な役割を持った項目の名前、
主キー:表から一行を特定するための項目
複合主キー:複数の項目で主キーとする
外部キー:別の表と関連付けるための項目
キーにつけられる制約。
主キー制約:
一意制約(ユニーク制約):他の行との重複を許さない
非NULL制約:空白を許さない
参照制約:外部キーに付ける制約
参照先のデータ「勝手に消さないで!」
あとは、行や列の別名。
行:レコード
列:フィールド、項目
次はいよいよ、データベースの結合・正規化の計算問題(未定)を準備しますね。
>>正規化の演習問題対策Note<< ←次どうぞ!
\全てのNoteへのリンク集/
p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。
でわでわ(・ω・▼)ノシ
いいなと思ったら応援しよう!
