次の(1),(2)について答えよ。
(1) 本文中の【 a 】,【 b 】に入れる適切な字句を答えよ。
(2) 本文中の【 c 】に入れる適切な字句を解答群の中から選び,記号で答えよ。
解答群
ア 依存関係 イ 親子関係 ウ 包含関係
『 H19年春PM1 問2 設問1 解答・解説 』
(合格を勝取る知識習得)
情報処理試験合格を勝取る知識習得にはコレ!! お気軽にご活用ください。
▽ http://www.mag2.com/m/0000120201.html
(このサイトの使い方)
勉強したい午後問題を、下記アンカーより選択して下さい。 解説などが、わかり難い時には、画面左側の「お問い合わせ」より、ご連絡ください。
-
午後過去問題・解答
- ソフトウェア開発技術者試験 平成19年春午後1 問1
- ソフトウェア開発技術者試験 平成19年春午後1 問2
- ソフトウェア開発技術者試験 平成19年春午後1 問3
- ソフトウェア開発技術者試験 平成19年春午後1 問4
- ソフトウェア開発技術者試験 平成19年春午後1 問5
- ソフトウェア開発技術者試験 平成19年春午後1 問6
・Oracle Master受験チケット…定価22,260円⇒14,648円(限定数のみ) ・Java、Oracle Solaris、NetBeans受験チケット…定価34,230円⇒31,492円 ・MySQL試験用受験チケット…定価22,260円⇒20,924円 ・オラクルオンライン試験用受験チケット…定価14,280円⇒12,752円 ・チケットは電子チケット(バウチャー)ですので、全品送料無料 ・メール送信による納品につき、最短ならご入金当日の納品も可能 ・領収書発送は無料サービス(メール便)ご指定の宛名で発行OK ・オラクル社の正規販売代理店、システム会社が運営する安心SHOPベンダー試験 格安受験チケット
お薦め参考書・問題集
![]() |
平成26年度【春期】【秋期】 応用情報技術者 合格教本 (情報処理技術者試験) 著者名: 大滝 みや子, 岡嶋 裕史 新品価格: ¥ 3,129 中古価格: Amazon.co.jp 売上ランキング: 1940 出版社: 技術評論社 単行本(ソフトカバー) 在庫あり。 おすすめ平均 ![]() Amazonで詳しく見る カスタマーレビュー
|
![]() |
ニュースペックテキスト 応用情報技術者 平成25・26年 (情報処理技術者試験) 著者名: TAC情報処理講座 新品価格: ¥ 2,940 中古価格: ¥ 3,999 Amazon.co.jp 売上ランキング: 6661 出版社: TAC出版 単行本 在庫あり。 おすすめ平均 ![]() Amazonで詳しく見る カスタマーレビュー
|
![]() |
平成26年度【春期】 応用情報技術者 パーフェクトラーニング過去問題集 (情報処理技術者試験) 著者名: 加藤 昭, 高見澤 秀幸, 芦屋 広太, 矢野 龍王 新品価格: ¥ 1,764 中古価格: Amazon.co.jp 売上ランキング: 8403 出版社: 技術評論社 大型本 在庫あり。 おすすめ平均 ![]() Amazonで詳しく見る |
![]() |
応用情報技術者午後問題の重点対策〈2014〉 (情報処理技術者試験対策書) 著者名: 小口 達夫 新品価格: ¥ 3,570 中古価格: ¥ 6,535 Amazon.co.jp 売上ランキング: 2299 出版社: アイテック 単行本 通常2〜4週間以内に発送 おすすめ平均 ![]() Amazonで詳しく見る |
![]() |
やさしい応用情報技術者講座 2014年版 (やさしい講座シリーズ) 著者名: 高橋 麻奈 新品価格: ¥ 2,709 中古価格: Amazon.co.jp 売上ランキング: 35969 出版社: SBクリエイティブ 単行本 在庫あり。 おすすめ平均 ![]() Amazonで詳しく見る カスタマーレビュー
|
![]() |
平成26-27年度 応用情報技術者 試験によくでる問題集 【午前】 (情報処理技術者試験) 著者名: 大滝 みや子 新品価格: ¥ 2,394 中古価格: Amazon.co.jp 売上ランキング: 67172 出版社: 技術評論社 単行本(ソフトカバー) 近日発売 予約可 おすすめ平均 ![]() Amazonで詳しく見る |
![]() |
平成26-27年度 応用情報技術者 試験によくでる問題集 【午後】 (情報処理技術者試験) 著者名: 大滝 みや子 新品価格: ¥ 3,129 中古価格: Amazon.co.jp 売上ランキング: 95854 出版社: 技術評論社 単行本(ソフトカバー) 在庫あり。 おすすめ平均 ![]() Amazonで詳しく見る カスタマーレビュー
|
![]() |
情報処理教科書 応用情報技術者 2014年版 (EXAMPRESS) 著者名: 日高 哲郎 新品価格: ¥ 2,940 中古価格: ¥ 2,150 Amazon.co.jp 売上ランキング: 45695 出版社: 翔泳社 単行本(ソフトカバー) 在庫あり。 おすすめ平均 ![]() Amazonで詳しく見る カスタマーレビュー
|
![]() |
ニュースペック過去問題集 応用情報技術者 平成26年春対策 (旧:合格するための過去問題集・情報処理技術者試験) 著者名: TAC情報処理講座 新品価格: ¥ 1,890 中古価格: Amazon.co.jp 売上ランキング: 122864 出版社: TAC出版 単行本 近日発売 予約可 おすすめ平均 ![]() Amazonで詳しく見る |
■ 午後解答・解説 ソフトウェア開発技術者試験
オブジェクト指向分析設計に関する次の記述を読んで,設問1〜3に答えよ。
E社では,株価の現在値と,変動の表示を定期的に行う,図1に示すようなシステム(以下,株価通知システムという)を開発することになった。株価通知システムには複数の株銘柄が登録されており,証券取引所から定期的に送信される最新の株価に基づき,株価通知システムの株価が株銘柄ごとに更新される。株価通知システムは,株銘柄ごとに表示時点の最新株価(現在値)を数値で,株価の変動の様子(値動き)をグラフで定期的に表示する。
なお,当初は現在値表示と値動き表示の二つの表示機能だけを提供するが,将来的には株価分析用チャート表示など,新たな形式での表示機能の追加が予定されている。

株価通知システムの開発を担当するF君は,次の設計方針に従い,UML(UnifiedModeling Lanuage)のクラス図とシーケンス図を用いたシステムのモデリングを行うことにした。
〔設計方針〕
・ 株価を保持する部分と,現在値や値動きなどの表示を行う表示部は,それぞれを個別のクラスとし,表示部には株価の値を保持しない。
・ すべての株銘柄は一つ以上の表示部と関連をもち,1回の株価更新で各表示を更新できるようにする。将来の表示機能追加に備え,表示部とめ関連は任意個可能とする。
・ 現在値表示や値動き表示などの表示機能に関しては,新たな形式の追加が予定されているので,適切な汎化を行い,部品化を図っておく。
F君は,一つの株銘柄に対する複数の表示機能を,株価の管理を行う株銘柄クラス(モデル),株価の表示を行う株価ビュークラス及びそのサブクラス(ビュー),株価の更新を制御する株価更新部クラス(コントローラ)の三つに分けて実装することにした。作成したクラス図を図2に示す。
株銘柄は,自身に依存するすべての株価ビューを,依存ビューの一覧としてもつ。株銘柄は,株価の変化に応じて,依存ビューの一覧に含まれるすべての株価ビューに対して表示を促すメッセージを送る。
株価ビューは,依存先の株銘柄を属性としてもつ。表示を促すメッセージを受けた株価ビューは,表示に必要な情報を依存先の株銘柄から取得し,表示を行う。
株銘柄と株価ビューの関連付けは,システム初期化部が関連付けのメッセージを送ることで行う。関連付けに関する処理のシーケンス図を図3に示す。また,定期的な株価更新と表示処理のシーケンス図を図4に示す。
株価通知システムをこのように設計することで,将来新たな形式の表示機能を追加する場合,そのクラスを株価ビュークラスの【 a 】として実装し,そのインスタンスを対応する【 b 】クラスのインスタンスに依存ビューとして登録するだけでよい。【 b 】クラスでは,機能追加前と同じく,依存ビューの一覧に含まれるすべての株価ビューに対して表示の更新を促す処理を行うことによって,新たに追加された形式の表示についても適切に表示の更新が行われる。
この方針は,一般にMVC(Model-View-Controller)と呼ばれ,一つのモデルを複数のビューによって表示し,モデルの変化を,それを表示するすべてのビューに反映する必要がある場合に用いられる。これは,モデルとビューの【 c 】,及びビューの汎化によって実現される。


