13. データベース設計演習#

本演習では,関係データベースを適切に設計するために

  1. 実体関連モデリングの作成

  2. 関数従属性に基づく関係スキーマの分解

に取り組む. 演習課題は大問2題である(大問1つにつき小問が2題).

Important

レポート課題2(データベース設計)

本ページで出題されているすべての課題を解きなさい. 解答期日,解答方法等については下記を参照すること.

  • 設問数:4

  • 成績評価における本課題の割合:20%(20点)

  • 評価方法:提出物をもとに担当教員が採点します.配点は各設問に記載しています

  • 解答〆切り:2024年7月28日 (日)23:59

  • 解答作成方法

    • コチラのURLから入手できるWordテンプレートreport-template.docxを使用すること(図はPowerPointやdrawioで作成したものをWordに貼り付けるのが楽かと思います)

    • 解答提出時にはWordファイルをPDFファイルに変換すること.またファイル名は学籍番号.pdfとすること

  • 提出方法:こちら(要大学Microsoft 365アカウント)経由

  • 備考

    • 読めないものは採点しません

    • 指定されたフォーマット(PDFファイル)以外で提出された場合は採点対象としません

    • 〆切り以降に提出された解答は,本人の責めに帰さない限り,別途受理します.

13.1. Q1#

架空企業であるMONACA鉄道では,このたび交通系ICカードと関係データベースシステムを導入し,利用者の乗降車履歴を記録することになった. 以下は,システム設計における想定である.

利用者はMONACA IDが付与されたMONACAカードを持っている. データベースにはMONACAカードIDにひもづけて,年齢,性別の他,学生や小児,高齢者,一般といったカード種別をあらわす情報が記録されている. カード種別は乗車料金の決定に利用される.

利用者の乗降車駅はすべてMONACA鉄道が管轄する駅である. 駅情報はデータベースに登録されている.駅情報として駅ID,駅長名,路線名をもつ. なお,駅によっては複数の路線が通っている場合がある.

乗車料金は料金クラスとMONACAカードのカード種別によって決まる. 料金クラスは乗車駅と降車駅の組み合わせによって決まり,乗降車駅間の距離に応じてF1,F2,F3,F4の4クラスに分けられている.

乗車駅の改札でMONACAカードをかざすと,カード内に一時的に乗車駅情報と入場日時が記録される. 降車駅の改札で再びMONACAカードをかざすと,データベースにMONACAカードID,乗車駅,入場日時,降車駅,出場日時の情報が記録される.

上記を踏まえて,以下の設問に答えよ.

13.1.1. Q1-1(配点8)#

MONACA鉄道のデータベースで管理しようとするデータおよびデータ間の関係性を把握するための実体関連図を作成せよ.

13.1.2. Q1-2(配点4)#

Q1-1で作成した実体関連図を関係スキーマに変換せよ.

13.2. Q2#

県内に複数ある図書館における蔵書貸出管理を包括的に行う関係データベースを設計したい. このデータベースでは,以下の12の属性をもつとする.

  • 図書館(の名前)

  • 住所

  • 管轄区

  • ISBN

  • 書籍タイトル

  • 出版社

  • 著者

  • 冊数

  • ユーザ

  • 電話番号

  • 貸出日

  • 返却日

また,以下の関数従属性が成立するとする. なお,取り扱う書籍はすべて単著(書籍につき著者は1人)であり,ユーザは同じ本を借りることはないと仮定する.

  • \(FD_1: 図書館 \to 住所\)

  • \(FD_2: 住所 \to 管轄区\)

  • \(FD_3: ユーザ \to 電話番号\)

  • \(FD_4: ISBN \to 書籍タイトル, 出版社, 著者\)

  • \(FD_5: ISBN, 図書館 \to 冊数\)

  • \(FD_6: ISBN, 図書館, ユーザ \to 貸出日, 返却日\)

上記を踏まえて,以下の設問に答えよ.

13.2.1. Q2-1(配点3)#

上記関数従属性をFDダイアグラムで表現せよ.

13.2.2. Q2-2(配点5)#

関数従属性をふまえて,上記12の属性をもつ関係スキーマをいくつかの関係スキーマに情報無損失分解し,第3正規形またはボイス・コッド正規形を導出せよ. 解答の際には,以下に留意すること.

  • 分解の過程が分かるようにすること

  • ある関係スキーマを情報無損失分解をした際には,どの関数従属性を用いたかを明記すること

  • 分解して得られた関係スキーマは\(R(\underline{A_1}, A_2, ...)\)のような形式で,関係名,キー,属性を記すこと(関係名は適当に定めよ)

  • 途中過程のものも含め,得られた関係スキーマがどの正規形(1NF,2NF,3NF,or BCNF)であるかを明記すること