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

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

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

問題

問2 データベースの設計に関する次の記述を読んで,設問1~3に答えよ。 B社は,流通系のクレジットカード会社である。B社では,新たに開発するシステムに合わせて,現行業務の追加・変更を予定している。開発プロジェクトではシステム部のC君がデータベースの設計を担当することになった。 〔現行業務の概要〕 1. 会員登録 (1) 会員 会員には,一意な会員番号を付与する。会員は会員区分の値の設定によって,本会員と家族会員に区別する。さらに,本会員は職業区分の値の設定によって,有職(会社勤務又は自営業),無職(年金受給,不動産収入など),及び学生に区別する。 一方,家族会員は,本会員の家族にカードを発行する場合に登録する。家族会員には,利用明細の表示順を表す家族番号を付与する。 表1に,本会員・家族会員登録時の各設定項目を示す。 表1 本会員・家族会員登録時の各設定項目 (2) 契約 本会員とクレジットカード契約を結ぶ。契約単位に一意な契約番号を付与し,支払銀行・支店・決済口座番号を設定する。 (3) クレジットカードの発行 本会員及び家族会員に対してクレジットカードを発行する。本会員に発行するカードを本会員カード,家族会員に発行するカードを家族カードと呼ぶ。クレジットカードごとに一意なカード番号を付与する。 2. クレジットカードの利用 (1) クレジットカードの利用形態 クレジットカードの利用形態には,ショッピング(物品購入のこと,以下,SHという)とキャッシング(現金借入れのこと,以下,CAという)があり,利用区分に区分値を設定して管理する。支払方法には,SHでは,1回払い,2回払い,ボーナス1回払い,及びリボルビング(以下,リボという)払いが,CAでは,1回払いとリボ払いがあり,支払区分に区分値を設定して管理する。表2に,利用区分・支払区分別の支払方法を示す。 表2 利用区分・支払区分別の支払方法 (2) クレジット残高とクレジット枠 引き落としが完了していない利用金額をクレジット残高(以下,CR残高という)という。CR残高は,CR総残高,利用区分別にSH残高とCA残高,さらに支払区分別にSH1回払い残高などで管理する。ただし,SH2回払いとボーナス1回払いとは合計残高で管理する。CR残高の上限値として,クレジット枠(以下,CR枠という)を設定する。CR枠とCR残高は契約単位に管理する。表3にCR残高ごとのCR枠を示す。 表3 CR残高ごとのCR枠の設定例 (3) クレジットカード利用時の確認 クレジットカード利用時には,有効年月,暗証番号などのほかに次のことを確認する。 ① 利用区分と支払区分が,表2で示した選択可能な組合せであること(選択不可の場合は“区分エラー”とする) ② 今回の利用金額が,CR枠からCR残高を差し引いた範囲内であること(範囲を超えた場合は“CR枠エラー”とする) 3. 利用代金明細書の作成 契約単位に,本会員と家族会員を合わせて月ごとに利用代金明細書を作成し,請求する。利用代金明細書の例を図1に示す。 (1) 今回請求情報 契約者の住所,氏名,支払年月日,今回請求金額合計などを示す。 (2) 利用明細 前月の利用明細と当月の請求対象となる前々月以前の利用明細について,利用区分別に利用明細番号を利用年月日順に付与し,利用明細番号順に示す。 なお,利用区分と利用年月日が等しい複数の利用明細については,会員が別の場合は本会員,家族番号の小さい家族会員の順に,同じ会員の場合はカードごと利用ごとに付番される利用履歴番号の順に利用明細番号を付与する。 図1 利用代金明細書の例 (3) ショッピングリボ払い及びキャッシング支払の明細 利用残高(前回支払後残高+今回利用金額),今回請求金額(元金+(利息,手数料)),支払後残高などを支払区分ごとに示す。 (4) 契約内容 リボ払い元金支払定額,CA手数料などの契約情報を示す。 〔テーブル設計〕 C君は,現行データベースのテーブル構造を図2のように整理した。 図2 C君が整理したテーブル構造(一部未記入) 〔現行業務に対する追加・変更〕 B社では,現行業務について,次のような追加・変更を計画している。 (1) 会員登録方法の改善 同一人が重複して家族会員として登録されることがある。例えば,図3に示すように,共稼ぎ夫婦がそれぞれに本会員カードを保有し,互いに相手に対しての家族カードを保有していたり,子供が両親の家族カードを保有していたりする場合がある。 図3 本会員と家族会員のカード登録例 この点は,会員の利用状況分析では問題があるという判断があり,同一人に対しては,一つの会員レコードだけを対応させることにした。これに伴って,本会員かつ家族会員という会員レコードが存在する。そのため“会員”テーブルを次のように変更する。 ・本会員か家族会員かを排他的に識別していた会員区分を削除する。 ・当該会員が,本会員であることを表す本会員フラグ及び家族会員であることを表す家族会員フラグを追加する。 新たに開発するシステムでは,既存会員についてデータ移行時に家族会員の統合を行うことにする。また,新規カード発行に伴う会員登録時には既存会員との照合チェックを行い,既存会員であった場合には新たに会員を登録せずにカードの追加発行を行う。 (2) 分割払の追加 分割払について,6回,12回,24回などの多様な支払方法を選べるようにする。また,請求時の利用明細欄に,今回の請求が何回目の支払になるのかを回数で示すことにする。ただし,現在のSH2回払いについては変更せず,3回以上の分割払について,新たに支払区分を一つだけ追加するものとする。 解答に当たっては,巻頭の表記ルールに従うこと。 なお,テーブル構造の表記は,“関係データベースのテーブル(表)構造の表記ルール”を用いること。さらに,主キー及び外部キーを明記せよ。 設問1 図2について,(1)~(3)に答えよ。 (1) “請求”テーブル中の【a】に適切な字句を入れて,テーブルを完成させよ。ただし,図1中の項目のうち,ほかの項目から導出可能な項目は列としてもたないものとする。また,本文中と同じ意味を表す列名は,本文中の用語を用いること。 (2) “契約”テーブルの会員番号と,“カード”テーブルの会員番号は同じ列名であるが,取り得る値の意味が異なる。その違いを60字以内で述べよ。 (3) “請求利用明細”テーブルについて候補キーを二つ挙げよ。 設問2 現行業務におけるテーブル内の項目の制約について,(1),(2)に答えよ。 (1) “会員”テーブルの項目は,NULL不可となることが静的に決まらないので,列ごとにNOT NULL制約を定義できない。そこで,C君はNULL不可であることを動的に管理する“項目チェック”テーブルを図4のように定義した。図4中の【b】に適切な字句を入れて,テーブルを完成させよ。ただし,“会員”テーブルの列又は職業区分の区分値が追加された場合にも,“項目チェック”テーブルの行の追加だけで対応できるものとする。また,本文中と同じ意味を表す列名は,本文中の用語を用いること。 図4 C君が設計したテーブル構造(未完成) (2) クレジットカード利用時に,利用形態別に利用金額をチェックし,正常終了とエラーを判定する次の決定表中の,【c】~【e】に適切な字句を入れて表を完成させよ。 決定表 注 〔条件判定〕数値:区分値,Y:条件を満たす,N:条件を満たさない,-:判定に関係しない 〔結果〕X:該当する,-:該当しない 網掛け部分は表示していない。 設問3 〔現行業務に対する追加・変更〕について,(1),(2)に答えよ。ただし,設問2で問う内容は考慮しないものとする。 (1) 図2のテーブル構造に,会員登録方法の改善策を施したとしても,ほかにもまだ不具合がある。 (a) 不具合のあるテーブル名を一つ挙げ,不具合の内容を35字以内で述べよ。 (b) 新たにテーブルを作成せずに不具合を解決するために,変更すべきテーブル名,列名を挙げよ。また,当該列の変更操作を,削除又は追加のいずれかで答えよ。ただし,会員区分の削除,本会員フラグ及び家族会員フラグの追加については除くものとする。 (2) 分割払の追加のために,“カード利用履歴”テーブルと“請求利用明細”テーブルに追加すべき列名をそれぞれ答えよ。
表1 本会員・家族会員登録時の各設定項目。本会員と家族会員について,会員区分や職業区分,住所,生年月日など各登録項目の設定可否とNULL不可項目を示す表。
表1 本会員・家族会員登録時の各設定項目。本会員と家族会員について,会員区分や職業区分,住所,生年月日など各登録項目の設定可否とNULL不可項目を示す表。
表2 利用区分・支払区分別の支払方法。SHとCAの利用区分ごとに,1回払い,2回払い,ボーナス1回払い,リボ払いの支払方法と選択不可の組合せを示す表。注記も含む。
表2 利用区分・支払区分別の支払方法。SHとCAの利用区分ごとに,1回払い,2回払い,ボーナス1回払い,リボ払いの支払方法と選択不可の組合せを示す表。注記も含む。
表3 CR残高ごとのCR枠の設定例。CR総残高,SH残高,CA残高などの残高区分について,利用区分・支払区分,対応するCR枠名と上限値を示す表。
表3 CR残高ごとのCR枠の設定例。CR総残高,SH残高,CA残高などの残高区分について,利用区分・支払区分,対応するCR枠名と上限値を示す表。
図1 利用代金明細書の例。クレジットカード利用代金明細書の例。請求情報,ショッピング・キャッシング明細,支払区分別残高,契約内容を示す。
図1 利用代金明細書の例。クレジットカード利用代金明細書の例。請求情報,ショッピング・キャッシング明細,支払区分別残高,契約内容を示す。
図2 C君が整理したテーブル構造(一部未記入)。加盟店,銀行支店,職業,会員,契約,カード,カード利用履歴,請求,請求利用明細の関係データベース表構造を列挙し,請求の一部を空欄にした図。
図2 C君が整理したテーブル構造(一部未記入)。加盟店,銀行支店,職業,会員,契約,カード,カード利用履歴,請求,請求利用明細の関係データベース表構造を列挙し,請求の一部を空欄にした図。
図3 本会員と家族会員のカード登録例。夫婦が互いに本会員カードと家族カードを持ち,子供が両親の家族カードを持つ登録関係を,本会員カード・家族カードの凡例とともに示す図。
図3 本会員と家族会員のカード登録例。夫婦が互いに本会員カードと家族カードを持ち,子供が両親の家族カードを持つ登録関係を,本会員カード・家族カードの凡例とともに示す図。
図4 C君が設計したテーブル構造(未完成)。NULL不可項目を動的に管理する項目チェック表の構造を示し,列定義部分を空欄にした未完成図。
図4 C君が設計したテーブル構造(未完成)。NULL不可項目を動的に管理する項目チェック表の構造を示し,列定義部分を空欄にした未完成図。
決定表。利用区分と支払区分ごとに利用金額・各CR枠残高の条件判定と,正常終了,CR枠エラー,区分エラーの結果を整理した二段構成の決定表。下部注記と網掛け部分の説明を含む。
決定表。利用区分と支払区分ごとに利用金額・各CR枠残高の条件判定と,正常終了,CR枠エラー,区分エラーの結果を整理した二段構成の決定表。下部注記と網掛け部分の説明を含む。
解き方のヒントを見る

