AOBA's Information Processing Education
1998/10/16
注意1:このページは、回線を切断した後でゆっくりご覧になってください(テキストを印刷する場合は、その取り扱いに注意してください)。
注意2:背景が白地の画面を長時間見つめていると頭が痛くなってしまいますので、ここは背景をグレーにしています。
「平成8年春期 第2種 午後 問4」 問4 関係データベースに関する次の記述を読んで、設問1〜3に答えよ。
A君は、図に示すB社の組織情報を関係データベースを用いてデータベース化することになった。B社の部門及び社員には、一意に識別するために、英字1文字と数字1文字からなる部門コード及び4けたの数字からなる社員番号が与えられている。
A君は、案1〜3を考えたが、上級者から@〜Bの基本的な不具合の指摘を受けた。
なお、表題部の下線は、その項目が行を一意に識別する主キーであることを表している。
![]()
[A君の案]
案1
部門コード 部門名 メンバ E1 営業 {(8604,河原学)(8612,河田和磨)(8905,河瀬隆一)
(9126,河野圭子)}K1 経理 {(8713,池神徹)(9001,池尻順平)(9121,池田義正)} S1 総務 {(8518,山田真)(9107,山下貴子)(9209,山内京子)
(9215,山本高志)}案2
部門コード 部門名 社員番号 氏名 E1 営業 8604 河原学 E1 営業 8612 河田和磨 E1 営業 8905 河瀬隆一 E1 営業 9126 河野圭子 K1 経理 8713 池神徹 K1 経理 9001 池尻順平 K1 経理 9121 池田義正 S1 総務 8518 山田真 S1 総務 9107 山下貴子 S1 総務 9209 山内京子 S1 総務 9215 山本高志 案3
氏名 社員番号 部門名 部門コード 河原学 8604 営業 E1 河瀬隆一 8905 営業 E1 河田和磨 8612 営業 E1 河野圭子 9126 営業 E1 山下貴子 9107 総務 S1 山田真 8518 総務 S1 山内京子 9209 総務 S1 山本高志 9215 総務 S1 池尻順平 9001 経理 K1 池神徹 8713 経理 K1 池田義正 9121 経理 K1 [上位者からの指摘]
@第1正規形ではない。
A関係(表)として誤りはないが、同姓同名の社員の登録ができない。
B現在の主キーの設定に誤りがある。設問1 A君の案1〜3と、それにあてはまる上級者からの指摘@〜Bの組合わせ(案,指摘)として、正しいものを解答群の中から三つ選べ。
解答群
ア (案1,指摘@) イ (案1,指摘A) ウ (案1,指摘B)
エ (案2,指摘@) オ (案2,指摘A) カ (案2,指摘B)
キ (案3,指摘@) ク (案3,指摘A) ケ (案3,指摘B)設問2 A君は、上級者からの指摘を参考に、案4を考えた。しかし、案4では、B社の組織情報データベースとしては、不都合が起こることが分かった。
B社の組織情報データベースとしての不都合のうち、案4で起こるものを、解答群の中から選べ。案4
社員番号 氏名 部門コード 部門名 8518 山田真 S1 総務 8604 河原学 E1 営業 8612 河田和磨 E1 営業 8713 池神徹 K1 経理 8905 河瀬隆一 E1 営業 9001 池尻順平 K1 経理 9107 山下貴子 S1 総務 9121 池田義正 K1 経理 9126 河野圭子 E1 営業 9209 山内京子 S1 総務 9215 山本高志 S1 総務 解答群
ア 経理に転属した(9209)山内京子の部門名を、変更することができない。
イ 結婚して性の変わった(9107)山下貴子の氏名を、変更することができない。
ウ 総務に配属された新入社員(9605)山岡則男を、登録することができない。
エ 退職した(8612)河田和磨を、削除することができない。
オ 配属者未定の新設部門,(S2)宣伝を、登録することができない。設問3 A君は、上述のすべての不都合のない、部門と社員の二つの関係(表)からなる案5を考えた。
案5
部門(表)
部門コード 部門名 E1 営業 K1 経理 S1 総務 社員(表)
社員番号 氏名 部門コード 8518 山田真 S1 8604 河原学 E1 8612 河田和磨 E1 8713 池神徹 K1 8905 河瀬隆一 E1 9001 池尻順平 K1 9107 山下貴子 S1 9121 池田義正 K1 9126 河野圭子 E1 9209 山内京子 S1 9215 山本高志 S1 部門と社員から、”池尻順平”の部門を求める次のSQL文中の( )に入れる正しい答えを、解答群の中から選べ。
SELECT 部門名 FROM ( a ) WHERE 部門コード
IN (SELECT ( b ) FROM 社員 WHERE 氏名=N'池尻順平')解答群
ア 氏名 イ 社員 ウ 社員番号 エ 部門
オ 部門コード カ 部門名
解説 データベースの問題は、ほとんど毎回出題されています。これを選択しようと思っている方は、SELECT文の基本的なところはもちろん、ORDER BY指定,GROUP指定,IN述語および、INSERT文,DELETE文,UPDATE文などを、復習していってください。
設問1について
@について
正規化には第1正規化から第5正規化までありますが、一般には、第3正規形を指して「正規化された構造」といいます。
第1正規化ではデータの繰り返し項目を分離しますが、案1の構造はメンバ項目(メンバ属性)の中に、(社員番号,氏名)が繰り返し存在します。よってこれは第1正規形ではありません。Aについて
問題文より、主キーは行を一意に識別する必要があることが分かります。案3は氏名が主キーとなっており、(現状では問題ありませんが)同姓同名の社員を登録できません。Bについて
Aと同じ理由で、既に主キーが重複している案2は正しい構造ではありません。設問2について
案4は社員番号が主キーとなっています。すると、社員番号をキーとして与えられれば、表に対する操作は問題なく行えます。
解答群のア〜エまでは、社員個人に対する操作ですので問題ありません(社員番号が分かっているから)。ところが、オは配属者が決定されていませんので、社員番号が分かりません。主キーがない行を登録することはできないので、この操作を行うことはできません。
設問3について
SELECT文の(基本的な)文法は以下の通りです。SELECT 属性[,属性,属性...] ←抽出する属性(項目)の並び
FROM 表[,表,表...] ←属性が存在する表の並び
WHERE 条件 ←抽出条件aについて
設問のSQL文で求める部門名は部門(表)の中にある属性ですので、答えは”部門”です。bについて
以下の例を見てください。SELECT 部門名 FROM 部門 WHERE 部門コード IN ('S1','K1')
[案5の表に対するSELECT結果]
総務,経理上記例は、部門表の中から部門コードがS1かK1の行を抽出し、その部門名を出力するものです。この例のように、IN述語の後方はリストを直接記述することもできます。
ところで、設問のIN述語の後方のSELECT文では、部門コード(K1)が出力されるはずです。だから、社員(表)から、氏名が”池尻順平”の行の部門コードを抽出するSELECT文を考えればよいでしょう。
したがって求める答えは、”部門コード”です。SELECT 部門名 FROM 部門 WHERE 部門コード
IN (SELECT 部門コード FROM 社員 WHERE 氏名=N'池尻順平') ←SELECT結果は('K1')では、試験ガンバッテください。
解答
設問1 ア,カ,ク
設問2 オ
設問3 a エ b オ