『 H19年春PM1 問2 解答・解説 』
E社では,株価の現在値と,変動の表示を定期的に行う,図1に示すようなシステム(以下,株価通知システムという)を開発することになった。株価通知システムには複数の株銘柄が登録されており,証券取引所から定期的に送信される最新の株価に基づき,株価通知システムの株価が株銘柄ごとに更新される。株価通知システムは,株銘柄ごとに表示時点の最新株価(現在値)を数値で,株価の変動の様子(値動き)をグラフで定期的に表示する。
なお,当初は現在値表示と値動き表示の二つの表示機能だけを提供するが,将来的には株価分析用チャート表示など,新たな形式での表示機能の追加が予定されている。
株価通知システムの開発を担当するF君は,次の設計方針に従い,UML(UnifiedModeling Lanuage)のクラス図とシーケンス図を用いたシステムのモデリングを行うことにした。
〔設計方針〕
・ 株価を保持する部分と,現在値や値動きなどの表示を行う表示部は,それぞれを個別のクラスとし,表示部には株価の値を保持しない。
・ すべての株銘柄は一つ以上の表示部と関連をもち,1回の株価更新で各表示を更新できるようにする。将来の表示機能追加に備え,表示部とめ関連は任意個可能とする。
・ 現在値表示や値動き表示などの表示機能に関しては,新たな形式の追加が予定されているので,適切な汎化を行い,部品化を図っておく。
F君は,一つの株銘柄に対する複数の表示機能を,株価の管理を行う株銘柄クラス(モデル),株価の表示を行う株価ビュークラス及びそのサブクラス(ビュー),株価の更新を制御する株価更新部クラス(コントローラ)の三つに分けて実装することにした。作成したクラス図を図2に示す。
株銘柄は,自身に依存するすべての株価ビューを,依存ビューの一覧としてもつ。株銘柄は,株価の変化に応じて,依存ビューの一覧に含まれるすべての株価ビューに対して表示を促すメッセージを送る。
株価ビューは,依存先の株銘柄を属性としてもつ。表示を促すメッセージを受けた株価ビューは,表示に必要な情報を依存先の株銘柄から取得し,表示を行う。
株銘柄と株価ビューの関連付けは,システム初期化部が関連付けのメッセージを送ることで行う。関連付けに関する処理のシーケンス図を図3に示す。また,定期的な株価更新と表示処理のシーケンス図を図4に示す。
株価通知システムをこのように設計することで,将来新たな形式の表示機能を追加する場合,そのクラスを株価ビュークラスの【 a 】として実装し,そのインスタンスを対応する【 b 】クラスのインスタンスに依存ビューとして登録するだけでよい。【 b 】クラスでは,機能追加前と同じく,依存ビューの一覧に含まれるすべての株価ビューに対して表示の更新を促す処理を行うことによって,新たに追加された形式の表示についても適切に表示の更新が行われる。
この方針は,一般にMVC(Model-View-Controller)と呼ばれ,一つのモデルを複数のビューによって表示し,モデルの変化を,それを表示するすべてのビューに反映する必要がある場合に用いられる。これは,モデルとビューの【 c 】,及びビューの汎化によって実現される。
『 H19年春PM1 問2 解答・解説 』
posted by sw
| 平成19年春午後1問2解説
■ 午後解答・解説 ソフトウェア開発技術者試験
>家具を販売するごとに営業担当者が販売単価を個別に設定できるように,
>【 g 】エンティティに属性“【 h 】”を追加する。
これは、営業担当者が成績を上げる為に、顧客別に独自に値引きをしたりして
販売活動を活性化する為ですね。
営業担当者さんの独自に設定した販売単価をきっちり残しておかないと
家具分類別販売実績や顧客企業別販売実績はもちろん、営業担当者別の成績を
つける時にも、どれだけ売上げを上げたのか分からなくなってしまいますね。
例えば、ある営業担当者さんは、家具を売りまくった。
単価10000円の椅子を 3000円に値引きして売りまくった。
沢山、売りさばく事が出来ても、実際には大赤字でしょうね。
こんな事をされては、会社としては、たまったものではないので、販売単価を
きちんと残しておく必要があるのです。
標準単価は、「単価管理」テーブル内の単価に保存してあるので良いのですが
実際に取引した販売単価は、現在のところ保持する場所が無いですね。
そこで、何処に保存して置くのが良いか?
ER図をじっくりと眺めてみましょう。
販売単価は、家具別に設定される単価なので、「販売」には持てないですね。
そうすると、「販売明細」か「家具」か「単価管理」ですが。。。
「単価管理」に販売単価を作ると、顧客企業別には販売単価をいれられません。
「家具」に販売単価を作ると、同じく顧客企業別には販売単価をいれられません。
両方とも、顧客企業には関係なく、一律で販売単価を設定する事になってしまいます。
これでは、営業担当者が腕を見せる事が、できませんね。
営業担当者は、顧客企業の担当者と折衝をしながら、営業活動をしていきたいですね。
そこで、販売の明細情報を保存している「販売明細」に販売単価を作ります。
すると、販売明細の主キーの一部である販売番号が変わると、顧客企業も変わるし、
販売年月日も変わりますね。
販売明細情報を保存しているトランザクションテーブル、やっぱりここに
実際の販売情報を保存して置くのが、良さそうですね。
「g」販売明細
「h」販売単価
『 H19年春PM1 問6 設問4-01 解答・解説 』
>【 g 】エンティティに属性“【 h 】”を追加する。
これは、営業担当者が成績を上げる為に、顧客別に独自に値引きをしたりして
販売活動を活性化する為ですね。
営業担当者さんの独自に設定した販売単価をきっちり残しておかないと
家具分類別販売実績や顧客企業別販売実績はもちろん、営業担当者別の成績を
つける時にも、どれだけ売上げを上げたのか分からなくなってしまいますね。
例えば、ある営業担当者さんは、家具を売りまくった。
単価10000円の椅子を 3000円に値引きして売りまくった。
沢山、売りさばく事が出来ても、実際には大赤字でしょうね。
こんな事をされては、会社としては、たまったものではないので、販売単価を
きちんと残しておく必要があるのです。
標準単価は、「単価管理」テーブル内の単価に保存してあるので良いのですが
実際に取引した販売単価は、現在のところ保持する場所が無いですね。
そこで、何処に保存して置くのが良いか?
ER図をじっくりと眺めてみましょう。
[ER図]
販売
↓
単価管理←家具→販売明細
販売単価は、家具別に設定される単価なので、「販売」には持てないですね。
そうすると、「販売明細」か「家具」か「単価管理」ですが。。。
「単価管理」に販売単価を作ると、顧客企業別には販売単価をいれられません。
「家具」に販売単価を作ると、同じく顧客企業別には販売単価をいれられません。
両方とも、顧客企業には関係なく、一律で販売単価を設定する事になってしまいます。
これでは、営業担当者が腕を見せる事が、できませんね。
営業担当者は、顧客企業の担当者と折衝をしながら、営業活動をしていきたいですね。
そこで、販売の明細情報を保存している「販売明細」に販売単価を作ります。
すると、販売明細の主キーの一部である販売番号が変わると、顧客企業も変わるし、
販売年月日も変わりますね。
販売明細情報を保存しているトランザクションテーブル、やっぱりここに
実際の販売情報を保存して置くのが、良さそうですね。
「g」販売明細
「h」販売単価
『 H19年春PM1 問6 設問4-01 解答・解説 』
posted by sw
| 平成19年春午後1問6解説
■ 午後解答・解説 ソフトウェア開発技術者試験
最後に「m」「n」ですが。。。ここに入る値は。。。
( )の中は、相関副問合わせですね。
それに気付かないと「m」「n」に入れる値は思いつきません。
( )の中の単価管理をTN2と別名を付けている所もヒントですね。
すると
「m」には、家具番号を含む値ならば何でも良さそうですね。
「HM.家具番号」「KG.家具番号」「TN.家具番号」ならどれでも良さそうですね。
次に「n」です。
「n」には、販売をした日付が欲しいですね。
「HA.販売年月日」しかありませんね。
それでは、SQL文をまとめます。
以下の様になりますね。
SELECT HM.家具番号、 KG.家具名、 HM.数量、 TN.単価、
HM.数量 * TN.単価 AS 小計
FROM 販売 HA、 販売明細 HM、 家具 KG、 単価管理 TN
WHERE HA.販売番号 = :販売番号
AND HA.販売番号 = HM.販売番号
AND HM.家具番号 = KG.家具番号
AND KG.家具番号 = TN.家具番号
AND TN.適用開始年月日 =
( SELECT MAX(TN2.適用開始年月日)
FROM 単価管理 TN2
WHERE TN2.家具番号 = KG.家具番号
AND TN2.適用開始年月日 <= HA.販売年月日 )
ORDER BY HM.家具番号
『 H19年春PM1 問6 設問3-03 解答・解説 』
( )の中は、相関副問合わせですね。
それに気付かないと「m」「n」に入れる値は思いつきません。
( )の中の単価管理をTN2と別名を付けている所もヒントですね。
すると
「m」には、家具番号を含む値ならば何でも良さそうですね。
「HM.家具番号」「KG.家具番号」「TN.家具番号」ならどれでも良さそうですね。
次に「n」です。
「n」には、販売をした日付が欲しいですね。
「HA.販売年月日」しかありませんね。
それでは、SQL文をまとめます。
以下の様になりますね。
SELECT HM.家具番号、 KG.家具名、 HM.数量、 TN.単価、
HM.数量 * TN.単価 AS 小計
FROM 販売 HA、 販売明細 HM、 家具 KG、 単価管理 TN
WHERE HA.販売番号 = :販売番号
AND HA.販売番号 = HM.販売番号
AND HM.家具番号 = KG.家具番号
AND KG.家具番号 = TN.家具番号
AND TN.適用開始年月日 =
( SELECT MAX(TN2.適用開始年月日)
FROM 単価管理 TN2
WHERE TN2.家具番号 = KG.家具番号
AND TN2.適用開始年月日 <= HA.販売年月日 )
ORDER BY HM.家具番号
『 H19年春PM1 問6 設問3-03 解答・解説 』
posted by sw
| 平成19年春午後1問6解説
■ 午後解答・解説 ソフトウェア開発技術者試験
次に、( )で囲まれた副問合わせの部分に着目しましょう。
(実際には、まだこの時点では、副問合わせか相関副問合わせかは判断出来ません。)
>AND TN.適用開始年月日 =
>( SELECT 「l」
> FROM 単価管理 TN2
> WHERE TN2.家具番号 = 「m」
> AND TN2.適用開始年月日 <= 「n」 )
この部分から分かる事は。。。
( )で囲まれたSQL文から出力されるものは、年月日だなと推測出来ます。
なぜ、そうなるかわかりますか?
( )で囲まれたSQL文を
>AND TN.適用開始年月日 =
で比較しています。
つまり、TN.適用開始年月日と等しい事がWHERE句の条件となっています。
ということは、( )で囲まれた箇所のSQL文では、ある年月日が
出力される事が分かります。
ここで、( )内で使われている「単価管理」テーブルを確認すると適用開始年月日を保持していますね。
これが、副問合わせ内のSELECT句で書かれるのだなと分かります。
そして、更に、「=」で比較しているという事は、年月日は、必ずひとつでなければいけません。
副問合わせ等で複数の結果を返すようにするには「IN」や「EXISTS」を使わなければ
受け取る事が出来ず、エラーとなります。
ところが今回は
>AND TN.適用開始年月日 =
となっているので、副問い合わせの戻り値が、絶対に1つに絞られる必要がある事がわかります。
そして、副問合わせ内のWHERE句に着目します。
>AND TN.適用開始年月日 =
>( SELECT 「l」適用開始年月日
> FROM 単価管理 TN2
> WHERE TN2.家具番号 = 「m」
> AND TN2.適用開始年月日 <= 「n」 )
単価管理(家具番号、適用開始年月日、単価) 主キー:{家具番号、適用開始年月日}
家具番号と適用開始年月日が決まれば、一意に単価が決まるのに
WHERE句を見ると。。。
家具番号は「=」なので一意だが
適用開始年月日は「<=」となっていて複数条件に当てはまる事が分かります。
この条件下で、適用開始年月日を1つに絞る為には、集約関数を使わなければいけない事が
わかります。
集約関数には、以下のものがありましたね。
「SUM」:加算値
「COUNT」:行数
「AVG」:平均値
「MAX」:最大値
「MIN」:最小値
どれも複数の集合を1つに絞ってくれます。
ここで、条件を考えてみます。
ある家具の単価管理のデータを以下とします。
現在が「2008/07/01」だとすると
家具番号100の家具を買った時には、4000円と計算をしないとまずいですね。
過去の安い金額で計算されたら一大事です。
つまり、適用開始年月日の最大値のものが、計算結果に必要です。
すると副問合わせ内の「l」はMAX(適用開始年月日)と分かりますね。
>AND TN.適用開始年月日 =
>( SELECT MAX(適用開始年月日)
> FROM 単価管理 TN2
> WHERE TN2.家具番号 = 「m」
> AND TN2.適用開始年月日 <= 「n」 )
『 H19年春PM1 問6 設問3-02 解答・解説 』
(実際には、まだこの時点では、副問合わせか相関副問合わせかは判断出来ません。)
>AND TN.適用開始年月日 =
>( SELECT 「l」
> FROM 単価管理 TN2
> WHERE TN2.家具番号 = 「m」
> AND TN2.適用開始年月日 <= 「n」 )
この部分から分かる事は。。。
( )で囲まれたSQL文から出力されるものは、年月日だなと推測出来ます。
なぜ、そうなるかわかりますか?
( )で囲まれたSQL文を
>AND TN.適用開始年月日 =
で比較しています。
つまり、TN.適用開始年月日と等しい事がWHERE句の条件となっています。
ということは、( )で囲まれた箇所のSQL文では、ある年月日が
出力される事が分かります。
ここで、( )内で使われている「単価管理」テーブルを確認すると適用開始年月日を保持していますね。
これが、副問合わせ内のSELECT句で書かれるのだなと分かります。
そして、更に、「=」で比較しているという事は、年月日は、必ずひとつでなければいけません。
副問合わせ等で複数の結果を返すようにするには「IN」や「EXISTS」を使わなければ
受け取る事が出来ず、エラーとなります。
ところが今回は
>AND TN.適用開始年月日 =
となっているので、副問い合わせの戻り値が、絶対に1つに絞られる必要がある事がわかります。
そして、副問合わせ内のWHERE句に着目します。
>AND TN.適用開始年月日 =
>( SELECT 「l」適用開始年月日
> FROM 単価管理 TN2
> WHERE TN2.家具番号 = 「m」
> AND TN2.適用開始年月日 <= 「n」 )
単価管理(家具番号、適用開始年月日、単価) 主キー:{家具番号、適用開始年月日}
家具番号と適用開始年月日が決まれば、一意に単価が決まるのに
WHERE句を見ると。。。
家具番号は「=」なので一意だが
適用開始年月日は「<=」となっていて複数条件に当てはまる事が分かります。
この条件下で、適用開始年月日を1つに絞る為には、集約関数を使わなければいけない事が
わかります。
集約関数には、以下のものがありましたね。
「SUM」:加算値
「COUNT」:行数
「AVG」:平均値
「MAX」:最大値
「MIN」:最小値
どれも複数の集合を1つに絞ってくれます。
ここで、条件を考えてみます。
ある家具の単価管理のデータを以下とします。
家具番号 適用開始年月日 単価
100 2008/04/01 4000
100 2007/04/01 3000
100 2006/04/01 2000
現在が「2008/07/01」だとすると
家具番号100の家具を買った時には、4000円と計算をしないとまずいですね。
過去の安い金額で計算されたら一大事です。
つまり、適用開始年月日の最大値のものが、計算結果に必要です。
すると副問合わせ内の「l」はMAX(適用開始年月日)と分かりますね。
>AND TN.適用開始年月日 =
>( SELECT MAX(適用開始年月日)
> FROM 単価管理 TN2
> WHERE TN2.家具番号 = 「m」
> AND TN2.適用開始年月日 <= 「n」 )
『 H19年春PM1 問6 設問3-02 解答・解説 』
posted by sw
| 平成19年春午後1問6解説
■ 午後解答・解説 ソフトウェア開発技術者試験
それでは、まず、〔単価改定履歴をもつ案〕を採用した際に追加した「単価管理」を
含めたER図を確認しましょう。
SQL文を作る時には、ER図を参照する事により、楽に作成出来ますからね。
では、問題文に着目しましょう。
>販売明細の一覧には,“家具番号,家具名,販売数量,単価,小計”の一覧が,家具番号の昇順で出力される。
とありますね。 これは、SELECT句の内容「i」「j」ですね。
>SELECT HM.家具番号、 KG.家具名、 HM.数量、 「i」、
> 「j」 AS 小計
「i」は、TN.単価だとわかります。
単価管理という新規テーブルで、単価は家具番号別適用開始年月日別に管理する事になっていましたね。
「j」は、小計ということで、数量×単価が相応しいですね。 HM.数量 * TN.単価
次に、問題文にこのような記述があります。
>出力対象となる販売の販売番号を表すホスト変数は“:販売番号”とする。
ここで、もう一度、ER図を確認してみましょう。
ここで、販売の主キーである、販売番号のホスト変数“:販売番号”を使って
販売明細を出力するんだなってわかります。
つまり、WHERE句の条件に、“:販売番号”を与えてそれに紐付けされる
販売明細、家具、単価管理がSQL文で抽出されるのだなと推測出来ます。
ということで、WHERE句の条件「k」にホスト変数“:販売番号”を埋め込みましょう。
「k」は HA.販売番号 = :販売番号
となりますね。
その下のAND条件で結ばれる条件式は
ER図の各テーブルを結ぶ為に、主キーと外部キーを「=」で結んでいるだけですね。
ここまでのSQL文をまとめておきます。
SELECT HM.家具番号、 KG.家具名、 HM.数量、 TN.単価、
HM.数量 * TN.単価 AS 小計
FROM 販売 HA、 販売明細 HM、 家具 KG、 単価管理 TN
WHERE HA.販売番号 = :販売番号
AND HA.販売番号 = HM.販売番号
AND HM.家具番号 = KG.家具番号
AND KG.家具番号 = TN.家具番号
AND TN.適用開始年月日 =
( SELECT 「l」
FROM 単価管理 TN2
WHERE TN2.家具番号 = 「m」
AND TN2.適用開始年月日 <= 「n」 )
ORDER BY HM.家具番号
『 H19年春PM1 問6 設問3-01 解答・解説 』
含めたER図を確認しましょう。
SQL文を作る時には、ER図を参照する事により、楽に作成出来ますからね。
[ER図]
販売
↓
単価管理←家具→販売明細
では、問題文に着目しましょう。
>販売明細の一覧には,“家具番号,家具名,販売数量,単価,小計”の一覧が,家具番号の昇順で出力される。
とありますね。 これは、SELECT句の内容「i」「j」ですね。
>SELECT HM.家具番号、 KG.家具名、 HM.数量、 「i」、
> 「j」 AS 小計
「i」は、TN.単価だとわかります。
単価管理という新規テーブルで、単価は家具番号別適用開始年月日別に管理する事になっていましたね。
「j」は、小計ということで、数量×単価が相応しいですね。 HM.数量 * TN.単価
SQLの出力イメージとしては。。。
家具番号 家具名 販売数量 単価 小計
001 子供用椅子 3 2000 6000
002 大人用椅子 2 10000 20000
というような感じですね。
次に、問題文にこのような記述があります。
>出力対象となる販売の販売番号を表すホスト変数は“:販売番号”とする。
ここで、もう一度、ER図を確認してみましょう。
[ER図]
販売
↓
単価管理←家具→販売明細
ここで、販売の主キーである、販売番号のホスト変数“:販売番号”を使って
販売明細を出力するんだなってわかります。
つまり、WHERE句の条件に、“:販売番号”を与えてそれに紐付けされる
販売明細、家具、単価管理がSQL文で抽出されるのだなと推測出来ます。
ということで、WHERE句の条件「k」にホスト変数“:販売番号”を埋め込みましょう。
「k」は HA.販売番号 = :販売番号
となりますね。
その下のAND条件で結ばれる条件式は
ER図の各テーブルを結ぶ為に、主キーと外部キーを「=」で結んでいるだけですね。
ここまでのSQL文をまとめておきます。
SELECT HM.家具番号、 KG.家具名、 HM.数量、 TN.単価、
HM.数量 * TN.単価 AS 小計
FROM 販売 HA、 販売明細 HM、 家具 KG、 単価管理 TN
WHERE HA.販売番号 = :販売番号
AND HA.販売番号 = HM.販売番号
AND HM.家具番号 = KG.家具番号
AND KG.家具番号 = TN.家具番号
AND TN.適用開始年月日 =
( SELECT 「l」
FROM 単価管理 TN2
WHERE TN2.家具番号 = 「m」
AND TN2.適用開始年月日 <= 「n」 )
ORDER BY HM.家具番号
『 H19年春PM1 問6 設問3-01 解答・解説 』
posted by sw
| 平成19年春午後1問6解説
■ 午後解答・解説 ソフトウェア開発技術者試験
〔単価改定履歴をもつ案〕を採用した際の販売明細を出力するためのSQL文を次に示す。SQL文中の【 i 】〜【 n 】に入れる適切な字句又は式を答えよ。
ただし,販売明細の一覧には,“家具番号,家具名,販売数量,単価,小計”の一覧が,家具番号の昇順で出力される。また,出力対象となる販売の販売番号を表すホスト変数は“:販売番号”とする。
なお,列を表す場合,テーブル名の別名を省略してはならない。
『 H19年春PM1 問6 設問3 解答・解説 』
ただし,販売明細の一覧には,“家具番号,家具名,販売数量,単価,小計”の一覧が,家具番号の昇順で出力される。また,出力対象となる販売の販売番号を表すホスト変数は“:販売番号”とする。
なお,列を表す場合,テーブル名の別名を省略してはならない。
『 H19年春PM1 問6 設問3 解答・解説 』
posted by sw
| 平成19年春午後1問6解説
■ 午後解答・解説 ソフトウェア開発技術者試験
最後に、「f」について考えてみましょう。
では、まずSQL文をもう一度、確認してみましょう。
>SELECT 家具.家具分類番号, 家具分類.家具分類名, SUM(家具.単価 * 販売明細.数量) AS 販売実績
>FROM 販売, 販売明細, 家具, 家具分類
>WHERE 販売.販売年月日 BETWEEN :指定月開始日 AND :指定月終了日
>AND 販売.販売番号 = 販売明細.販売番号
>AND 販売明細.家具番号 = 家具.家具番号
>AND 家具.家具分類番号 = 家具分類.家具分類番頭
>「f」 家具.家具分類番号, 家具分類.家具分類名
>ORDER BY 販売実績 DESC
となっていますね。
ここでの解答のポイントは、SQL文で、集約関数が使われている事です。
集約関数には、以下のものがありましたね。
「SUM」:加算値
「COUNT」:行数
「AVG」:平均値
「MAX」:最大値
「MIN」:最小値
これらは、暗記をしておかなければいけない関数であると
お伝えしてありますね。
そして、集約関数を実行したら、「GROUP BY」でグルーピングしなければ
エラーとなってしまいます。
グルーピングする対象は何かというと。。。
「SELECT句で記述された、集約関数ではない全ての列」です。
>SELECT 家具.家具分類番号, 家具分類.家具分類名, SUM(家具.単価 * 販売明細.数量) AS 販売実績
すると。。。対象は「家具.家具分類番号, 家具分類.家具分類名」ですね。
「f」の行を確認すると。。。
>「f」 家具.家具分類番号, 家具分類.家具分類名
ぴったりと一致しますね。
よって、「f」は「GROUP BY」だとわかります。
集約関数が出て来たら、必ず「GROUP BY」が必要であると覚えておいて下さいね。
『 H19年春PM1 問6 設問2-03 解答・解説 』
では、まずSQL文をもう一度、確認してみましょう。
>SELECT 家具.家具分類番号, 家具分類.家具分類名, SUM(家具.単価 * 販売明細.数量) AS 販売実績
>FROM 販売, 販売明細, 家具, 家具分類
>WHERE 販売.販売年月日 BETWEEN :指定月開始日 AND :指定月終了日
>AND 販売.販売番号 = 販売明細.販売番号
>AND 販売明細.家具番号 = 家具.家具番号
>AND 家具.家具分類番号 = 家具分類.家具分類番頭
>「f」 家具.家具分類番号, 家具分類.家具分類名
>ORDER BY 販売実績 DESC
となっていますね。
ここでの解答のポイントは、SQL文で、集約関数が使われている事です。
集約関数には、以下のものがありましたね。
「SUM」:加算値
「COUNT」:行数
「AVG」:平均値
「MAX」:最大値
「MIN」:最小値
これらは、暗記をしておかなければいけない関数であると
お伝えしてありますね。
そして、集約関数を実行したら、「GROUP BY」でグルーピングしなければ
エラーとなってしまいます。
グルーピングする対象は何かというと。。。
「SELECT句で記述された、集約関数ではない全ての列」です。
>SELECT 家具.家具分類番号, 家具分類.家具分類名, SUM(家具.単価 * 販売明細.数量) AS 販売実績
すると。。。対象は「家具.家具分類番号, 家具分類.家具分類名」ですね。
「f」の行を確認すると。。。
>「f」 家具.家具分類番号, 家具分類.家具分類名
ぴったりと一致しますね。
よって、「f」は「GROUP BY」だとわかります。
集約関数が出て来たら、必ず「GROUP BY」が必要であると覚えておいて下さいね。
『 H19年春PM1 問6 設問2-03 解答・解説 』
posted by sw
| 平成19年春午後1問6解説
■ 午後解答・解説 ソフトウェア開発技術者試験
続いて、「e」について問題文を見てみましょう。
>WHERE 販売.販売年月日 「e」 :指定月開始日 AND :指定月終了日
となっていますね。
この問題についても、前回の関数と同じで、形式を暗記していないと解けません。
AからBの間 「対象列 BETWEEN A AND B」
Aが集計対象となる期間の始めをあらわす値
Bが集計対象となる期間の終わりをあらわす値 が入ります。
そうすると、
WHERE 販売.販売年月日 BETWEEN :指定月開始日 AND :指定月終了日
となりますね。
でも、この記述方法は、違う書き方に代えることもできますね。
では、考えて見ましょう。。。。
どうですか、わかりましたか?
答えです。
WHERE 販売.販売年月日 >= :指定月開始日
AND 販売.販売年月日 <= :指定月終了日
英作文の様に、異なる書き換えも同時に覚えてしまえば、意味や使用方法が暗記しやすくなりますね。
よって、「e」は、BETWEEN となります。
『 H19年春PM1 問6 設問2-02 解答・解説 』
>WHERE 販売.販売年月日 「e」 :指定月開始日 AND :指定月終了日
となっていますね。
この問題についても、前回の関数と同じで、形式を暗記していないと解けません。
AからBの間 「対象列 BETWEEN A AND B」
Aが集計対象となる期間の始めをあらわす値
Bが集計対象となる期間の終わりをあらわす値 が入ります。
そうすると、
WHERE 販売.販売年月日 BETWEEN :指定月開始日 AND :指定月終了日
となりますね。
でも、この記述方法は、違う書き方に代えることもできますね。
では、考えて見ましょう。。。。
どうですか、わかりましたか?
答えです。
WHERE 販売.販売年月日 >= :指定月開始日
AND 販売.販売年月日 <= :指定月終了日
英作文の様に、異なる書き換えも同時に覚えてしまえば、意味や使用方法が暗記しやすくなりますね。
よって、「e」は、BETWEEN となります。
『 H19年春PM1 問6 設問2-02 解答・解説 』
posted by sw
| 平成19年春午後1問6解説
■ 午後解答・解説 ソフトウェア開発技術者試験
>本文中の【 d 】〜【 f 】に入れる適切な字句を答えよ。
問題文より、注目する箇所はこの2つのSQLですね。