変更前後の整合性を追う視点

表の設計や制約の変更を読むときは、個々の用語を暗記するより、変更によってデータの意味と整合性を保つ仕組みがどう影響を受けるかを順に確認し、全体のつながりを整理しましょう。

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

特に、変更の対象と、それが既存データ・関連する表・今後の登録条件に及ぼす影響を区別し、変更後も同じ目的と整合性を保てるかという観点だけに集中して考えてください。

視点

設計変更を検討するときは、変更箇所だけを切り離して見るのではなく、データの意味、他の情報とのつながり、利用時の前提が変わらないかを順に整理します。

確認ポイント

  • 変更によって、既に保存されている情報の意味や扱いに不整合が生じないか
  • 関連する情報とのつながりが、変更後も同じ目的に沿って保たれるか
  • 新しく登録・更新する場面で、意図しない状態を防ぐ前提が崩れていないか
正解と解説を見る

解説

クレジットカード業務の会員登録、契約、カード利用、請求を題材に、業務ルールを関係データベースへ反映する方法を問う問題です。既存設計のキーや列の意味を読み取り、制約を決定表で整理し、制度変更によるテーブル改修まで考えます。

問題の全体像

B社のクレジットカード業務では、会員、契約、カード、カード利用履歴、請求、請求利用明細を関係付けて管理しています。設問1は図2のテーブル構造から導出項目、列の意味、候補キーを読み取る問題です。設問2は会員種別や職業に応じたNULL不可項目を表で管理する方法と、利用区分・支払区分ごとの利用可能額の判定を問います。設問3は、家族カードの複数登録や分割払いの追加という業務変更を、既存テーブルの列変更だけで表現する問題です。出題趣旨・採点講評では、業務ルールや制約をデータベース設計へ反映し、変更による影響を分析する力が重視されています。

