HOME»データベーススペシャリスト掲示板»R3 午後Ⅰ 問1 設問2 (3)  について
投稿する

R3 午後Ⅰ 問1 設問2 (3)  について [0683]

 コーヒーさん(No.1) 
横断分析用商品コードは候補キーなので、解答のように分解しなくてもすでに第3正規形ではないのでしょうか?
第3正規形までは非キーのみを対象にしているという理解なのですが・・・
2024.07.24 19:56
みかんさん(No.2) 
DB ブロンズマイスター
> 横断分析用商品コードは候補キーなので、
模範解答にそう書いてありましたか?
2024.07.28 01:57
 コーヒーさん(No.3) 
みかんさん、ご返信ありがとうございます。
R3 午後Ⅰ 問1 設問2 (1)の解答で、候補キーは
{加盟企業コード, 加盟企業商品コード},
{加盟企業コード, 横断分析用商品コード}
とあります。二つ目の候補キーに、横断分析用商品コードがあります。
2024.07.28 12:50
みかんさん(No.4) 
DB ブロンズマイスター
2.加盟企業
(1)加盟企業は、…、加盟企業コードで識別する。…
{加盟企業コード, 横断分析用商品コード},加盟企業商品コード,JANコード,加盟企業名,契約開始日,契約終了日,加盟企業商品名,横断分析用商品名
  例えば、{加盟企業コード}→加盟企業名を切り出さなくていいのかしら?
2024.07.28 21:49
 コーヒーさん(No.5) 
切り出す必要があると思います。その結果、
加盟企業({加盟企業コード},加盟企業名,契約開始日,契約終了日)
加盟企業商品({加盟企業コード,加盟企業商品コード},JANコード,加盟企業商品名,横断分析用商品コード,横断分析用商品名)
のようになると考えます。この時点でも、加盟企業商品の候補キーとして、{加盟企業コード,横断分析用商品コード}が成り立つと思うので、これ以上の分解は不要と考えた次第です。
2024.07.28 23:54
みかんさん(No.6) 
DB ブロンズマイスター
> この時点でも、加盟企業商品の候補キーとして、{加盟企業コード,横断分析用商品コード}が成り立つと思うので、これ以上の分解は不要と考えた次第です。
  加盟企業や横断分析用商品情報を切り出す目的は、重複データの容量削減とうっかりミスの防止対策です。どの時点でも、候補キー{加盟企業コード,横断分析用商品コード}は成り立つと思いますが、加盟企業までは分解するけれど、横断分析用商品情報は分解不要と考える理由は何かしら?候補キーが成立していれば、正規化不要と解説している情報がどこかにあるのかしら?
2024.07.29 00:46
 コーヒーさん(No.7) 
みかんさんのご質問にできるだけ正確にお答えしたいのですが、本を行ったり来たりして一緒に確認いただきながら説明しないと伝わらないような内容かもしれません。
ですができるだけ理解いただけるように努めます。

参考にしていたのは、「徹底攻略 データベーススペシャリスト教科書 令和6年度 徹底攻略シリーズ」です。
本の中でこの問題が取り上げられ(2-3-2 午後問題)、解説には、
---
推移的関数従属性(または部分関数従属性)として、{加盟企業コード,加盟企業商品コード}→横断分析用商品コード→横断分析用商品名
---
と記載があり、この推移的関数従属性を分解し、正規化を行っています。
特に正規化不要と記載はなく、私がこのスレッドで質問した観点についての言及はありません。
しかしながら、この問題よりも前のページの解説と矛盾があるように感じております。
第3正規形の定義(2-1-4 第3正規形)は以下のように記載があります。
---
関係Rが第3正規形(the third normal form, 3NF)であるとは、次の二つの条件を満たすときをいう:
(1)Rは第2正規形である
(2)Rのすべての非キー属性はRのいかなる候補キーにも推移的に関数従属しない
---
このうち、(2)の条件は非キー属性に限定しており、今回の横断分析用商品コードは非キーではないため、分解せずとも第3正規形の条件は満たされるのではないか、と考えました。

