Top →
応用情報技術者試験 →
平成21年度秋期試験 午後問題 → 問6
水野のサイト
応用情報技術者試験
●平成21年度秋期試験 午後問題 問6
「旅行業務用データベースの設計」
【解説】
本問は、旅行の予約業務を題材として、リレーショナルデータベースの設計における、正規化の考え方について問うています。
【設問1 解答】
(a、bは順不同)
【設問1 解説】
ツアーテーブルの「日数」と「ツアー名称」は、「出発日」が異なっていても「ツアーコード」が同じならば一定です。
つまり、「日数」と「ツアー名称」は「ツアーコード」だけに関数従属しています。
「顧客を担当する支店は、顧客の郵便番号によって決めて」いますから、
顧客テーブルの「担当支店コード」は「郵便番号」により決まります。
【設問2 解答】
(1) | ツアーテーブルに追加された行がその後変更されることはないから |
(2) | 支店の担当範囲が変更されると、顧客テーブルの該当するすべての行の担当支店コードを修正しなければならない |
(3) | テーブル名 | 列名 |
顧客 | 顧客番号、氏名、住所、郵便番号、電話番号、電子メールアドレス |
担当支店 | 郵便番号、担当支店コード |
(「
顧客番号」と「
郵便番号」には、主キーを示す下線が付くことに注意してください。)
【設問2 解説】
(1) 一般的に、正規形でない場合の最大の問題点は、データの変更が大変であることです。
ツアーテーブルの場合は、問題文の [データベースの運用] の
「ツアーテーブルには、四半期毎にその期のツアー商品を追加する。当該四半期の間にツアーテーブルの内容が変更されることはない」
という記述に注目します。
(2) 顧客テーブルについては、[ツアーに関する業務] 中の
「顧客を担当する支店は、顧客の郵便番号によって決めている」
「担当範囲を随時見直すことにしている」 という点がポイントです。
(3) 顧客テーブルの問題を解消するために、第三正規形に分解します。
顧客番号→郵便番号→担当支店コードという推移的な関数従属があるので、
『顧客テーブル:顧客番号→郵便番号』 と 『担当支店テーブル:郵便番号→担当支店コード』 の二つのテーブルに分解すればよいことになります。
【設問3 解答】
【設問3 解説】
参加者全員の情報をデータベースに格納するのですから、「参加」(または「参加者」)というエンティティ(実体)を加えます。
「全参加者の情報を顧客テーブルに格納」「申込番号ごとに、そのツアーに参加するすべての顧客番号を保持」 とありますから、
「顧客」 および 「申込み」 エンティティから 1対多のリレーションシップ(関連)を設定します。
このページの先頭