設問1(1)

図1の請求情報と、図2の請求テーブルを対応させます。請求金額合計などは請求利用明細から集計でき、契約者の住所や氏名も他のテーブルから求められるため、列として持ちません。一方、図1の支払明細には、ショッピングリボとキャッシングリボについて前回支払後残高が必要です。したがって、公式解答例では「SHリボ前回支払後残高,CAリボ前回支払後残高」としています。

設問1(2)

同じ「会員番号」という列名でも、参照している業務上の対象を区別します。契約は本会員と結ぶため、契約テーブルの会員番号は本会員の番号に限られます。一方、カードは本会員カードにも家族カードにも発行されるため、カードテーブルの会員番号は本会員・家族会員を含む全会員の番号です。公式解答例の趣旨を60字以内で簡潔に対比します。

設問1(3)

請求利用明細は、契約単位の請求に含まれる利用明細を管理します。本文では利用区分ごとに利用明細番号を付けるため、「契約番号,支払年月日,利用区分,利用明細番号」で一意に識別できます。また、カード利用履歴側の「カード番号,利用履歴番号」と請求の支払年月日を組み合わせても一意になります。公式解答例はこの二つを候補キーとして挙げています。

設問2(1)

NULL不可かどうかは、会員区分や職業区分によって項目ごとに変わります。例えば、家族会員だけに家族番号や続柄が必要で、本会員の職業によって勤務先や学校名などの必須項目が変わります。そのため、会員列ごとに固定のNOT NULL制約を置かず、どの条件でどの列を必須とするかを行として管理します。公式解答例では、行を識別する「一連番号」と、対象を表す「会員列名称,会員区分,職業区分」を示しています。列や職業区分の追加にも、項目チェック表の行追加で対応できます。

