H23 午後2 問1 設問2 (2) 検索効率改善

ストラトスさん  
(No.1)
<問題文>「検索効率を改善するために,列を二つ追加する。列を追加するテーブル名と,列名を答えよ。」
<解答>テーブル名:「PJ労務時間計画」  列名:「ランク」,「部コード」
となっています。

私としては、「PJ労務時間計画」テーブルに「単価」を追加すればいいんじゃないの?
と思ったのですが、この考えは行き過ぎでしょうか?
解答に示されている「ランク」,「部コード」は導出属性なので、どうせ導出属性を持たせるなら単純に「単価」を持たせとけばいいじゃん  と思った次第です。
2022.09.08 19:56
にゃんちゃんさん 
DB シルバーマイスター
(No.2)
解いたことのない問題なので、いきなり解答解説読みながら考えてますが・・・
今のところ、「部コード」「単価」で良いような気がしてます。

「部コード」は集計単位で必要なので持たせるのですが
「ランク」については「単価」を求めるためだけのカラムにしか見えないので
むしろ「単価」まで冗長に持たせた方が、結合の負荷軽減にはなりそうです。

考えられるとしたら、何かしらの問題設定を見落としてるとか
集計上、何かしらの不整合が発生しうるのか・・・

模範解答のミスにしては、何でそんな中途半端なところで非正規化をやめたんだろう
と違和感があるので、もう少し考えてみます。
2022.09.08 22:03
にゃんちゃんさん 
DB シルバーマイスター
(No.3)
うーーーん、何度読み返しても分からない!(笑)
模範解答の「部コード」「ランク」でも確かに「単価」を紐づけてこれますが
「部コード」「単価」で最初から持たせちゃった方が紐づけてくる工程をカットできるんですよね。

夜間バッチなどで自動反映することも問題なくできそうです。
「部コード」は持たせてある
「ランク」は社員コードから導出可能
「年度」は「計画年月」から求める(LEFT関数?)
よって、日次更新か月次更新か分かりませんが「単価」は無事取得されるかと・・・。

あとは「PJコード」「部コード」「計画年月」でGROUP BYして
SUM(単価 × 計画時間)で労務計画額が無事集計できるように思います。

「年度」は「計画年月」から求める(LEFT関数?)
の部分でLEFT関数は一部のDB製品に実装されていて製品依存するのですが
手順6で、年度は計画年月から求めると書いてあるのでできるかと。
具体的な列値は書いてないですが、多分「年度」がyyyyで「計画年月」がyyyymmなんですかね。
2022.09.08 22:35
ストラトスさん  
(No.4)
にゃんちゃんさん、ご考察いただきありがとうございます。
まさに「単価」を持たせられない根拠となる記述がどこにもないんですよね。

「部ランク単価」テーブルの主キーが{部コード,ランク,年度}ということで、「年度」は「計画年月」から変換できるから、残りの2つの属性を答えさせたかったんでしょうかね。
2022.09.09 00:36

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop