re9nine
@re9nine

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

データベースの正規形について

解決したいこと

データベースの学習をしているのですが、正規形についての問題の解法が知りたいです。

設問

シンプルなドメインを持つ属性A~Hからなる
リレーションスキーマR(A,B,C,D,E,F,G,H)において、以下の従属性が成立する。
Rにおいて成立する従属性は以下のものと、それらから導出可能なもの、自明なものだけである。
A→BC
BC→E
C→D
EH→G
G→H

(1)

Rの候補キーを答えよ。複数ある場合、すべて答えること。

(2)

以下のリレーションスキーマR1~R4の正規形の名称を第1正規形~ボイス・コッド正規形の中から選んで答えよ。
第1正規形または第2正規形のものは、第3正規形以上に正規化すること。
R1(A,B,C,E)
R2(B,C,D)
R3(D,E,F)
R4(E,G,H)

自分の回答

(1)
{A,H},{A,G}

(2)
R1は第2正規形。更に正規化するとR11(A,B,C),R12(B,C,E)
R2はボイス・コッド正規形
R3はボイス・コッド正規形
R4は第3正規形

疑問点

(1)
属性Fはいかなる従属性もないため導出可能・自明な属性と考えたのですが合っているのでしょうか。

(2)
正規形についての理解が合っているのか自信がありません。

R1はA→BC,BC→Eという推移的関数従属性があるため、第2正規形と考えました。
R2はC→Dという関数従属性があるが、Bはどのような扱いかわかりません。
R3は関数従属性がないので、どのように扱うのかわかりません。
R4はEH→G,G→Hという関数従属性があり、EHからGが一意に定まるがGからHも一意に定まるのでボイス・コッド正規形ではなく第3正規形だと考えました。

0

1Answer

問題文から想定されるのは、例えば以下のテーブルです。

※すみません。「港区Cビル」を「新宿区Cビル」と読み替えて読んでください

image.png

A→BC:住所と部署は社員に関数従属します
BC→E:最寄事務所は住所と部署に関数従属します(部署によって使用できる事務所が異なる前提)
C→D:部長は部署に関数従属します
EH→G:清掃業者は事務所と部屋タイプに関数従属します(地域・部屋タイプごとに清掃業者が決まっていると思ってください)
G→H:部屋タイプは清掃業者に関数従属します(一つの清掃業者は一つの部屋タイプしか担当しない前提と思ってください)

と、いうことで回答は以下になるかと思います。

(1)
{A,F,H}
{A,F,G}

(2)
R1(A,B,C,E) ⇒ 第2正規形
R2(B,C,D) ⇒ 第1正規形
R3(D,E,F) ⇒ ボイス・コッド正規形
R4(E,G,H) ⇒ 第3正規形

  1. 属性Fはいかなる従属性もないため導出可能・自明な属性と考えたのですが合っているのでしょうか。

いいえ。
導出可能であれば、最低でも、ABCDEGH→Fという関数従属があるはずです。
この従属性すらない、ということは、Fは候補キーに必ず含まれることになります。FはF自身にしか従属しないので。

(2) 正規形についての理解が合っているのか自信がありません。

R1はA→BC,BC→Eという推移的関数従属性があるため、第2正規形と考えました。

その通りだと思います。

R1のイメージ
image.png

R2はC→Dという関数従属性があるが、Bはどのような扱いかわかりません。

先ほどのFと同じ理屈で、CDに従属しないBは、必ず候補キーに含まれます。
ですので、このテーブルの候補キーはBC、部分関数従属があるので第2正規形の条件を満たさず、第1正規形になると思います。

R2のイメージ
image.png

R3は関数従属性がないので、どのように扱うのかわかりません。

同じ理屈でR3の候補キーはDEFになるので、ボイスコッド正規形になると思います。

R3のイメージ
image.png

R4はEH→G,G→Hという関数従属性があり、EHからGが一意に定まるがGからHも一意に定まるのでボイス・コッド正規形ではなく第3正規形だと考えました。

その通りだと思います。

R4のイメージ
image.png
※ただし、EHも候補キー

0Like

Your answer might help someone💌