問題文より
>図1の販売実績レポートを出力する二つのSQL文は次のとおりである。
>ただし,“:指定月開始日”,“:指定月終了日”は,それぞれレポートの出力対象となる
>販売年月の開始日,終了日を表すホスト変数である。
本来、仕事などの実際の業務であれば、図1の販売実績レポートをじっくりと見て
一からSQL文を作る必要がありますが、試験として出題されているSQLは、大概、穴埋めで出題されています。
なので、SQL文をじっくりと見て、効率良く解答をしていくテクニックを身に付けましょう。
まず、「d」に着目します。 私がこの問題を解く時に、心の中で気付く点を列挙します。
1.「d」は、SELECT句の中で、記述されているなぁ。
2.「d」の後ろが(家具.単価 * 販売明細.数量)と( )で括られているなぁ
この2つの特徴から、ここは何やら関数が入るのだな。。。と推測が出来ますね。
そして、「d」(家具.単価 * 販売明細.数量) AS 販売実績 となっており
この項目は、販売実績という名前に、変えられている事が読み取れます。
ここで、「図1の販売実績レポート」を確認します。
販売実績を確認すると。。。家具分類別(顧客企業別)の販売実績とわかりますね。

(家具.単価 * 販売明細.数量)で、つまり「単価×数量」で販売時の金額を算出し
それを、家具分類別に纏めれば(加算すれば)、家具分類別の販売実績が導出できると
判断できます。
つまり、「d」は加算を行う関数である、「SUM」であるとわかりますね。
「SUM」加算値
「COUNT」行数
「AVG」平均値
「MAX」最大値
「MIN」最小値
これらは、暗記をしておかなければいけない関数ですね。
『 H19年春PM1 問6 設問2-01 解答・解説 』
問題文より、注目する箇所はこの2つのSQLですね。
問題文より
>図1の販売実績レポートを出力する二つのSQL文は次のとおりである。
>ただし,“:指定月開始日”,“:指定月終了日”は,それぞれレポートの出力対象となる
>販売年月の開始日,終了日を表すホスト変数である。
本来、仕事などの実際の業務であれば、図1の販売実績レポートをじっくりと見て
一からSQL文を作る必要がありますが、試験として出題されているSQLは、大概、穴埋めで出題されています。
なので、SQL文をじっくりと見て、効率良く解答をしていくテクニックを身に付けましょう。
まず、「d」に着目します。 私がこの問題を解く時に、心の中で気付く点を列挙します。
1.「d」は、SELECT句の中で、記述されているなぁ。
2.「d」の後ろが(家具.単価 * 販売明細.数量)と( )で括られているなぁ
この2つの特徴から、ここは何やら関数が入るのだな。。。と推測が出来ますね。
そして、「d」(家具.単価 * 販売明細.数量) AS 販売実績 となっており
この項目は、販売実績という名前に、変えられている事が読み取れます。
ここで、「図1の販売実績レポート」を確認します。
販売実績を確認すると。。。家具分類別(顧客企業別)の販売実績とわかりますね。
(家具.単価 * 販売明細.数量)で、つまり「単価×数量」で販売時の金額を算出し
それを、家具分類別に纏めれば(加算すれば)、家具分類別の販売実績が導出できると
判断できます。
つまり、「d」は加算を行う関数である、「SUM」であるとわかりますね。
「SUM」加算値
「COUNT」行数
「AVG」平均値
「MAX」最大値
「MIN」最小値
これらは、暗記をしておかなければいけない関数ですね。
『 H19年春PM1 問6 設問2-01 解答・解説 』
posted by sw
| 平成19年春午後1問6解説
■ 午後解答・解説 ソフトウェア開発技術者試験
最後に、エンティティ間の「c」
つまり、リレーションシップについて、考えてみましょう。
リレーションシップと言うことは、「c」に入る可能性があるのは
「−」:1対1
「→」:1対多
「←」:多対1
しかありえません。
前の問題より
家具(家具番号、家具分類番号、家具名、重量、寸法、単価) 主キー:家具番号 外部キー:家具分類番号
そして、ER図より
販売明細(販売番号、家具番号、数量) 主キー:{販売番号、家具番号}
となっていますね。
あと、販売明細とリレーションシップ(線で繋がっている)がある販売にも注目しましょう。
販売(販売番号、販売年月日、顧客企業番号、顧客担当者番号、営業担当者番号、販売合計金額) 主キー:販売番号
外部キー:顧客企業番号、顧客担当者番号、営業担当者番号
この3つのエンティティを眺めていると、気付く事があると思います。
販売明細は。。。
販売の主キーである販売番号を持ち
家具の主キーである家具番号を持っている。
そして、この二つで主キーが構成されている。
このようなエンティティを「連関エンティティ」といいますね。
販売 → 販売明細 ← 家具
販売と販売明細は「1対多」
家具と販売明細も「1対多」
そして、連関エンティティで挟んでいる販売と家具は「多対多」です。
これは、暗記すべき重要な内容です。 知らなければしっかりと暗記をして下さい。
よって、cの解答は「→」となりますね。
『 H19年春PM1 問6 設問1-03 解答・解説 』
つまり、リレーションシップについて、考えてみましょう。
リレーションシップと言うことは、「c」に入る可能性があるのは
「−」:1対1
「→」:1対多
「←」:多対1
しかありえません。
前の問題より
家具(家具番号、家具分類番号、家具名、重量、寸法、単価) 主キー:家具番号 外部キー:家具分類番号
そして、ER図より
販売明細(販売番号、家具番号、数量) 主キー:{販売番号、家具番号}
となっていますね。
あと、販売明細とリレーションシップ(線で繋がっている)がある販売にも注目しましょう。
販売(販売番号、販売年月日、顧客企業番号、顧客担当者番号、営業担当者番号、販売合計金額) 主キー:販売番号
外部キー:顧客企業番号、顧客担当者番号、営業担当者番号
この3つのエンティティを眺めていると、気付く事があると思います。
販売明細は。。。
販売の主キーである販売番号を持ち
家具の主キーである家具番号を持っている。
そして、この二つで主キーが構成されている。
このようなエンティティを「連関エンティティ」といいますね。
販売 → 販売明細 ← 家具
販売と販売明細は「1対多」
家具と販売明細も「1対多」
そして、連関エンティティで挟んでいる販売と家具は「多対多」です。
これは、暗記すべき重要な内容です。 知らなければしっかりと暗記をして下さい。
よって、cの解答は「→」となりますね。
『 H19年春PM1 問6 設問1-03 解答・解説 』
posted by sw
| 平成19年春午後1問6解説
■ 午後解答・解説 ソフトウェア開発技術者試験
次に、下記の図の「b」に着目して下さい。

