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




解き方のヒントを見る
業務ルールとデータの対応を確かめる
データベース設計の問題では、記述された業務上の決まりごとと、データ同士の対応関係が一致しているかを照らし合わせることが基本です。先入観で結論を出さず、根拠となる記述を探し、その記述から何が言えるかを確かめながら検討を進めましょう。
この問題で問われていること
確認すべき観点は一つ、「ある情報が決まると、ほかのどの情報が一つに決まるのか」という対応関係です。これを業務の記述から読み取り、設計や処理の内容と食い違う箇所がないかを確かめることに集中してください。
視点
データ同士の対応関係は、一対一か、一対多か、多対多かといった数の関係として捉えられます。業務の記述に含まれる「必ず」「複数」「一つだけ」などの言葉は、その関係を判断する手掛かりになります。関係の捉え方がずれると、データを扱う場面で整合性が保てなくなる可能性があります。そのため、自分の理解を記述と照合する習慣をつけましょう。
確認ポイント
- 業務の記述の中で、何が何を一つに決めると書かれているかを拾い出したか
- 拾い出した対応関係を、数の関係(一つか複数か)として自分の言葉で言い直せたか
- 判断の根拠とした記述の箇所を、結論ごとに指し示せるか
正解と解説を見る
解説
書籍ECサイトを題材に、非正規な関係の正規化、未完成の関係スキーマの穴埋め、スーパタイプとサブタイプを含むER図の完成、表2の更新処理の補完、出荷関係の不具合の発見と修正を扱う問題です。新品書籍は形態別書籍単位(類別管理)、中古書籍は1冊単位(個別管理)で管理します。この違いと、表1の意味・制約、業務の概要を照らし合わせて設計の根拠を示すことが要点です。
問題の全体像
A社は、新品書籍と中古書籍を販売するECサイトのデータベースを設計しています。書籍は、作品そのものである書籍作品、出版形態ごとの形態別書籍、ECサイトで売る販売書籍の3段階に分かれます。販売書籍は、新品書籍(形態別書籍ごとに1商品で在庫数量を管理)と中古書籍(1冊ごとにステータスを管理)に分類されます。出題趣旨によると、類別管理と個別管理が混在する業務を題材に、業務要件の分析力、関数従属性・正規化による分析力、更新処理の分析力を問う問題です。採点講評では、全体の正答率は高かった一方、設問1(1)の推移的関数従属性、設問2(2)の概念データモデル、設問2(3)イ、設問3(2)で誤りが目立ったと指摘されています。
設問1(1)
関係「書籍作品」には、作品・著者・著者役割の情報が1つにまとめられています。〔書籍の概要〕1.(3)によれば、1つの書籍作品には複数の著者がいて、著者ごとに著者役割が1つ決まります。そのため、行を一意に決めるには{書籍作品ID、 著者ID}の組が必要です。表1では、タイトル・著者名・著者役割名はいずれも同名があり得るとされているので、これらを含む組は候補キーになりません。公式解答例でも、候補キーは{書籍作品ID、 著者ID}だけです。キーの一部だけで決まる属性として「書籍作品ID→タイトル」「著者ID→著者名」があるため、部分関数従属性はありです。著者役割コードは作品と著者の組で決まり、著者役割名はそのコードで決まります。したがって「{書籍作品ID、 著者ID}→著者役割コード→著者役割名」という推移的関数従属性もありです。採点講評では、推移的関数従属性の具体例を誤った解答が散見されたと指摘されています。キーではない属性を経由している形になっているかを必ず確認しましょう。
設問1(2)
全ての属性が単一値なので第1正規形は満たします。一方、(1)で示したとおり部分関数従属性があるので第2正規形ではありません。公式解答例の答えも第1正規形です。第3正規形への分解では、部分関数従属性と推移的関数従属性をそれぞれ別の関係に切り出します。公式解答例では、著者(著者ID、 著者名)、著者役割(著者役割コード、 著者役割名)、書籍作品(書籍作品ID、 タイトル)、書籍作品著者(著者ID、 書籍作品ID、 著者役割コード)の4つに分解しています。書籍作品著者は{著者ID、 書籍作品ID}が主キーで、著者役割コードは著者役割を参照する外部キー(破線の下線)です。主キーと外部キーの下線の付け方まで正確に書くことが求められます。
設問2(1)(a)
〔会員の概要〕(4)に、評価は会員ごと・出品会員ごとに最新のものだけを記録するとあります。つまり、出品会員評価の行は「評価した会員」と「評価された出品会員」の組で一意に決まります。すでに出品会員会員IDがあるので、aには評価した側の会員IDが入ります。公式解答例では「会員ID」に主キーの実線の下線が付いており、{会員ID、 出品会員会員ID}が主キーになります。
設問2(1)(b)
〔書籍の概要〕1.(5)に、カテゴリは階層構造で、上位カテゴリを持つとあります。階層を表すには、カテゴリ自身が上位のカテゴリを参照する属性が必要です。公式解答例では「上位カテゴリコード」とし、同じ関係のカテゴリコードを参照する外部キーとして破線の下線を付けています(自己参照)。
設問2(1)(c)
販売書籍はスーパタイプなので、新品書籍と中古書籍に共通する属性を持たせます。〔書籍の概要〕2.(1)(2)を見ると、新品書籍・中古書籍の両方で記録するのは販売価格です。しかし図2の新品書籍にも中古書籍にも販売価格がありません。そのため、公式解答例では共通属性の「販売価格」をcに入れています。キーではないので下線は付きません。
設問2(1)(d)
〔会員の概要〕(2)(3)によれば、中古書籍は出品会員が出品するものです。そのため、中古書籍1冊ごとにどの出品会員の出品かを記録する必要があります。公式解答例では、出品会員を参照する外部キー「出品会員会員ID」をdとし、破線の下線を付けています。出品会員評価で使われている属性名と同じ名前にそろえる点にも注意しましょう。
設問2(2)
図2の外部キーと表1の制約を基に、リレーションシップを引きます。公式解答例のER図は次のとおりです。①会員をスーパタイプ、出品会員をサブタイプとする関係。②会員→出品会員評価(1対多)と、出品会員→出品会員評価(1対多)。③出品会員→中古書籍(1対多)。④販売書籍をスーパタイプ、中古書籍と新品書籍をサブタイプとする関係。⑤形態別書籍→中古書籍(1対多)。⑥形態別書籍と新品書籍(1対1)。ポイントは⑤⑥です。表1の商品番号の説明により、新品書籍は形態別書籍ごとに1つ、中古書籍は1冊ごとに1つです。このように形態別書籍とのカーディナリティがサブタイプごとに違うため、問題文の指示どおりスーパタイプの販売書籍ではなく、各サブタイプとの間に線を引きます。採点講評ではこの設問の正答率が低く、状況記述・関係スキーマ・属性の意味と制約から業務ルールを読み取ってモデルに反映するよう求めています。
設問2(3)(ア)
表1のステータスの説明には、登録時に「入荷待」、入荷時に「入荷済」、受注時に「引当済」、出荷時に「出荷済」になると書かれています。表2では入荷と出荷のステータス更新はすでに書かれているので、受注時の更新が空欄アに当たります。公式解答例では「ステータス列の値を‘引当済’に更新する」としています。30字以内なので、「ステータス列」と「‘引当済’」の2つを押さえれば十分です。
設問2(3)(イ)
新品書籍の数量を表す列は、実在庫数と受注残数の2つです。表2を見ると、入荷時には実在庫数を加算し、受注時には受注残数を加算しています。受注残数は注文を受けてまだ出荷していない数量なので、出荷すれば減ります。実在庫数も出荷した分だけ減ります。公式解答例では、実在庫数列と受注残数列の両方を、出荷した数量を減算した値に更新するとしています。採点講評によると、イは正答率が低く、入荷業務と受注業務の更新内容を読めば両方の列を減算する必要があると導けるはずだとされています。55字以内で、2つの列名と「出荷数量を減算」の両方を書くことが要点です。
設問3(1)
〔業務の概要〕4.(2)(3)と、図2の出荷・出荷明細を突き合わせます。出荷(出荷番号、 注文番号、 出荷日時)では1つの出荷に注文が1つしか結び付かないため、同じ会員の複数の注文をまとめて出荷することができません。また、出荷明細(出荷番号、 商品番号)には出荷数がないため、在庫不足のときに実在庫数分だけ出荷し、残りを後で出荷する分割出荷を記録できません。公式解答例では、①同一会員の複数回の注文を一つにまとめて出荷すること、②同一会員の新品書籍の複数冊の注文を複数回に分割して出荷すること、の2つを挙げています。各35字以内なので、「複数注文の一括出荷」と「複数冊注文の分割出荷」が分かるように書きます。
設問3(2)
1つの出荷に複数の注文を結び付けられるよう、出荷から注文番号を外し、明細側で注文を特定するようにします。業務の概要4.(2)にあるとおり、まとめた注文の中に同じ新品書籍が含まれることがあるので、出荷番号と商品番号だけでは明細行を一意に決められません。そこで注文番号も主キーに加えます。さらに、分割出荷に対応するため出荷数を追加します。公式解答例は、出荷(出荷番号、 出荷日時)と出荷明細(出荷番号、 商品番号、 注文番号、 出荷数)で、出荷明細の主キーは{出荷番号、 商品番号、 注文番号}です。この主キーの属性は、出荷や注文明細を参照する外部キーの役割も持ちます。採点講評ではこの設問の正答率が低く、属性・主キー・外部キーを過不足なく定義し、業務内容を実現できる構造になっているか確認するよう求めています。
学習のポイント
関数従属性(部分・推移)の正確な識別、サブタイプ別のカーディナリティ、数量列の増減の対応関係、業務要件から主キーを見直す力を重点的に練習する。
出典:独立行政法人 情報処理推進機構(IPA)平成27年度春期 データベーススペシャリスト試験 午後Ⅰ 問1(公式資料:問題冊子(PDF) / 解答例 / 採点講評)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針