上記考えを補強する内容が、本の中に記載されております。
第2正規形の定義(2-1-3)は以下のように記載があります。
---
関係Rが第2正規形(the second normal form,2NF)であるとは、次の二つの条件を満たすときをいう:
(1)Rは第1正規形である
(2)Rのすべての非キー属性はRの各候補キーに完全関数従属している
---
上記定義の記載の後に、完全関数従属性と部分関数従属性についての説明があり(それぞれの説明はここでは割愛します)、部分関数従属性の排除について、例をあげて説明がされています。
---
第1正規形の関係"伝票"の関係スキーマは、次のようになっています。
伝票(伝票番号(下線あり)、顧客番号、顧客名、商品番号(下線あり)、商品名、数量)
ここから、部分関数従属性を排除して新しい関係を作ると、次の二つになります。
伝票明細(伝票番号(下線あり)、商品番号(下線あり)、商品名、数量)
伝票(伝票番号(下線あり)、顧客番号、顧客名)
---
上記において、以下の補足説明があります。
---
ここで、「商品名」は一見、部分関数従属性があるように見えますが、この属性は前の節で述べたとおり、候補キーの一部となります。そのため、第2正規形では分解する必要はありません。分解しても問題はありません。通常は一度に分解します。ここでは正規化を順に厳密に行うために、あえて残しています。
---
この説明では、{商品番号}→{商品名}という部分関数従属性があるように見えるが、「商品名」が候補キーの一部(候補キーは、{伝票番号、商品番号}、{伝票番号、商品名}の二つ)のため、分解は不要としています。
同じ理屈で、本スレッドで質問させていただいた、「横断分析用商品コード」は候補キーの一部のため、分解は不要ではないかと考えました。
2024.07.29 15:56
みかんさん(No.8) 
DB ブロンズマイスター
> 正規化を順に厳密に行うために、あえて残しています。
  伝票と伝票明細は正規化の説明に昔から使われてきました。雛形が完成しているのに、あえて崩す必要があるとは考えにくいです。著者が正規化の目的を見失い、手段を証明するために小さく小さく理解して失敗してしまっただけじゃないかしら?
  残念ながら私の力不足で同じ土俵に上がれません。詳しい人がいれば解説をお願いします。現状では、別の参考書を検討してもいいんじゃないかしら?

  
2024.07.30 00:49
トモさん(No.9) 
この投稿は投稿者により削除されました。(2024.08.03 10:21)
2024.08.03 10:21
ワタシモさん(No.10) 
私も似たような感じで詰まったことがありますのでお気持ちはものすごくわかりますw
令和5年午後1問1の社員マスタを正規化する問題にて下記の解説文があったので現在はそれで納得しています。(確かに第2正規形で分解しなくてもよい、ボイス・コッド正規形では分解する必要あり。ただ情報無損失分解のため、分解してしまっても問題なし)
2024.08.02 17:02
 コーヒーさん(No.11) 
みかんさん
混乱させてしまい申し訳ありません。他の方へも質問を投げかけていただいてありがとうございます。助かりました。


トモさん
>>上記では非キー属性を(主キーでない属性)として考えています。
いくつかのサイトで非キーをどのように取り扱っているか調べてみましたが、非キーは候補キーに含まれないもの、としている解説しか見つかりませんでした。

>>ただおっしゃるように非キー属性を(あらゆる候補キーに含まれない属性)として考えるのなら、既にこのままで第三正規形であると考えるのはわかりますが、
>>そうなると{横断分析用商品コード⇒横断分析用商品名}は候補キーの一部から関数従属しているのでどちらにしても第二正規形として切り出す必要が出てくるのでは??
こちら気づきませんでした。おっしゃる通り、第二正規形の段階で切り出す必要がありますね。こちらの説明では、矛盾がなさそうです。ありがとうございます。


ワタシモさん
おお、同じように悩まれている方がいらっしゃったとは。少し気持ちが楽になりました。
>>確かに第2正規形で分解しなくてもよい、ボイス・コッド正規形では分解する必要あり。ただ情報無損失分解のため、分解してしまっても問題なし
なるほど。この考え方が通用するのであれば、解答もそれに応じて分解するパターン、しないパターン両方を正としてほしいと思いました。
2024.08.03 10:39
みかんさん(No.12) 
DB ブロンズマイスター
  正規化は関数従属性に従ってロジカルに計算するだけなので、悩んで躓いている場合ではありません。例えば、計算ドリルや100マス計算を解く際に、1+1=2の証明を悩んで暗算が出来ない、九九がわからない、なんて事になったら不味いですよね。
  暗算(いきなり第3正規形)は出来ますか?そもそも正規化の事を理解していますか?
  手遅れになる前にリセットしましょう。思考の癖を早く矯正しないとヤバいですよ。
  
2024.08.04 00:56
トモさん(No.13) 
ワタシモさん

以前投稿していた内容をお読みになっていただいてありがとうございます。
(非キー属性を[主キーでない属性]と断じていいか自信が無くなってしまっていたので
投稿を削除していました。)

>こちら気づきませんでした。おっしゃる通り、第二正規形の段階で切り出す必要がありま>すね。こちらの説明では、矛盾がなさそうです。ありがとうございます。
少しでもお役に立てたなら何よりです。
2024.08.19 15:36
トモさん(No.14) 
すいません。

ワタシモさんでなくコーヒーさんでした。。。
2024.08.19 15:46
返信投稿用フォームスパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
© 2016-2024 データベーススペシャリストドットコム All Rights Reserved.

Pagetop