DBデータベーススペシャリスト試験 午後Ⅰ

平成27年度春期 データベーススペシャリスト 午後Ⅰ 問1

事例を読んで設問の答えを考えてから、解説のポイントとIPA公式の解答例・採点講評で確認しましょう。

問題

問1 データベースの設計に関する次の記述を読んで、設問1~3に答えよ。 A社は、書籍の販売を主力事業とする会社である。A社では現在、インターネット上で書籍を販売するECサイトの開設を計画しており、システム部のB君がデータベースの設計を行っている。 〔書籍の概要〕 1.書籍 書籍は、単行本・新書・文庫本など、様々な書籍の形態で出版されている。 (1) 書籍作品とは、書籍の形態にかかわらない作品そのものであり、書籍のタイトルなどの属性をもつ。 (2) 形態別書籍とは、書籍作品を様々な書籍の形態で出版したものであり、出版社名、ページ数などの属性をもつ。 (3) 書籍作品には1人又は複数の著者が存在し、著者ごとに、主要な著者役割が一つ定められている。 (4) 著者役割とは、著者が著作に関わった際の役割である。例えば、「著作者」、「共著者」、「原著者」、「翻訳者」、「監修者」などである。 (5) カテゴリとは、書籍作品の分類である。カテゴリは階層構造となっており、例えば、「情報技術」と「データベース」というカテゴリでは、「データベース」の上位カテゴリが「情報技術」である。書籍作品は、一つ又は複数のカテゴリに属する。 2.販売書籍 書籍のうち、A社のECサイトで購入できる書籍を販売書籍と呼ぶ。販売書籍は、新品書籍、中古書籍に分類される。 (1) 新品書籍は、形態別書籍ごとに、販売価格、実在庫数、受注残数を記録する。 (2) 中古書籍は、1冊ごとに、販売価格、品質ランク、品質コメント、ステータスを記録する。 (3) 新品書籍が、絶版、重版待ち又は出版社の在庫僅少の場合は、実在庫数を上回る注文を受け付けない。その他の場合は、実在庫数にかかわらず、注文を受け付ける。 〔会員の概要〕 A社のECサイトを利用して販売書籍を注文するためには、氏名、住所、メールアドレスなどの情報を登録して会員になる必要がある。 (1) 会員は、1回の注文で、新品書籍・中古書籍にかかわらず、複数種類の販売書籍を注文できる。また、新品書籍については、それぞれ複数冊注文できる。 (2) 出品会員とは、A社のECサイト上で中古書籍を販売できる会員である。会員は、仮想店舗名などの情報を追加登録すれば、出品会員になれる。 (3) 出品会員が、ECサイト上で中古書籍を出品するには、販売価格、品質ランク、品質コメントを登録し、中古書籍の現物をA社宛てに送付する。 (4) 会員は、購入した中古書籍が、ECサイトに表示されていた品質ランク、品質コメントどおりであったかなど、出品会員を評価できる。会員による評価は、会員ごと出品会員ごとに最新の評価だけを記録する。 〔業務の概要〕 1.登録業務 書籍作品、形態別書籍、販売書籍の情報を登録する。 2.入荷業務 販売書籍の入荷を記録し、所定の保管場所に格納する。 3.受注業務 ECサイトで会員からの注文を受け付け、在庫の引当てを行う。注文日時、注文した書籍のタイトルなどを記載した電子メールを、会員宛てに送付する。 4.出荷業務 (1) 受注した販売書籍を保管場所から取り出し、梱包して出荷する。出荷日時、出荷した書籍のタイトルなどを記載した電子メールを、会員宛てに送付する。 (2) 出荷時点で同一会員から複数回の注文があった場合、一つにまとめて出荷する。同一会員からの複数回の注文に、同じ新品書籍が含まれる場合がある。 (3) 出荷時点で出荷対象の新品書籍の在庫が不足していた場合、実在庫数分だけ出荷し、残りは入荷後に出荷する。 〔データモデルの設計〕 B君は、概念データモデル(図1)及び関係スキーマ(図2)の設計を行った。 図1 B君が設計した概念データモデル(未完成) 図2 B君が設計した関係スキーマ(未完成) 図2の関係スキーマの主な属性とその意味・制約を、表1に示す。 表1 主な属性とその意味・制約 〔データベースの更新処理〕 B君は、図2の関係スキーマをテーブルとして実装し、入荷業務、受注業務、出荷業務で行うデータベース更新処理を整理し、表2にまとめた。 表2 データベース更新処理 解答に当たっては、巻頭の表記ルールに従うこと。 設問1 図2の関係“書籍作品”について、(1)、(2)に答えよ。 (1) 関係“書籍作品”の候補キーを全て答えよ。また、部分関数従属性、推移的関数従属性の有無を、“あり”又は“なし”で答えよ。“あり”の場合は、その関数従属性の具体例を一つ、次の表記法に従って示せ。 関数従属性 表記法 部分関数従属性 属性1→属性2 推移的関数従属性 属性1→属性2→属性3 なお、候補キー及び表記法に示されている属性1、属性2が複数の属性から構成される場合は、{ }でくくること。 (2) 関係“書籍作品”は、第1正規形、第2正規形、第3正規形のうち、どこまで正規化されているか答えよ。また、第3正規形でない場合は、第3正規形に分解し、主キー及び外部キーを明記した関係スキーマを示せ。 設問2 図1、2及び表2について、(1)~(3)に答えよ。 (1) 図2中のa~dに入れる適切な属性名を答えよ。また、主キー又は外部キーを構成する属性の場合、主キーを表す実線の下線、又は外部キーを表す破線の下線を付けること。 (2) 図1のエンティティタイプ間のリレーションシップを全て記入せよ。ただし、エンティティタイプ間の対応関係にゼロを含むか否かの表記は不要である。 なお、識別可能なサブタイプが存在する場合、他のエンティティタイプとのリレーションシップは、カーディナリティの違いを含めてスーパタイプ又はサブタイプのいずれか適切な方との間に記述せよ。また、図に表示されていないエンティティタイプは考慮しなくてよい。 (3) 表2中のア、イに入れる適切な更新処理の内容を、列名及び具体的な更新内容を含め、アは30字以内、イは55字以内で述べよ。 設問3 関係“出荷”、“出荷明細”について、(1)、(2)に答えよ。 (1) 図2中の関係“出荷”、“出荷明細”には、出荷業務の業務内容を実現できない不具合が二つある。不具合によって実現できない二つの業務内容を、それぞれ35字以内で述べよ。 (2) (1)の二つの不具合を解消した関係“出荷”、“出荷明細”の関係スキーマを示せ。 なお、関係スキーマは、第3正規形の条件を満たし、主キー及び外部キーを明記すること。また、主キーを構成する属性の属性名は、図2中の属性名を用いること。
図1 B君が設計した概念データモデル(未完成)。会員、出品会員、出品会員評価、販売書籍、形態別書籍、中古書籍、新品書籍のエンティティタイプを示す未完成の概念データモデル。
図1 B君が設計した概念データモデル(未完成)。会員、出品会員、出品会員評価、販売書籍、形態別書籍、中古書籍、新品書籍のエンティティタイプを示す未完成の概念データモデル。
図2 B君が設計した関係スキーマ(未完成)。会員や書籍作品、販売書籍、注文、出荷などの関係スキーマを列挙した未完成の関係スキーマ図。
図2 B君が設計した関係スキーマ(未完成)。会員や書籍作品、販売書籍、注文、出荷などの関係スキーマを列挙した未完成の関係スキーマ図。
表1 主な属性とその意味・制約。会員ID、書籍作品ID、商品番号、在庫数、ステータスなどの属性名と、それぞれの意味や制約をまとめた表。
表1 主な属性とその意味・制約。会員ID、書籍作品ID、商品番号、在庫数、ステータスなどの属性名と、それぞれの意味や制約をまとめた表。
表2 データベース更新処理。入荷、受注、出荷の各業務について、新品書籍・中古書籍に対するデータベース更新処理を示す表。
表2 データベース更新処理。入荷、受注、出荷の各業務について、新品書籍・中古書籍に対するデータベース更新処理を示す表。
解き方のヒントを見る

業務ルールとデータの対応を確かめる

データベース設計の問題では、記述された業務上の決まりごとと、データ同士の対応関係が一致しているかを照らし合わせることが基本です。先入観で結論を出さず、根拠となる記述を探し、その記述から何が言えるかを確かめながら検討を進めましょう。

この問題で問われていること

確認すべき観点は一つ、「ある情報が決まると、ほかのどの情報が一つに決まるのか」という対応関係です。これを業務の記述から読み取り、設計や処理の内容と食い違う箇所がないかを確かめることに集中してください。

視点

データ同士の対応関係は、一対一か、一対多か、多対多かといった数の関係として捉えられます。業務の記述に含まれる「必ず」「複数」「一つだけ」などの言葉は、その関係を判断する手掛かりになります。関係の捉え方がずれると、データを扱う場面で整合性が保てなくなる可能性があります。そのため、自分の理解を記述と照合する習慣をつけましょう。

確認ポイント

  • 業務の記述の中で、何が何を一つに決めると書かれているかを拾い出したか
  • 拾い出した対応関係を、数の関係(一つか複数か)として自分の言葉で言い直せたか
  • 判断の根拠とした記述の箇所を、結論ごとに指し示せるか
正解と解説を見る

解説

書籍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による補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針