A型システムエンジニアの勉強メモ

情報処理試験の午前問題をネタにして、解説をじっくり書きながら勉強しています。基礎は大事。

広告

基本情報技術者試験 平成31年度 春期 午前 問26

関係モデルと、関係モデルにおける属性についての問題。 

 

--------------------------

基本情報技術者試験

平成31年度 春期 午前 問26

 

関係モデルの属性に関する説明のうち、適切なものはどれか。

 

ア 関係内の属性の定義域は重複してはならない。

 

イ 関係内の属性の並び順に意味はなく、順番を入れ替えても同じ関係である。

 

ウ 関係内の二つ以上の属性に、同じ名前をつけることができる。

 

エ 名前を持たない属性を定義することができる。

--------------------------

解説

 

 

更新めちゃくちゃサボっていた。

繰り返し作業を苦にしない人間が、基本無料のアプリゲームを無課金でやり続けると時間すごいとられてしまう。要注意。

 

 

関係モデルとは。

と厳密な定義を長々と書き出すと別のページに去っていかれてしまうので、ざっくりとした説明になるように頑張る。

 

クラス 氏名 身長 体重
A 一太郎 160 60
A 二太郎 170 65
B 三太郎 150 80
B 四太郎 165 90
C 五太郎 175 80
A 六太郎 190 99

 

このような表の形になってるものをイメージすれば、おおよそ関係モデルになる。

 

一般的によく使われるデータベースのデータ構造もこのような形になっている。

この様なデータ構造のデータベースは RDBRelational Data Base:関係データベース)と呼ぶ。

関係モデルとか、関係データベースとか、RDBといった言葉がでてきたときはこんな表をイメージすれば良い。

 

 

その関係モデルにおける属性とは、上の例で言えばクラスとか、氏名とか、身長といった のことを指している。

 

ちなみに、データの縦一列分を列(Column:カラム)とか属性と呼び、横一列分を行(Row:ロウ)とか組と呼ぶ。

行と列がどっちか悩むことがあるが、そのときは "行列" と言いながら漢字の十を書けば良い。横線書きながら行、縦線書きながら列と言えば間違えない。

十を縦線から書く人は、知りません。

 

 

選択肢ア「関係内の属性の定義域は重複してはならない」について。

定義域とはその属性の列に入力することができる値の範囲のこと。

クラスの属性なら A か B か C か、と存在するクラス名の文字列のみになる。

身長の属性なら正の数値(0~)とか。

体重の属性なら正の数値(0~)とか。

見ての通り、身長と体重の様に定義域が重複することはある。なのでアは誤り。

 

 

選択肢イ「関係内の属性の並び順に意味はなく、順番を入れ替えても同じ関係である」について。

これは選択肢の通りで、属性の並び順に意味はない

 ・クラス - 氏名 - 身長 - 体重

 ・クラス - 氏名 - 体重 - 身長

表がどちらであろうと、一太郎君は A クラスで 160cm で 60kg であることは変わらない。なので、問題の正解は選択肢イである。

 

 

選択肢ウ「関係内の二つ以上の属性に、同じ名前をつけることができる」について。

これは、できないので誤り。

 ・クラス - 氏名 - 身長 - 身長

といった関係は NG である。

見ての通り意味のよくわからない表ができてしまう。

 

 

選択肢エ「名前を持たない属性を定義することができる」について。

これも、できないので誤り。

属性に名前がないと、何のデータなのかわからなくなってしまう。

 

 

以下はちょっと細かな話。

例としてあげた表は、関係データベースとしては良くない例になる。

それは主キーの候補となる属性がないため。

関係データベースでは主キーとなる属性が必須であり、主キーとなった属性がある特定の値の行は唯一になる制約がある(値の重複が許されない)。

 

例だと、クラスの属性は同じクラスの人が複数いるので NG。氏名の属性は同姓同名がいる可能性あるので NG。身長と体重の属性は全く同じ人がいる可能性あるので NG。

改善するとしたら、

 ・生徒番号 - クラス - 氏名 - 身長 - 体重

とか

 ・クラス - 出席番号 - 氏名 - 身長 - 体重

とかになる。

 

前者の例では、生徒番号が被ることはないので主キーとできる。

生徒番号 "102" と指定すれば一つの行が決まる。

 

後者の例では、出席番号のみでは主キーにならないがクラスと組み合わせることで主キーとなれる。主キーは複数属性の組み合わせでもいい。

B クラスの出席番号 2 と指定すれば一つの行が決まる。

 

 

前後の問題はこちら。