家具分類から家具に向けて、矢印が引かれています。
これは、家具分類と家具の関係が1対多であることを、表していますね。
前問のaより
家具分類(家具分類番号、家具分類名) 主キー:家具分類番号
ですね。
つまり家具分類から家具に矢印を引くには、家具に家具分類の主キーを保持しなくてはいけません。
また、これは外部キー(点線で表示)となりますね。
そして、家具のER図を見ると主キーである実線が無いこともわかりますね。
主キーも勿論必要です。(他の全てのエンティティには、主キー(実線)があるのが確認できますね)
主キーは、家具を一意に表す「家具番号」とします。
家具(家具番号、家具分類番号、家具名、重量、寸法、単価) 主キー:家具番号 外部キー:家具分類番号
となりますね。
よって「b」の解答は
家具番号
家具分類番号
となります
『 H19年春PM1 問6 設問1-02 解答・解説 』
家具分類から家具に向けて、矢印が引かれています。
これは、家具分類と家具の関係が1対多であることを、表していますね。
前問のaより
家具分類(家具分類番号、家具分類名) 主キー:家具分類番号
ですね。
つまり家具分類から家具に矢印を引くには、家具に家具分類の主キーを保持しなくてはいけません。
また、これは外部キー(点線で表示)となりますね。
そして、家具のER図を見ると主キーである実線が無いこともわかりますね。
主キーも勿論必要です。(他の全てのエンティティには、主キー(実線)があるのが確認できますね)
主キーは、家具を一意に表す「家具番号」とします。
家具(家具番号、家具分類番号、家具名、重量、寸法、単価) 主キー:家具番号 外部キー:家具分類番号
となりますね。
よって「b」の解答は
家具番号
家具分類番号
となります
『 H19年春PM1 問6 設問1-02 解答・解説 』
posted by sw
| 平成19年春午後1問6解説
■ 午後解答・解説 ソフトウェア開発技術者試験
>図2のE-R図中の【 a 】〜【 c 】に入れる適切な属性名及びエンティティ間の関連を答え,E-R図を完成させよ。
> なお,エンティティ間の関連及び属性名は,甲2の凡例に倣って示せ。
まずは、「ER図を完成させよ」という問題ですね。
与えられた資料としては、「図1 平成19年2月分 家具分類別、顧客企業別 販売実績レポート」ですね。
これを、モデリングしましょう。
このレポートは、二つの表が1枚のレポートとして記述されています。
「家具分類別 販売実績」「顧客企業別 販売実績」これを別々に、モデリングしてみましょう。
手順としては、以下のものが必要です。
1.項目の洗い出し
2.第一正規形
3.第二正規形
4.第三正規形
では、はじめてみましょう。

