平成17年秋期午後問6DBについて

さん  
(No.1)
いくつか質問があります。
①設問3のSQLについてです。
2行目のNOT NULL制約ですが、PRIMARY KEY制約を与えているのならいらないと思うのですが必要なのでしょうか?

②設問4の(1)のSQLについてです。
答えは
「UPDATE 所属 SET 組織コード = '0210'
   WHERE 社員コード='100021' AND 主務 = '1'」
とありますが、この「AND 主務 = '1'」は必要なのでしょうか。主務属性は主キーではないためいらないのではないでしょうか。実際(2)のDELETE文では主務属性は指定していません。

③設問5のSQLについてです。答えでは氏名を社員表から射影していますが、組織1や組織2の組織長名でもいいのではないでしょうか。

④設問6についてです。なぜ、A社や人事総務部、営業部、技術部は結果に入っていないのでしょうか。また、SQLの5行目のGROUP BY句では組織コードや主務属性まで指定しているのでしょうか。組織名だけではだめなのでしょうか。

たくさん質問してしまい申し訳ありません。どなたか教えていただけるとありがたいです。

リンク
https://www.ap-siken.com/s/kakomon/17_aki/
2022.03.16 15:13
さん  
(No.2)
追記します。
①のSQLとは設問3の問題文に記載されている社員テーブルを定義するSQL文と組織テーブルを定義するSQL文のことです。

2022.03.16 15:17
GinSanaさん 
AP プラチナマイスター
(No.3)
>2行目のNOT NULL制約ですが、PRIMARY KEY制約を与えているのならいらないと思うのですが必要なのでしょうか?

明示的にNOT NULL制約を設定しなくてもエラーとはなりませんが、発行後に自動的にNOT NULL制約が設定されます。
まあ、ふつうのお作法的には書くって話なんでしょう・・・が、
個人的にはnot null制約とかの制約って、alter tableで後から指定するので、そういうタイプの人は最初には書かないですね。

>「UPDATE 所属 SET 組織コード = '0210'
>   WHERE 社員コード='100021' AND 主務 = '1'」
>とありますが、この「AND 主務 = '1'」は必要なのでしょうか。
>主務属性は主キーではないためいらないのではないでしょうか。
>実際(2)のDELETE文では主務属性は指定していません。

技術1課から営業1課に移ったのを表現するわけで、
U氏は技術1課と技術2課を兼務しているわけで(変更前は技術1課が主務、技術2課が兼務)
もしAND 主務 = '1'がないと技術2課のデータも組織コード = '0210'で更新するわけですよね。
それはまずいでしょう。

>答えでは氏名を社員表から射影していますが、組織1や組織2の組織長名でもいいのではないでしょうか。
設問2の組織エンティティには組織長社員コードはありますけど名前はないですよ。
そりゃそうで、同じことを書かないから正規化しているわけで・・・。

>なぜ、A社や人事総務部、営業部、技術部は結果に入っていないのでしょうか。
人事異動が直接発生していないからですね。
>また、SQLの5行目のGROUP BY句では組織コードや主務属性まで指定しているのでしょうか。
>組織名だけではだめなのでしょうか。
更新の要素で主務と兼務もありますから、そういうくだりですね。
まあ、組織名は・・・この場合は一緒になることはないでしょうけど、現実の会社ではコードが違うが名前は一緒とかイミフな管理をするとこも
あるにはあるので、そういうのがあるんじゃないですか。
2022.03.16 15:58
さん  
(No.4)
この投稿は投稿者により削除されました。(2022.03.16 16:28)
2022.03.16 16:28
さん  
(No.5)
いつもありがとうございます。
最後のお答えだけ理解できなかったのですが、

>また、SQLの5行目のGROUP BY句では組織コードや主務属性まで指定しているのでしょうか。
>組織名だけではだめなのでしょうか。
更新の要素で主務と兼務もありますから、そういうくだりですね。

「そういうくだり」というのはどういうことでしょうか。
HAVING句やORDER BY句で指定できるのはGROUP BY句で書いた属性のみというルールがあるため(?)、組織.組織コードと所属.主務を書いたのでしょうか。
2022.03.16 16:28
chihiroさん 
AP シルバーマイスター
(No.6)
>組織名だけではだめなのでしょうか。
主務はHAVINGでの絞り込みに利用するため、組織名はSELECTで組織名を抽出するため(GROUP  BY利用時はGROUP  BYで指定した列でないとSELECTで抽出できないため)です。
2022.03.16 16:33
chihiroさん 
AP シルバーマイスター
(No.7)
失礼、組織名ではなく組織コードを指定した理由でしたね。
>組織名はSELECTで組織名を抽出するため(GROUP  BY利用時はGROUP  BYで指定した列でないとSELECTで抽出できないため)
これは忘れてください。
2022.03.16 16:40
さん  
(No.8)
この投稿は投稿者により削除されました。(2022.03.16 16:52)
2022.03.16 16:52
さん  
(No.9)
回答ありがとうございます。
2022.03.16 18:04

返信投稿用フォーム

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

その他のスレッド


Pagetop