# データベース設計演習

本演習では，関係データベースを適切に設計するために
1. 実体関連モデリングの作成
2. 関数従属性に基づく関係スキーマの分解

に取り組みます．
演習課題は大問2題です（大問1つにつき小問が2題）．

```{important}
### レポート課題2（データベース設計）
本ページで出題されているすべての課題を解いてください．
解答期日，解答方法等については下記を参照してください．

- 設問数：4
- 成績評価における本課題の割合：20％（20点）
- 評価方法：提出物をもとに担当教員が採点します．配点は各設問に記載しています
- 解答〆切り：2026年7月26日 （日）23:59
- 解答作成方法
	* Teams経由で配布したWordファイルを使って解答を作成してください
	* 解答提出時にはWordファイルを`PDFファイル`に変換してください．またファイル名は`学籍番号.pdf`としてください
- 提出方法：Teams経由
- 備考
	* 読めないものは採点しません
	* 指定されたフォーマット（PDFファイル）以外で提出された場合は採点対象としません
	* 〆切り以降に提出された解答は，本人の責めに帰さない限り，別途受理します．
```


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

> 利用者はMONACA IDが付与されたMONACAカードを持っている．
> データベースにはMONACAカードIDにひもづけて，年齢，性別の他，学生や小児，高齢者，一般といったカード種別をあらわす情報が記録されている．
> カード種別は乗車料金の決定に利用される．
>
> 利用者の乗降車駅はすべてMONACA鉄道が管轄する駅である．
> 駅情報はデータベースに登録されている．駅情報として駅ID，駅長名，路線名をもつ．
> なお，駅によっては複数の路線が通っている場合がある．
>
> 乗車料金は料金クラスとMONACAカードのカード種別によって決まる．
> 料金クラスは乗車駅と降車駅の組み合わせによって決まり，乗降車駅間の距離に応じてF1，F2，F3，F4の4クラスに分けられている．
>
> 乗車駅の改札でMONACAカードをかざすと，カード内に一時的に乗車駅情報と入場日時が記録される．
> 降車駅の改札で再びMONACAカードをかざすと，データベースにMONACAカードID，乗車駅，入場日時，降車駅，出場日時の情報が記録される．

上記を踏まえて，以下の設問に答えてください．

### Q1-1（配点8）
MONACA鉄道のデータベースで管理しようとするデータおよびデータ間の関係性を把握するための実体関連図を作成してください．

### Q1-2（配点4）
Q1-1で作成した実体関連図を関係スキーマに変換してください．


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

- 図書館（の名前）
- 住所
- 管轄区
- [ISBN](https://ja.wikipedia.org/wiki/ISBN)
- 書籍タイトル
- 出版社
- 著者
- 冊数
- ユーザ
- 電話番号
- 貸出日
- 返却日

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

- $FD_1: 図書館 \to 住所$
- $FD_2: 住所 \to 管轄区$
- $FD_3: ユーザ \to 電話番号$
- $FD_4: ISBN \to 書籍タイトル, 出版社, 著者$
- $FD_5: ISBN, 図書館 \to 冊数$
- $FD_6: ISBN, 図書館, ユーザ \to 貸出日, 返却日$

上記を踏まえて，以下の設問に答えてください．

### Q2-1（配点3）
上記関数従属性をFDダイアグラムで表現してください．

### Q2-2（配点5）
関数従属性をふまえて，上記12の属性をもつ関係スキーマをいくつかの関係スキーマに情報無損失分解し，第3正規形またはボイス・コッド正規形を導出してください．
解答の際には，以下に留意してください．

- 分解の過程が分かるようにすること
- ある関係スキーマを情報無損失分解をした際には，どの関数従属性を用いたかを明記すること
- 分解して得られた関係スキーマは$R(\underline{A_1}, A_2, ...)$のような形式で，関係名，キー，属性を記すこと（関係名は適当に定めよ）
- 途中過程のものも含め，得られた関係スキーマがどの正規形（1NF，2NF，3NF，or BCNF）であるかを明記すること