1.「家具分類別 販売実績」項目の洗い出し
{家具分類番号、家具分類名、販売実績、販売実績合計}
2.「家具分類別 販売実績」第一正規形にする
家具分類(家具分類番号、家具分類名、販売実績、販売実績合計) 主キー:家具分類番号
表名を、家具分類とする。
ドメインが単純で、繰り返しも存在していないので、第一正規形を満たしている。
3.「家具分類別 販売実績」第二正規形にする
家具分類(家具分類番号、家具分類名、販売実績、販売実績合計) 主キー:家具分類番号
候補キー{家具分類番号}にあらゆる部分関数従属が存在しないので、第二正規形を満たしている。
4.「家具分類別 販売実績」第三正規形にする
家具分類(家具分類番号、家具分類名、販売実績、販売実績合計) 主キー:家具分類番号
候補キー{家具分類番号}にあらゆる推移関数従属が存在しないので、第三正規形を満たしている。
但し、ここで販売実績合計は、販売実績をサマリしたもので、導出項目である。
そのため、第三正規形の段階で、この属性をはずす。
家具分類(家具分類番号、家具分類名、販売実績) 主キー:家具分類番号
また、問題文より
>SQL文1は,現在の家具の単価から算出された金額を集計しているので,販売時の単価が
>現在の単価と異なる場合,販売時の実績と異なる金額を出力してしまう可能性が考えられる。
とある。
つまり、販売実績の金額も導出項目であると判断できる。
この項目もはずす。
すると
家具分類(家具分類番号、家具分類名) 主キー:家具分類番号 となる。
これが「a」の解答となる。
家具分類番号
家具分類名
次に。。。続きます。
『 H19年春PM1 問6 設問1-01 解答・解説 』
> なお,エンティティ間の関連及び属性名は,甲2の凡例に倣って示せ。
まずは、「ER図を完成させよ」という問題ですね。
与えられた資料としては、「図1 平成19年2月分 家具分類別、顧客企業別 販売実績レポート」ですね。
これを、モデリングしましょう。
このレポートは、二つの表が1枚のレポートとして記述されています。
「家具分類別 販売実績」「顧客企業別 販売実績」これを別々に、モデリングしてみましょう。
手順としては、以下のものが必要です。
1.項目の洗い出し
2.第一正規形
3.第二正規形
4.第三正規形
では、はじめてみましょう。
1.「家具分類別 販売実績」項目の洗い出し
{家具分類番号、家具分類名、販売実績、販売実績合計}
2.「家具分類別 販売実績」第一正規形にする
家具分類(家具分類番号、家具分類名、販売実績、販売実績合計) 主キー:家具分類番号
表名を、家具分類とする。
ドメインが単純で、繰り返しも存在していないので、第一正規形を満たしている。
3.「家具分類別 販売実績」第二正規形にする
家具分類(家具分類番号、家具分類名、販売実績、販売実績合計) 主キー:家具分類番号
候補キー{家具分類番号}にあらゆる部分関数従属が存在しないので、第二正規形を満たしている。
4.「家具分類別 販売実績」第三正規形にする
家具分類(家具分類番号、家具分類名、販売実績、販売実績合計) 主キー:家具分類番号
候補キー{家具分類番号}にあらゆる推移関数従属が存在しないので、第三正規形を満たしている。
但し、ここで販売実績合計は、販売実績をサマリしたもので、導出項目である。
そのため、第三正規形の段階で、この属性をはずす。
家具分類(家具分類番号、家具分類名、販売実績) 主キー:家具分類番号
また、問題文より
>SQL文1は,現在の家具の単価から算出された金額を集計しているので,販売時の単価が
>現在の単価と異なる場合,販売時の実績と異なる金額を出力してしまう可能性が考えられる。
とある。
つまり、販売実績の金額も導出項目であると判断できる。
この項目もはずす。
すると
家具分類(家具分類番号、家具分類名) 主キー:家具分類番号 となる。
これが「a」の解答となる。
家具分類番号
家具分類名
次に。。。続きます。
『 H19年春PM1 問6 設問1-01 解答・解説 』
posted by sw
| 平成19年春午後1問6解説
■ 午後解答・解説 ソフトウェア開発技術者試験
図2のE-R図中の【 a 】〜【 c 】に入れる適切な属性名及びエンティティ間の関連を答え,E-R図を完成させよ。
なお,エンティティ間の関連及び属性名は,甲2の凡例に倣って示せ。
『 H19年春PM1 問6 設問1 解答・解説 』
なお,エンティティ間の関連及び属性名は,甲2の凡例に倣って示せ。
『 H19年春PM1 問6 設問1 解答・解説 』
posted by sw
| 平成19年春午後1問6解説
■ 午後解答・解説 ソフトウェア開発技術者試験
家具販売管理システムに関する次の記述を読んで,設問1〜4に答えよ。
家具を製造・販売するC社では,3か月前に販売管理システム(以下,本システムという)を稼働させた。本システムは,顧客向けの販売明細などが添付された請求書,社内向けの販売実績レポートなどを提供する機能をもつ。システム稼働から3か月が経過したある日,販売実績レポートに問題が発生した。
〔発生した問題とE−R図及びSQL文の確認〕
問題が発生した平成19年2月分の販売実績レポートを図1に示す。

