ER図
ERはEntity Relationshipの略です。エンティティ(Entity)は表のこと。リレーションシップ(Relationship)は関係ですから、参照整合性制約、つまり外部キーだと思えばいいでしょう。
ちなみにこのER図、複数の記法があります。私は、理解してもらいやすいのでIE記法を使っていますが、世の中的に多く使われているのはIDEF1X記法、情報処理技術者試験ではバックマン(Bachman)記法が用いられるようです。
そして、12cSQL試験で用いられているのは恐らくチェン(Chen)記法です。
では、チェン記法で描かれたER図を用いた例題を解きながら用語を覚えましょう。
問2
次の図を確認してください。
正しい説明をすべて選択しなさい。
- a. 社員は実体である
- b. 部門名は実体である
- c. 部門名は属性である
- d. 所属は属性である
- e. 所属は関連である
ER図は、実体(Entity)、関連(Relationship)、属性(Attribute)という3つの構成要素を図であらわしたものです。設問の図を文章で表現すると次のようになります。
- 社員表(実体:エンティティ)は、社員番号、社員名、入社日という3つの列(属性:アトリビュート)から構成される
- 部門表は、部門番号、部門名という2つの列から構成される
- 社員は部門に所属するという関連(関係:リレーションシップ)または、部門は社員に所属されているという関連がある
実体を表、属性を列、関連(リレーションシップ)を関係と読み替えれば、簡単に理解できるのではないでしょうか。社員は表(実体)ですから、選択肢aは正解。部門名は列(属性)ですから、選択肢cは正解(選択肢bは不正解)。所属は関係 (関連)ですから選択肢eは正解(選択肢dは不正解)です。
では、もう1つ設問を解きながら解説しましょう。
問3
次の図を確認してください。
正しい説明をすべて選択しなさい。
- a. 注文明細表は強いエンティティである
- b. 注文明細表は弱いエンティティである
- c. 個数はコンポジット属性である
- d. 個数はキー属性である
エンティティが強い、弱いって、戦うわけではありません。「独立」性が強いか弱いかという意味です。リレーショナルデータベース上の表は、何らかの表と関連を持っています。他の表と一切関連を持っていない独立した表のほうが少ないでしょう。
「いつ、誰が、何の商品を、何個注文したか」というデータを正規化すると、「誰」を管理する顧客表、「商品」を管理する商品表が浮かび上がってきます。さらに、「いつ誰が注文したか」を管理する注文マスタ表と「その注文は何の商品を何個注文したのか」を管理する注文明細表に分かれます。
これをIE記法のER図で表現すると次図のようになります。
このとき、「ごめん、昨日の注文キャンセルして」と顧客番号506番の顧客に言われて、注文マスタから「顧客番号506番の顧客から昨日の日付注文された」注文データを削除したとしても、顧客表から顧客番号506番の顧客のデータや商品表から注文のあった商品のデータを削除することはしませんよね。つまり、顧客表や商品表は注文マスタと関連はありますが、注文マスタのデータが削除された(削除したレコードの関連はなくなります)からといって、影響は受けません。独立性が強いエンティティです。
しかし、注文がキャンセルになったのに、注文明細にそのままデータを残しておくわけにはいきませんから、注文マスタからデータが削除されたなら、関連する注文明細のデータも削除します。そうです、注文明細表は独立性の弱いエンティティです(選択肢aは不正解、選択肢bは正解)。
では、コンポジット属性、キー属性とはなんでしょう。キー属性とは主キー列と解釈すればいいでしょう。Wikipediaには、コンポジットとは「複数のものを合成あるいは組み合わせたもの」と書いてあります。
例えば、今回の冒頭でお見せした「例1:勤怠実績表」では、この表の主キーは社員番号、プロジェクト番号、日にちの組み合わせですから、勤怠実績表の主キーはコンポジット属性です。
それならば、設問の注文明細表の主キーは、注文番号と商品番号の組み合わせであって、個数ではありませんから、選択肢cおよびdは不正解ですね。
ところで、最後の設問は「第1回まずは相手を知ろう! 12c SQL試験の出題傾向と難易度」1問目とほとんど同じであったことにお気づきになったでしょうか。一度勉強しても、普段使わない知識はすぐ忘れてしまいますので、受験前にはもう一度この連載に目を通してみてください。
ということで、次回はここまでの内容の実力診断をかねて総復習をしましょう!