DBデータベーススペシャリスト試験 午後Ⅰ
平成24年度春期 データベーススペシャリスト 午後Ⅰ 問2
事例を読んで設問の答えを考えてから、解説のポイントとIPA公式の解答例・採点講評で確認しましょう。
問題








解き方のヒントを見る
業務ルールから依存関係を読み取る
テーブル設計や移行を考える際は、業務上の決まりごとを根拠に、どの項目がどの項目によって一意に決まるのかを一つずつ確かめることが大切です。思い込みや一般常識ではなく、記述された条件だけで判断しましょう。
この問題で問われていること
問われている箇所がどの業務ルールの記述と対応しているかを特定し、その記述から読み取れる項目間の対応関係(一対一か一対多かなど)と、値を一意に決める項目の組合せを自分の言葉で整理することが検討の出発点です。
視点
データベース設計の多くの論点は、「ある項目の値が決まると、別の項目の値が決まるか」という依存関係の把握に行き着きます。この関係は業務の決まりごとによって変わるため、同じ名前の項目でも状況次第で扱いが異なります。業務の記述を根拠に関係を一つずつ確かめる習慣をつけると、構造の妥当性、モデルの拡張、データの移し替えといった異なる論点も、同じ視点で落ち着いて検討できます。
確認ポイント
- 問われている箇所に関係する業務ルールの記述を探し、該当する文言に印を付けたか
- その記述から、どの項目の値が決まると別の項目の値が決まるのかを、根拠となる文言と対応させて書き出したか
- 一般的な常識や他の事例での経験ではなく、記述された条件だけに基づいて判断しているかを見直したか
正解と解説を見る
解説
複数のWebサイトの会員情報を統合するための新データベースについて、テーブルのキー設定、掲示板テーブルの正規化とメッセージの親子関係、有償サービスとメルマガの追加、旧データの移行手順を問う問題です。本文の識別子に関する記述と表1~3のデータの違いを正確に読み取ることが得点の鍵になります。
問題の全体像
D社はWebサイトごとに別々だった会員登録を一つにまとめるため、会員管理システムの新データベースを設計します。問題は三つの段階で構成されています。一つ目は、J君が作った図3のテーブル構造に対するK部長の指摘(キーの記入漏れ、掲示板テーブルの正規化不足、返信元を管理できないこと)への対応です。二つ目は、事業部門から追加された要望(有償サービスとメルマガ)への対応です。三つ目は、WebサイトA~Cの会員データを移行する手順の検討です。公式解答例の出題趣旨では、業務要件を分析する能力、テーブルを設計する能力、データ移行に関する問題を分析する能力を問うとしています。採点講評では、全体として正答率は低かったと述べています。
設問1(1)(a)
本文(4)に、会員はログイン後に任意のコンテンツをお気に入りとして登録でき、お気に入りは登録した日時の順に表示されるとあります。お気に入りは「どの会員が」「どのコンテンツを」登録したかを表すので、会員を特定する列が必要です。公式解答例では、aを会員番号とし、主キーの一部として下線を付けています。aとbは順不同です。
設問1(1)(b)
(a)と同じく、登録の対象となるコンテンツを特定する列が必要です。本文(4)に、コンテンツはコンテンツIDで識別されるとあります。公式解答例では、bをコンテンツIDとし、主キーの一部として下線を付けています。お気に入りは会員とコンテンツの組で1行と決まるので、{会員番号、 コンテンツID}が主キーになります。
設問1(1)(c)
本文(4)に「お気に入りは、登録した日時の順に表示される」とあるので、表示順を決めるための登録日時を保持する必要があります。公式解答例ではcを登録日時としています。これは主キーではない属性です。
設問1(1)(サービス)
本文(3)に、サービスはWebサイトごとに複数提供され、WebサイトIDとサービスIDの組合せによって識別されるとあります。公式解答例では、サービス(WebサイトID、 サービスID、 サービス名)のうち、WebサイトIDとサービスIDの二つに主キーの下線を付けています。サービスIDだけではWebサイトをまたいで一意にならない点に注意が必要です。
設問1(1)(コンテンツ)
本文(4)に、コンテンツはコンテンツIDによって識別され、サービスを構成する要素だとあります。公式解答例では、コンテンツIDを主キーとし、WebサイトIDとサービスIDに外部キーの破線を付けています。この二つを組み合わせることで、サービステーブルの複合主キーを参照します。
設問1(1)(利用権限)
本文(5)に、権限区分はコンテンツIDと会員区分の組合せで決まるとあります。そのため、この組合せが主キーとなり、権限区分はそれに従属する属性です。公式解答例では、利用権限(コンテンツID、 会員区分、 権限区分)のうち、コンテンツIDと会員区分に主キーの下線を付けています。
設問1(2)(正規形)
図3の掲示板テーブルは、掲示板の情報(タイトル、開設日時、説明文、開設者)とメッセージの情報を1行にまとめています。メッセージは掲示板単位に連番で識別されるので、候補キーは{WebサイトID、 掲示板ID、 メッセージ番号}です。すべての列は単一の値なので第1正規形は満たしますが、キーの一部だけで決まる属性があるため、第2正規形は満たしません。公式解答例では第1正規形としています。
設問1(2)(判別根拠)
根拠として示すべき要素は二つあります。①すべての属性が単一の値をとること(第1正規形であること)。②タイトル、説明文などの掲示板の属性が、候補キーの一部であるWebサイトIDと掲示板IDだけで決まる、つまり部分関数従属していること(第2正規形でないこと)。公式解答例もこの二点を示しています。75字以内で書くには、属性名とキーの一部を具体的に挙げることがポイントです。
設問1(3)
指摘②を解消するため、部分関数従属している掲示板の属性を別のテーブルに分けます。指摘③を解消するため、返信元のメッセージを示す列を追加します。公式解答例では次の二つのテーブルに分解しています。掲示板(WebサイトID、 掲示板ID、 タイトル、 掲示板開設日時、 説明文、 掲示板開設者会員番号)では、WebサイトIDと掲示板IDが主キーで、開設者会員番号が外部キーです。メッセージ(WebサイトID、 掲示板ID、 メッセージ番号、 メッセージ本文、 メッセージ投稿者会員番号、 メッセージ投稿日時、 親メッセージ番号)では、3列の組が主キーで、投稿者会員番号と親メッセージ番号が外部キーです。親メッセージ番号は同じ掲示板内のメッセージを参照するので、図2のようなツリー表示ができます。採点講評では、主キーをメッセージ番号だけにした答案や、返信先を管理する列がない答案が散見されたと指摘しています。
設問2(1)
要望(ア)では、会員の区分に有償会員を追加し、サービスを無償サービスと有償サービスに区分し、購入サービスを定義するとしています。公式解答例の概念データモデルは次の構成です。会員をスーパータイプとし、期限付き会員・一般会員・有償会員をサブタイプとして汎化の記号でつなぎます。サービスをスーパータイプとし、無償サービス・有償サービスをサブタイプとします。図にすでにある矢印は、有償サービスから購入サービスへの1対多の関係です。さらに、有償会員から購入サービスへの1対多の関係を記入します。採点講評では、正答率は高かったものの、有償会員から購入サービスへの1対多のリレーションシップが書かれていない答案もあったと指摘しています。
設問2(2)
業務要件を一文ずつテーブルに対応させます。公式解答例では次の三つです。①メルマガはWebサイトIDとメルマガIDの組合せで識別し、メルマガ名を管理するので、メルマガ(WebサイトID、 メルマガID、 メルマガ名)。②会員は複数のメルマガを購読でき、購読開始日をメルマガごとに管理するので、購読メルマガ(WebサイトID、 メルマガID、 会員番号、 購読開始日)で、主キーは前の3列。③バックナンバは配信日時ごとにメルマガ本文を管理するので、バックナンバ(WebサイトID、 メルマガID、 配信日時、 メルマガ本文)で、主キーは前の3列。列名は、問題の指示どおり本文中の用語を使います。
設問3(1)(B)
表2のWebサイトBでは、氏名が「齊藤△太郎」のように姓と名を空白でつないだ一つの項目になっています。一方、新データベースの一般会員テーブルでは姓と名が別の列です。公式解答例では「氏名を姓と名に分離する。」としています。20字以内で「何を」「どう分ける」かを示します。
設問3(1)(C)
表3のWebサイトCには都道府県の列がなく、住所が「東京都文京区…」のように都道府県から始まっています。新データベースには都道府県の列があるため、分割が必要です。公式解答例では「住所に含まれる都道府県を分離する。」としています。
設問3(2)
手順2では、WebサイトAとBの会員番号をそのまま使うとしています。しかし、表1の注によるとAの番号は「連番7桁+入会年の西暦下2桁」の9桁、表2の注によるとBの番号は「000000000」~「999999999」の連番です。両者は同じ9桁の値の範囲に収まるため、同じ番号が重複するおそれがあります。公式解答例では、AとBで採番されている番号の範囲が重複するので、データを投入するときに一意制約違反が発生するとしています。60字以内の答案では、原因(番号の範囲が重複する)と問題(投入時の一意制約違反)の両方を書きます。
設問3(3)(①)
手順3の例(フリガナをひらがなに変換する)以外で、表1を基準にしたときの表記の違いを探します。表2では「齊藤」「澤田」、表1では「斉藤」「沢田」と、旧字体と新字体が混在しています。公式解答例では、一つ目として「姓と名に含まれる旧字体の漢字を新字体に変更する。」を挙げています。
設問3(3)(②)
住所の表記にもばらつきがあります。表1は「1-1」のように算用数字とハイフンで書かれていますが、表2・表3には「1丁目1番地」「二丁目28番9号」のような表記があります。また、表3の注4によると、埼玉県大宮市は合併により現在はさいたま市大宮区です。公式解答例では二つ目として、「住所の丁目以降の表記を、算用数字とハイフンに変換する。」と「市町村合併などで変更された住所を現在のものに修正する。」を示しています。後者は、作業内容にある「過去のデータを最新データに変換する」に当たります。
設問3(4)
〔データの移行〕では「各Webサイトの重複した会員データを統合することを視野に入れ」とあり、手順5では「手順4で整理した会員に対して必要に応じて確認を取り」とあります。表1~3には、同じ斉藤太郎さんや高橋次郎さんと思われるデータが複数のサイトにあります。公式解答例では、d を「複数のWebサイトを利用している、同一人物であると考えられる会員の会員データを特定する。」としています。採点講評では正答率が低かったとし、手順1~3で標準化した上で同一人物の会員データを特定する必要があることに気付いてほしいと述べています。
学習のポイント
主キーと外部キーを本文から導く力、部分関数従属の見抜き方、自己参照による階層の表現、スーパータイプ・サブタイプの描き方、データ移行での分割・統合と標準化、名寄せの考え方を重点的に学びましょう。
出典:独立行政法人 情報処理推進機構(IPA)平成24年度春期 データベーススペシャリスト試験 午後Ⅰ 問2(公式資料:問題冊子(PDF) / 解答例 / 採点講評)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針