家具分類別と顧客企業別の販売実績の合計は同じになるはずだが,家具分類別の方が顧客企業別よりも200千円少ない金額になってしまっている。
この問題の原因を追究することになったDさんは,まずE-R図及び販売実績レポートの出力に使用しているSQL文を確認することにした。
本システムのE-R図を図2に示す。
なお,本システムでは,E-R図に合わせてエンティティ名をテーブル名(表名),属性名を列名にして,適切なデータ型でテーブル定義した関係データベースによって,データを管理している。

図1の販売実績レポートを出力する二つのSQL文は次のとおりである。ただし,“:指定月開始日”,“:指定月終了日”は,それぞれレポートの出力対象となる販売年月の開始日,終了日を表すホスト変数である。

〔原因の推測と調査の実施〕
Dさんは二つのSQL文に,そこから出力される販売実績に差異を生じさせる要因がないかを検討した。SQL文2は,販売時の実績を集計しているだけであるので,入力ミスがないとしたら,実際の販売金額を出力していると判断できる。SQL文1は,現在の家具の単価から算出された金額を集計しているので,販売時の単価が現在の単価と異なる場合,販売時の実績と異なる金額を出力してしまう可能性が考えられる。その販売時の単価と現在の単価との相違が原因ではないかと推測した。
そこでDさんは家具の単価の設定方法について調査を行ったところ,次の3点に整理することができた。
・ 家具の単価は四半期に1回程度の頻度で不定期に改定される。最後に改定が適用されたのは平成19年3月1日である。
・ 営業時間中に単価が改定されることはない。家具テーブルの単価は,改定が適用される前日のオンラインシステムが稼働していない営業時間外に更新される。
・ 営業部門から,家具を販売するごとに販売単価を個別に設定できるようにしたいという要望が出ている。しかし,現状では,顧客ごと,又は販売ごとに単価を変更することはできない。
これらの家具の単価の設定方法から,今回の問題は平成19年3月1日に実施された単価改定が原因であることが判明した。そこで,まず,この問題を回避するために,データ構造を見直した次の案を検討することにした。
〔単価改定履歴をもつ案〕
家具ごとに単価改定履歴をもつことができるように,家具エンティティから属性“単価”を削除し,単価管理エンティティを追加する。図3は追加した単価管理エンテンティと家具エンティティとの関係を示したE-R図である。
なお,図3中の【 b 】には,図2中の【 b 】と同一のものが入る。

