課題2 テーブル設計
セキュリティ課題に続いて、次はテーブル設計に関する課題に取り組んでみましょう。
課題の概要
今回のテーブル設計課題の目的は、
- 購入履歴画面
- 購入明細画面
の作成です。
課題の要件
それぞれの画面の要件は以下の通りです。
購入履歴画面
- 現在ログイン中のユーザーの購入履歴を表形式で一覧表示する。
- ただし、管理者ユーザーについては全ての購入履歴を表形式で一覧表示する。
- 表示項目は「注文番号」「購入日時」「該当の注文の合計金額」とする。
- 注文番号は、購入完了のたびにオートインクリメントで付番されるものとする。
- 各行の末尾に「購入明細表示」のボタンを配置する。
- ソート順は注文の新着順とする。
購入明細画面
- 該当の注文番号の購入明細を表形式で一覧表示する。
- 表示項目は「商品名」「購入時の商品価格」 「購入数」「小計」とする。
- 画面上部に該当の「注文番号」「購入日時」「合計金額」を表示する。
- ログインしているユーザー以外の注文については、管理者以外は閲覧できないものとする。
課題1・追加テーブルの設計
この要件を満たす機能を作成するために、必要なテーブルを設計しましょう。
- 購入履歴画面を表示するためにはどのようなテーブルが必要でしょうか?
- 購入明細画面を表示するためにはどのようなテーブルが必要でしょうか。
- 正規化の観点から適切にテーブルを分割して、不要なカラムを含めないようにしましょう。
ヒント: まずは画面ごとに表示する項目全てが含まれたテーブルを作成してみて、第1正規化から第3正規化までを順番に適用してみると良いでしょう。ただし、既に存在しているusers, items, cartsテーブルを忘れないようにしましょう。
課題1の提出物について
この課題については、新規追加するテーブルを生成するSQLを「append_schema.sql」としてlamp_dockディレクトリに保存しておくものとします。sqlファイルをコミットしたら、講師にプルリクエストを送信しましょう。
課題2・追加テーブルへのデータ保存
購入履歴画面、購入明細画面を出力するために必要なデータを適切な箇所で保存しましょう。
購入履歴・購入明細が保存される処理はどのコントローラで行われるのが適切なのかをコードリーディングで判断しましょう。
ヒント:適切にトランザクション処理を利用しましょう。
課題3・追加画面の作成
課題2で保存されたレコードを利用して、購入履歴画面と購入明細画面を作成してください。