HOME»応用情報技術者試験掲示板»令和3年秋期 問28について
投稿する
この表記は間違っています。
この表記に対応する日本語文は次のようになりますが、
「受注番号の値に対して、商品コードの値は一意に決まる」
「商品コードの値に対して、項番の値は一意に決まる」
受注番号=995867に対応する商品コードは複数存在しますし、
商品コード=20121に対応する項番も複数存在します。
(商品コード=20121は他の受注伝票の他の項番にも登場するので)
この場合の関数従属を表す正しい表記は次のとおりです。
(受注番号, 商品コード) → 項番
(受注番号, 商品コード) → 数量
「受注番号と商品コードのペア値に対して、項番の値は一意に決まる」
「受注番号と商品コードのペア値に対して、数量の値は一意に決まる」
いいえ、分かっていません。
と回答No.3に書きましたし、このサイトの解説も同じ立場です。
令和3年秋期 問28について [4592]
van8さん(No.1)
すみません解説を読んでも
問題を解く上で第二正規化かどうか判断するプロセスがピンとこずに戸惑っています。
①まず主キーを定めるために一意に決まる属性を探すために追加注文を仮定した表をイメージ
②「"受注番号"と"項番"の組合せ」若しくは「"受注番号"と"商品コード"の組合せ」を発見
③どちらを主キーとした場合でも主キーへの部分関数従属が別表に分離されていない
なぜこのようなことをするのかわかりません。
何か大事なことを見落としている気がしてならないです。
すみませんがどなたかもうすこしわかりやすく教えていただけないでしょうか
いっそ「受注番号、受注日、得意先コード」と「商品、単価」など部分関数従属を探して分離できる部分を探してみようなら分かるのですが
ちなみに③は分離するパターンがあったりするのでしょうか?
問題を解く上で第二正規化かどうか判断するプロセスがピンとこずに戸惑っています。
①まず主キーを定めるために一意に決まる属性を探すために追加注文を仮定した表をイメージ
②「"受注番号"と"項番"の組合せ」若しくは「"受注番号"と"商品コード"の組合せ」を発見
③どちらを主キーとした場合でも主キーへの部分関数従属が別表に分離されていない
なぜこのようなことをするのかわかりません。
何か大事なことを見落としている気がしてならないです。
すみませんがどなたかもうすこしわかりやすく教えていただけないでしょうか
いっそ「受注番号、受注日、得意先コード」と「商品、単価」など部分関数従属を探して分離できる部分を探してみようなら分かるのですが
ちなみに③は分離するパターンがあったりするのでしょうか?
2023.09.30 21:36
van8さん(No.2)
応用情報技術者試験の問題です。
2023.09.30 21:40
jjon-comさん(No.3)
★AP プラチナマイスター
応用情報技術者令和3年秋期 午前問28
https://www.ap-siken.com/kakomon/03_aki/q28.html
そのアプローチの方が分かりやすいのであれば、それでいいでしょう。
という記述から、次の「商品マスタ」表の分離がすぐにイメージでき、
という記述から、次の「受注ヘッダ」表の分離がすぐにイメージでき、
次の「受注明細」表が残っているイメージが脳内にあるということですよね。
--------
で、ここからは。
という記述から、「受注明細」表の主キーは、
(受注番号, 項番)という複合キー
または
(受注番号, 商品コード)という複合キー
のどちらであっても、この問題文の条件を満たすことが分かります。
まず (受注番号, 商品コード)という複合キー であった場合は、
「受注ヘッダ」表の受注番号(主キー)
「商品マスタ」表の商品コード(主キー)
ともに、
という手順、つまり第2正規化(部分関数従属の排除)で別表に分離することになります。
次に (受注番号, 項番)という複合キー であった場合は、
「受注ヘッダ」表は第2正規化での分離になりますが、
「商品マスタ」表の商品コード(主キー)
は、複合キーの一部ではないので第2正規化に該当しません。
こちらは、
という手順、つまり第3正規化(推移関数従属の排除)で別表に分離することになります。
https://www.ap-siken.com/kakomon/03_aki/q28.html
> いっそ「受注番号、受注日、得意先コード」と
> 「商品、単価」など部分関数従属を探して
> 分離できる部分を探してみようなら分かるのですが
そのアプローチの方が分かりやすいのであれば、それでいいでしょう。
> 単価は商品コードによって一意に定まる。
という記述から、次の「商品マスタ」表の分離がすぐにイメージでき、
商品コード(主キー), 単価
20121, 20000
24005, 15000
28007, 5000
20121, 20000
24005, 15000
28007, 5000
> 受注番号は受注ごとに新たに発行される番号であり,
という記述から、次の「受注ヘッダ」表の分離がすぐにイメージでき、
受注番号(主キー), 受注日, 得意先コード
995867 2021-03-05 0256
995867 2021-03-05 0256
次の「受注明細」表が残っているイメージが脳内にあるということですよね。
受注番号, 項番, 商品コード, 数量
995867 1 20121 20
995867 2 24005 10
995867 3 28007 5
995867 1 20121 20
995867 2 24005 10
995867 3 28007 5
--------
で、ここからは。
> 項番は1回の受注で商品コード別に連番で発行される番号である。
という記述から、「受注明細」表の主キーは、
(受注番号, 項番)という複合キー
または
(受注番号, 商品コード)という複合キー
のどちらであっても、この問題文の条件を満たすことが分かります。
まず (受注番号, 商品コード)という複合キー であった場合は、
「受注ヘッダ」表の受注番号(主キー)
「商品マスタ」表の商品コード(主キー)
ともに、
> (複合)主キーの一部によって一意に決まる属性を別表に移す
という手順、つまり第2正規化(部分関数従属の排除)で別表に分離することになります。
次に (受注番号, 項番)という複合キー であった場合は、
「受注ヘッダ」表は第2正規化での分離になりますが、
「商品マスタ」表の商品コード(主キー)
は、複合キーの一部ではないので第2正規化に該当しません。
こちらは、
> 主キー以外の属性によって一意に決まる属性を別表に移す
という手順、つまり第3正規化(推移関数従属の排除)で別表に分離することになります。
2023.10.01 10:30
van8さん(No.4)
詳細で丁寧な解説ありがとうございます。
脳内イメージに「○○表」と自分でつけることも覚束ないですが
迷っていた疑問点は解説の通りで間違いないです。ありがとうございます。
一応、現状では以下のように解釈しました。
記述を読んで分離するところからアプローチするのは大丈夫で
その後の受注明細の表が合っているか確かめるには
分離した表の主キーを使用して一意に決まる属性があるかどうかで判断できる上に
さらに複合キーの候補が他にあったとしても
それを主キーにして別表に移せるかどうかで判断することもできると読み取りました。
違ったり変だったりしたら教えてください。
最後に問題とは関係ないので回答がなくても大丈夫なのですが
第3正規化をした場合、商品コードを主キーにした項番との別表ができるであっていますか?
受注番号 → 商品コード → 項番
受注番号 → 項番 → 商品コード
どちらも推移できますが
先述の第2正規化の際に受注番号と商品コードによる複合キーだと分かっているので
商品コードを主キーにして項番を別表に分離する。
脳内イメージに「○○表」と自分でつけることも覚束ないですが
迷っていた疑問点は解説の通りで間違いないです。ありがとうございます。
一応、現状では以下のように解釈しました。
記述を読んで分離するところからアプローチするのは大丈夫で
その後の受注明細の表が合っているか確かめるには
分離した表の主キーを使用して一意に決まる属性があるかどうかで判断できる上に
さらに複合キーの候補が他にあったとしても
それを主キーにして別表に移せるかどうかで判断することもできると読み取りました。
違ったり変だったりしたら教えてください。
最後に問題とは関係ないので回答がなくても大丈夫なのですが
第3正規化をした場合、商品コードを主キーにした項番との別表ができるであっていますか?
受注番号 → 商品コード → 項番
受注番号 → 項番 → 商品コード
どちらも推移できますが
先述の第2正規化の際に受注番号と商品コードによる複合キーだと分かっているので
商品コードを主キーにして項番を別表に分離する。
2023.10.01 12:56
jjon-comさん(No.5)
★AP プラチナマイスター
> 受注番号 → 商品コード → 項番
この表記は間違っています。
この表記に対応する日本語文は次のようになりますが、
「受注番号の値に対して、商品コードの値は一意に決まる」
「商品コードの値に対して、項番の値は一意に決まる」
受注番号=995867に対応する商品コードは複数存在しますし、
商品コード=20121に対応する項番も複数存在します。
(商品コード=20121は他の受注伝票の他の項番にも登場するので)
この場合の関数従属を表す正しい表記は次のとおりです。
(受注番号, 商品コード) → 項番
(受注番号, 商品コード) → 数量
「受注番号と商品コードのペア値に対して、項番の値は一意に決まる」
「受注番号と商品コードのペア値に対して、数量の値は一意に決まる」
2023.10.01 13:32
jjon-comさん(No.6)
★AP プラチナマイスター
> 先述の第2正規化の際に
> 受注番号と商品コードによる複合キーだと分かっているので
いいえ、分かっていません。
> 「受注明細」表の主キーは、
> (受注番号, 項番)という複合キー
> または
> (受注番号, 商品コード)という複合キー
> のどちらであっても、この問題文の条件を満たすことが分かります。
と回答No.3に書きましたし、このサイトの解説も同じ立場です。
2023.10.01 13:32
van8さん(No.7)
返信ありがとうございます。
勉強不足で大変申し訳ないのですが、
第3正規系になるとどうなるのかだけ回答していただけないでしょうか?
簡潔に自分が下記に用意した番号をポツンと書いていただくだけで大丈夫です。
すでに丁寧に解説していただいているにも関わらず恐縮ですが
さすがにこれ以上は自分で調べます。
お手数ですがよろしくお願いいたします。
もちろんすでに問題文とはかけ離れているのでお答えいただかなくても大丈夫です。
①
「受注明細表」
受注番号, 商品コード, 数量
「○○表?」
商品コード,項番
②
「受注明細表」
受注番号, 項番, 数量
「○○表?」
項番,商品コード
③そもそも全然違う
下記は自分が今頭の中で考えていることです。
回答No.3にもあるの~どちらであっても、この問題文の条件を満たすため複合キーはわからない
それなら
回答No.5で正しい表現にしていただいた
「受注番号と商品コードのペア値に対して、項番の値は一意に決まる」
「受注番号と商品コードのペア値に対して、数量の値は一意に決まる」
に加えて
「受注番号と項番のペア値に対して、商品コードの値は一意に決まる」?
「受注番号と項番のペア値に対して、数量の値は一意に決まる」?
本文中に項番は1回の受注で商品コード別に連番で発行される番号とあるため
受注番号995867の項番1なら商品コードが20121と一意に決まることもある
だから複合キーが分からないわけだし
もしあっているなら第3正規系は①、②が考えられる?その場合
実は①、②どっちでもよい
もしくは
項番は商品コードがなくては発行されないのだから
商品コードを主キーとした表にするべきだ、で①
③そもそもこんな表にはならないし考え方が全然違う勉強しなおし
時間がなく焦りから熟考もできずこのような長文になってしまい大変申し訳ありませんでした。
改めてここまでお付き合いいただき尽力していただいたjjon-comさんには感謝申し上げます。
勉強不足で大変申し訳ないのですが、
第3正規系になるとどうなるのかだけ回答していただけないでしょうか?
簡潔に自分が下記に用意した番号をポツンと書いていただくだけで大丈夫です。
すでに丁寧に解説していただいているにも関わらず恐縮ですが
さすがにこれ以上は自分で調べます。
お手数ですがよろしくお願いいたします。
もちろんすでに問題文とはかけ離れているのでお答えいただかなくても大丈夫です。
①
「受注明細表」
受注番号, 商品コード, 数量
「○○表?」
商品コード,項番
②
「受注明細表」
受注番号, 項番, 数量
「○○表?」
項番,商品コード
③そもそも全然違う
下記は自分が今頭の中で考えていることです。
回答No.3にもあるの~どちらであっても、この問題文の条件を満たすため複合キーはわからない
それなら
回答No.5で正しい表現にしていただいた
「受注番号と商品コードのペア値に対して、項番の値は一意に決まる」
「受注番号と商品コードのペア値に対して、数量の値は一意に決まる」
に加えて
「受注番号と項番のペア値に対して、商品コードの値は一意に決まる」?
「受注番号と項番のペア値に対して、数量の値は一意に決まる」?
本文中に項番は1回の受注で商品コード別に連番で発行される番号とあるため
受注番号995867の項番1なら商品コードが20121と一意に決まることもある
だから複合キーが分からないわけだし
もしあっているなら第3正規系は①、②が考えられる?その場合
実は①、②どっちでもよい
もしくは
項番は商品コードがなくては発行されないのだから
商品コードを主キーとした表にするべきだ、で①
③そもそもこんな表にはならないし考え方が全然違う勉強しなおし
時間がなく焦りから熟考もできずこのような長文になってしまい大変申し訳ありませんでした。
改めてここまでお付き合いいただき尽力していただいたjjon-comさんには感謝申し上げます。
2023.10.01 15:39
jjon-comさん(No.8)
★AP プラチナマイスター
私は自分が回答したくてそうしているだけですから、
といった遠慮はぜんぜん不要です。
回答できる知識が足りなかったり、他の事で忙しくなったり、話の流れに興味をもてなくなったら、私はただ回答しなくなるだけです。
--------
①②はともにダメです。
と回答No.5で書いたとおり、
受注番号と紐付けられていない項番が登場すること自体がダメです。
--------
念のため。
複合キーはわからない、だから、正規化後の表分割の姿も分からない、と言っているのではなく。
この問題文の条件を満たす複合キーは2つ挙げられる、だから、立場によって正規化後の表分割の姿も2つ考えられる、と言っているわけです。
--------
(受注番号, 項番)という複合キー という立場ならこの3表に分割されます。
「商品マスタ」表は第3正規化の過程で、分離されます。
(受注番号, 商品コード)という複合キー という立場ならこの3表に分割されます。
> すでに丁寧に解説していただいているにも関わらず恐縮ですが
> お答えいただかなくても大丈夫です。
といった遠慮はぜんぜん不要です。
回答できる知識が足りなかったり、他の事で忙しくなったり、話の流れに興味をもてなくなったら、私はただ回答しなくなるだけです。
--------
①②はともにダメです。
項番, 商品コード
1 20121
2 24005
3 28007
という別表が出現するとおっしゃっているのですよね?1 20121
2 24005
3 28007
> (商品コード=20121は他の受注伝票の他の項番にも登場するので)
と回答No.5で書いたとおり、
受注番号と紐付けられていない項番が登場すること自体がダメです。
--------
念のため。
複合キーはわからない、だから、正規化後の表分割の姿も分からない、と言っているのではなく。
この問題文の条件を満たす複合キーは2つ挙げられる、だから、立場によって正規化後の表分割の姿も2つ考えられる、と言っているわけです。
--------
> 第3正規系になるとどうなるのかだけ回答していただけないでしょうか?
(受注番号, 項番)という複合キー という立場ならこの3表に分割されます。
●商品マスタ
商品コード(主キー), 単価
20121, 20000
24005, 15000
28007, 5000
商品コード(主キー), 単価
20121, 20000
24005, 15000
28007, 5000
●受注ヘッダ
受注番号(主キー), 受注日, 得意先コード
995867 2021-03-05 0256
受注番号(主キー), 受注日, 得意先コード
995867 2021-03-05 0256
●受注明細
{受注番号, 項番}(複合主キー), 商品コード, 数量
995867 1 20121 20
995867 2 24005 10
995867 3 28007 5
「受注ヘッダ」表は第2正規化の過程で、{受注番号, 項番}(複合主キー), 商品コード, 数量
995867 1 20121 20
995867 2 24005 10
995867 3 28007 5
「商品マスタ」表は第3正規化の過程で、分離されます。
(受注番号, 商品コード)という複合キー という立場ならこの3表に分割されます。
●商品マスタ
商品コード(主キー), 単価
20121, 20000
24005, 15000
28007, 5000
商品コード(主キー), 単価
20121, 20000
24005, 15000
28007, 5000
●受注ヘッダ
受注番号(主キー), 受注日, 得意先コード
995867 2021-03-05 0256
受注番号(主キー), 受注日, 得意先コード
995867 2021-03-05 0256
●受注明細
{受注番号, 商品コード}(複合主キー), 項番, 数量
995867 20121 1 20
995867 24005 2 10
995867 28007 3 5
この場合、「受注ヘッダ」「商品マスタ」ともに第2正規化の過程で分離されます。
{受注番号, 商品コード}(複合主キー), 項番, 数量
995867 20121 1 20
995867 24005 2 10
995867 28007 3 5
2023.10.01 18:47
van8さん(No.9)
やっと理解できました!もやもやが晴れてすっきりしました。
改めて本当にありがとうございました!!!
改めて本当にありがとうございました!!!
2023.10.02 06:57