さらに,今回の問題を回避するだけでなく,営業部門から出されている要望を実現するために,次の案も検討した。
〔販売単価を個別に設定可能にする案〕
家具を販売するごとに営業担当者が販売単価を個別に設定できるように,【 g 】エンティティに属性“【 h 】”を追加する。
『 H19年春PM1 問6 解答・解説 』
家具を製造・販売するC社では,3か月前に販売管理システム(以下,本システムという)を稼働させた。本システムは,顧客向けの販売明細などが添付された請求書,社内向けの販売実績レポートなどを提供する機能をもつ。システム稼働から3か月が経過したある日,販売実績レポートに問題が発生した。
〔発生した問題とE−R図及びSQL文の確認〕
問題が発生した平成19年2月分の販売実績レポートを図1に示す。
家具分類別と顧客企業別の販売実績の合計は同じになるはずだが,家具分類別の方が顧客企業別よりも200千円少ない金額になってしまっている。
この問題の原因を追究することになったDさんは,まずE-R図及び販売実績レポートの出力に使用しているSQL文を確認することにした。
本システムのE-R図を図2に示す。
なお,本システムでは,E-R図に合わせてエンティティ名をテーブル名(表名),属性名を列名にして,適切なデータ型でテーブル定義した関係データベースによって,データを管理している。
図1の販売実績レポートを出力する二つのSQL文は次のとおりである。ただし,“:指定月開始日”,“:指定月終了日”は,それぞれレポートの出力対象となる販売年月の開始日,終了日を表すホスト変数である。
〔原因の推測と調査の実施〕
Dさんは二つのSQL文に,そこから出力される販売実績に差異を生じさせる要因がないかを検討した。SQL文2は,販売時の実績を集計しているだけであるので,入力ミスがないとしたら,実際の販売金額を出力していると判断できる。SQL文1は,現在の家具の単価から算出された金額を集計しているので,販売時の単価が現在の単価と異なる場合,販売時の実績と異なる金額を出力してしまう可能性が考えられる。その販売時の単価と現在の単価との相違が原因ではないかと推測した。
そこでDさんは家具の単価の設定方法について調査を行ったところ,次の3点に整理することができた。
・ 家具の単価は四半期に1回程度の頻度で不定期に改定される。最後に改定が適用されたのは平成19年3月1日である。
・ 営業時間中に単価が改定されることはない。家具テーブルの単価は,改定が適用される前日のオンラインシステムが稼働していない営業時間外に更新される。
・ 営業部門から,家具を販売するごとに販売単価を個別に設定できるようにしたいという要望が出ている。しかし,現状では,顧客ごと,又は販売ごとに単価を変更することはできない。
これらの家具の単価の設定方法から,今回の問題は平成19年3月1日に実施された単価改定が原因であることが判明した。そこで,まず,この問題を回避するために,データ構造を見直した次の案を検討することにした。
〔単価改定履歴をもつ案〕
家具ごとに単価改定履歴をもつことができるように,家具エンティティから属性“単価”を削除し,単価管理エンティティを追加する。図3は追加した単価管理エンテンティと家具エンティティとの関係を示したE-R図である。
なお,図3中の【 b 】には,図2中の【 b 】と同一のものが入る。
さらに,今回の問題を回避するだけでなく,営業部門から出されている要望を実現するために,次の案も検討した。
〔販売単価を個別に設定可能にする案〕
家具を販売するごとに営業担当者が販売単価を個別に設定できるように,【 g 】エンティティに属性“【 h 】”を追加する。
『 H19年春PM1 問6 解答・解説 』
posted by sw
| 平成19年春午後1問6解説
■ 午後解答・解説 ソフトウェア開発技術者試験
まず、問題文からネットワーク内で、どのような事が起こっているのか確認をして見ましょう。
>社内LANからインターネットのWebを参照する場合,ファイアウォールX及びYは,
>社内からインターネットに向かうアクセス要求のパケットと,
>インターネットから社内に向かう応答のパケットを通過させる必要がある。
と問題にあります。
これを図で表すとこんな感じですね。

