taka-123 / VeggieShop

0 stars 0 forks source link

課題2 テーブル設計 > 課題1 追加テーブルの設計 #10

Open taka-123 opened 4 years ago

taka-123 commented 4 years ago

・購入履歴画面(「注文番号」「購入日時」「該当の注文の合計金額」) ・購入明細画面(「商品名」「購入時の商品価格」「購入数」「小計」)

を作成するために、 まずそれらの画面を表示するために、必要なテーブルを設計する必要がある。

「lamp_dock」ディレクトリに、『appwnd_schema.sql』ファイルを保存。 同ファイルに、上記テーブルを生成するSQLを書きコミットする。

taka-123 commented 4 years ago

スクリーンショット 2020-04-18 12 16 26

taka-123 commented 4 years ago

「購入履歴画面」表示項目について   ●注文番号    orders > order_id   ●購入日時    orders > created   ●該当の注文の合計金額    ・orders > order_id から、order_details > quantity    ・order_details > item_id から、 items > price    の2項目を抽出し、小計を算出。その小計を合算。              

「購入明細画面」表示項目について   ●商品名    order_details > name   ●購入時の商品価格    order_details > item_id から、 items > price   ●購入数    ・order_details > quantity   ●小計    ・上の、「購入時の商品価格」及び「購入数」から算出

primestyleus commented 4 years ago

@taka-123 正しく正規化されていますね! テーブル一覧をまとめているのもわかりやすいですね。 一点、小計の計算には注意が必要です。一般的にECサイトでは商品価格(販売価格)が変動します。そのため商品に紐付いている現在の価格から小計を求めると実際の購入価格とずれる可能性があります。そのため購入時の商品価格または小計を履歴として保存するのが一般的です

taka-123 commented 4 years ago

@primestyleus

上で、表示項目は対応できると思いますので、 添付画像の通り、 ◆order_id, user_id, createdをカラムに持つ、ordersテーブル ◆order_id, item_id, quantityをカラムに持つ、order_detailsテーブル の2つを作成したいと考えています。

ただ、これは、 「item_idが同じ商品の価格は、一定で変更されない」(「購入した過去時点と、その履歴を確認する現在時点で、価格が変更されているということは起こり得ない」)という条件下でないと、成立しないように感じます。 教科書に「購入時の商品価格」と記されているので、ここが懸念点です。

taka-123 commented 4 years ago

@primestyleus すみません。時間差で、先生のお返事と内容が被ってしまいました。

購入時の商品価格または小計を履歴として保存するのが一般的です

購入価格を履歴として保存すれば良いんですね!ありがとうございます。

例えば、 ・案の、「order_detailsテーブルに、更に[purchase_price]というカラムも追加して生成」 ・今後の課題で、その[purchase_price]カラムへ、購入時に購入価格を保存するよう設定 というような方法で良いでしょうか?

primestyleus commented 4 years ago

@taka-123 はい、purchase_priceを追加していただく形で問題ありません!

taka-123 commented 4 years ago

@primestyleus スクリーンショット 2020-04-18 19 02 37 これでコミットしてもよろしですか?

sample.sqlのように以下のようなコードも書かないといけませんか? スクリーンショット 2020-04-18 16 08 41

primestyleus commented 4 years ago

@taka-123 こちらで大丈夫です。SET SQL_MODEなどの記述は不要です!