設問2(2)(c)

決定表のcの行は、利用区分2、つまりキャッシングの場合にだけ判定されています。本文では利用金額が、利用区分に対応するCR枠からCR残高を引いた範囲内であることを確認します。したがって、CAについての利用可能額である「CA枠-CA残高」となります。

設問2(2)(d)

決定表のdの行は、ショッピングの支払区分2及び3で判定されています。表3では、SHの2回払いとボーナス1回払いを合計してS2残高として管理し、対応する上限をS2枠としています。よって、dは「S2枠-S2残高」です。

設問2(2)(e)

決定表のeの行は、利用区分2かつ支払区分1、すなわちキャッシングの1回払いに対応します。表3ではこの残高をC1残高、上限をC1枠として管理しています。したがって、eは「C1枠-C1残高」です。決定表のY・Nの並びを、表2・表3の管理単位と照合することがポイントです。

設問3(1)(a)

会員登録方法を改善しても、会員テーブルには家族番号と続柄が一組しかありません。本文の図3のように、同一人物が複数の本会員に対する家族カードを持つ場合、一つの会員レコードに複数の家族関係を全て登録できません。公式解答例では、会員テーブルについて「複数の家族会員がいたとき,家族番号と続柄を全員分登録できない」としています。35字以内では、テーブル名とこの不具合の因果関係を簡潔に書きます。

設問3(1)(b)

家族番号と続柄は、会員本人に固定された属性ではなく、どの本会員に対して発行された家族カードかによって決まる情報です。したがって、会員テーブルの「家族番号,続柄」を削除し、カードテーブルに同じ列を追加します。これにより、同一会員が複数の家族カードを持つ場合でも、カードごとの家族関係を保持できます。公式解答例もこの変更を示しています。

設問3(2)

分割払いでは、元の利用に設定された分割回数と、各請求時に今回が何回目かを区別して管理する必要があります。そのため、カード利用履歴には利用時点の契約条件として「分割回数」を追加します。請求利用明細には請求ごとの「今回回数」と、その回数分として請求する「今回請求金額」を追加します。公式解答例ではこの三つの列を挙げています。

学習のポイント

業務上の事実を、データの管理単位・キー・制約・変更影響へ変換する力を養います。

出典:独立行政法人 情報処理推進機構(IPA)平成22年度春期 データベーススペシャリスト試験 午後Ⅰ 問2(公式資料:問題冊子(PDF) / 解答例 / 採点講評)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針