社内のクライアントPCからのHTTP(ポート番号:80)のGETコマンドをインターネット側に通過させる必要があります。
ちなみに、送信元ポート番号は1024より大きなランダムな値を使用します。
この値はOSが適当に値を決定します。 問題文では、「任意」となっていますね。
そしてその要求に対する応答として、以下のような応答パケットが帰ってきます。
この要求に対する「応答パケット」が今回の問題で問われている内容です。
応答パケットとして帰ってきたパケット内のデータ部に、HTMLファイルのデータが格納されています。
これをPC上の記憶領域に保持して、そのデータをIEなどのブラウザを通して見ることにより、はじめて、HPなどの人間が見れる形式に、変換して見ているのです。
なので、ファイアーウォールX、ファイアーウォールYでは、要求パケット・応答パケットの両方を通過させる必要があります。
ところが、悪意を持った者が、応答パケットを偽装して社内のクライアントPC向けにパケットを流すとファイアーウォールは通過を許可しているので、社内まで侵入する事が出来てしまいます。
これを防ぐ為に、「動的パケットフィルタリング」機能を用いてアクセス制御を行います。
常に応答のパケットを許可するのではなく、ファイアーウォールX、ファイアーウォールYを通過した要求パケットを記憶して、通過したパケットの応答だけを動的に(一時的に)通過許可をするのですね。
これを判断する方法もやっぱり「送信元IP、送信先IP、送信元ポート番号、送信先ポート番号」で判断しています。
以上より、lの解答は「ウ」だと分かりますね。
『 H19年春PM1 問1 設問3-01 解答・解説 』
>社内LANからインターネットのWebを参照する場合,ファイアウォールX及びYは,
>社内からインターネットに向かうアクセス要求のパケットと,
>インターネットから社内に向かう応答のパケットを通過させる必要がある。
と問題にあります。
これを図で表すとこんな感じですね。
社内のクライアントPCからのHTTP(ポート番号:80)のGETコマンドをインターネット側に通過させる必要があります。
送信元IP 送信先IP 送信元ポート番号 送信先ポート番号
社内のクライアントPCのIP インターネット上のWebサーバ >1024 80
ちなみに、送信元ポート番号は1024より大きなランダムな値を使用します。
この値はOSが適当に値を決定します。 問題文では、「任意」となっていますね。
そしてその要求に対する応答として、以下のような応答パケットが帰ってきます。
送信元IP 送信先IP 送信元ポート番号 送信先ポート番号
インターネット上のWebサーバ 社内のクライアントPCのIP 80 >1024
この要求に対する「応答パケット」が今回の問題で問われている内容です。
応答パケットとして帰ってきたパケット内のデータ部に、HTMLファイルのデータが格納されています。
これをPC上の記憶領域に保持して、そのデータをIEなどのブラウザを通して見ることにより、はじめて、HPなどの人間が見れる形式に、変換して見ているのです。
なので、ファイアーウォールX、ファイアーウォールYでは、要求パケット・応答パケットの両方を通過させる必要があります。
ところが、悪意を持った者が、応答パケットを偽装して社内のクライアントPC向けにパケットを流すとファイアーウォールは通過を許可しているので、社内まで侵入する事が出来てしまいます。
これを防ぐ為に、「動的パケットフィルタリング」機能を用いてアクセス制御を行います。
常に応答のパケットを許可するのではなく、ファイアーウォールX、ファイアーウォールYを通過した要求パケットを記憶して、通過したパケットの応答だけを動的に(一時的に)通過許可をするのですね。
これを判断する方法もやっぱり「送信元IP、送信先IP、送信元ポート番号、送信先ポート番号」で判断しています。
以上より、lの解答は「ウ」だと分かりますね。
『 H19年春PM1 問1 設問3-01 解答・解説 』
posted by sw
| 平成19年春午後1問1解説
■ 午後解答・解説 ソフトウェア開発技術者試験
最後に、表5「ルータDのパケットフィルタ設定」を考えていきましょう。
ルータDは、協力会社LANの出入り口でフィルタリングしているルータです。
例によって、表3〜表5のパケットフィルタ設定に関係をしている問題文は、以下の箇所です。
>社員用LAN1及び社員用LAN2からは,インターネットのWebへのアクセス,
>電子メールの送受信,及び社内LAN全体へのアクセスを可能にする。
>
>協力会社用LANからは,インターネットのWebへのアクセスと,
>グループウェアサーバへのアクセスだけを可能にする。
つまり、この文章から、ルータD(表5)で必要と思われる設定は
社員用LAN1からのアクセス(社員用LAN1→協力会社用LANの方向の為、表5では関係無し)
社員用LAN2からのアクセス(社員用LAN2→協力会社用LANの方向の為、表5では関係無し)
協力会社用LANからのインターネット上全てのWebサーバ(anywhere)へのアクセス(HTTP ポート番号:80)
協力会社用LANからのグループウェアサーバ(192.168.10.100)へのアクセス(社内グループウェア ポート番号:52000)
通常であれば、「協力会社用LANからの〜」で始まる2ルール、そして全ての不許可を表す1ルール
さえ設定すればOKです。(合計3ルール)
ところが、問題文を見ると表5には、5ルールあります。
それも、1行目と2行目は、「禁止」を表しているルールですね。
この2つのルールは、協力会社用LANから社員用LAN1、社員用LAN2へのHTTPアクセス(ポート番号:80)を
禁止していますね。
これは、協力会社用LANからのインターネット上全てのWebサーバ(anywhere)へのアクセス(HTTP ポート番号:80)
を許可している為、あえてそれよりも優先度が高いフィルタリングテーブルの上位の位置(1行目、2行目)に、
社員用LAN1、社員用LAN2への禁止のルールを記述しているのですね。
(下図参照)

では、これらを表5の形式にそって、纏めてみましょう。
通信の方向:協力会社用LAN→社内LAN
これが、j,kの解答となります。
『 H19年春PM1 問1 設問2-03 解答・解説 』
ルータDは、協力会社LANの出入り口でフィルタリングしているルータです。
例によって、表3〜表5のパケットフィルタ設定に関係をしている問題文は、以下の箇所です。
>社員用LAN1及び社員用LAN2からは,インターネットのWebへのアクセス,
>電子メールの送受信,及び社内LAN全体へのアクセスを可能にする。
>
>協力会社用LANからは,インターネットのWebへのアクセスと,
>グループウェアサーバへのアクセスだけを可能にする。
つまり、この文章から、ルータD(表5)で必要と思われる設定は
社員用LAN1からのアクセス(社員用LAN1→協力会社用LANの方向の為、表5では関係無し)
社員用LAN2からのアクセス(社員用LAN2→協力会社用LANの方向の為、表5では関係無し)
協力会社用LANからのインターネット上全てのWebサーバ(anywhere)へのアクセス(HTTP ポート番号:80)
協力会社用LANからのグループウェアサーバ(192.168.10.100)へのアクセス(社内グループウェア ポート番号:52000)
通常であれば、「協力会社用LANからの〜」で始まる2ルール、そして全ての不許可を表す1ルール
さえ設定すればOKです。(合計3ルール)
送信元ポート番号 状態 送信元IPアドレス 送信先IPアドレス
80 許可 anywhere h「anywhere」
j「52000」 許可 anywhere k「192.168.10.100」
any 禁止 anywhere anywhere
ところが、問題文を見ると表5には、5ルールあります。
それも、1行目と2行目は、「禁止」を表しているルールですね。
この2つのルールは、協力会社用LANから社員用LAN1、社員用LAN2へのHTTPアクセス(ポート番号:80)を
禁止していますね。
これは、協力会社用LANからのインターネット上全てのWebサーバ(anywhere)へのアクセス(HTTP ポート番号:80)
を許可している為、あえてそれよりも優先度が高いフィルタリングテーブルの上位の位置(1行目、2行目)に、
社員用LAN1、社員用LAN2への禁止のルールを記述しているのですね。
(下図参照)
では、これらを表5の形式にそって、纏めてみましょう。
通信の方向:協力会社用LAN→社内LAN
送信元ポート番号 状態 送信元IPアドレス 送信先IPアドレス
80 禁止 anywhere 192.168.10.1〜192.168.10.254
80 禁止 anywhere 192.168.20.1〜192.168.20.254
80 許可 anywhere h「anywhere」
j「52000」 許可 anywhere k「192.168.10.100」
any 禁止 anywhere anywhere
これが、j,kの解答となります。
『 H19年春PM1 問1 設問2-03 解答・解説 』
posted by sw
| 平成19年春午後1問1解説
■ 午後解答・解説 ソフトウェア開発技術者試験
設問3
本文中の【 l 】に入れる適切な字句を解答群の中から選び,記号で答えよ。
解答群
ア 送信先ボート番号が80,送信元ポート番号が任意で,アクセス要求に対する応答のパケットとして作成された不正パケット
イ 送信先ポート番号が80,送信元ポート番号が任意で,アクセス要求のパケットとして作成された不正パケット
ウ 送信先ポート番号が任意,送信元ポート番号が80,アクセス要求に対する応答のパケットとして作成された不正パケット
エ 送信先ポート番号が任意,送信元ポート番号が80で,アクセス要求のパケットとして作成された不正パケット
『 H19年春PM1 問1 設問3 解答・解説 』
本文中の【 l 】に入れる適切な字句を解答群の中から選び,記号で答えよ。
解答群
ア 送信先ボート番号が80,送信元ポート番号が任意で,アクセス要求に対する応答のパケットとして作成された不正パケット
イ 送信先ポート番号が80,送信元ポート番号が任意で,アクセス要求のパケットとして作成された不正パケット
ウ 送信先ポート番号が任意,送信元ポート番号が80,アクセス要求に対する応答のパケットとして作成された不正パケット
エ 送信先ポート番号が任意,送信元ポート番号が80で,アクセス要求のパケットとして作成された不正パケット
『 H19年春PM1 問1 設問3 解答・解説 』
posted by sw
| 平成19年春午後1問1解説













