質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

2回答

1897閲覧

購入前の商品と購入済みの商品のテーブルをわけるかどうか

chankane

総合スコア139

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2018/08/22 11:06

お世話になっております.今回はデータベース設計について質問させてください.

疑問に思っていること

タイトルの通りです.
現在,商品というテーブルがあります.こちらを,購入前の商品購入済みの商品という2つのテーブルにわけるかどうかで悩んでいます.
ちなみに購入済みの商品購入前の商品のカラムにbuyer_idという項目が追加されただけのデータです.

テーブルをわけない

=購入前のテーブルは項目buyer_idがNULL

  • メリット

構造がシンプル

  • デメリット

購入履歴を検索するのにわざわざデカイテーブルから検索する

テーブルをわける

=購入前のテーブルは項目buyer_idが存在しない

  • メリット

商品の一覧を検索する際に無駄な行を検索せずに済む.(購入履歴一覧も同じことが言える)

  • デメリット

特に思いつきませんでした.しいて言うなら View を担当している人たちに2つのテーブルの違いを明確に説明することでしょうか...

その他考えたこと

購入済みの商品は,購入者と売却者以外参照できない仕様という前提のもとに話を進めていますが,購入済み商品も参照できる(購入者と売却者以外)のが普通という暗黙の了解的なものがあるのなら今回の疑問は解決です.実際はどうなのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

どういう需要(SQLを書いてみる)があるかを見極めま極めましょう。
購入前と購入後の情報を同時に取得したいって要求が多ければ、テーブルを分けているとUNIONを使わなければならないのでパフォーマンスが悪いので止めた方が良いです。

投稿2018/08/22 20:31

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chankane

2018/08/23 03:33

なるほど、こうだという絶対的な決まりはなく、仕様によって変わるものなんですね(@_@) 〉購入前と購入後の情報を同時に取得したいって要求が多ければ 一つもありません。ですので今回のようにテーブルを分けるのはアイデアとしてはありなのでしょうか?
Orlofsky

2018/08/23 12:25

どういう使われ方をするかはなるべく事前に調査します。差支えない範囲で具体的な内容を提示できると適切なコメントも付き易いでしょう。 扱う商品が一点ものなら売却済み情報を持てば一つのテーブルで済ませられます。売ったけどクレームなどで返品された時の処理も考えておかなければなりません。ある程度時間が経過(クーリングオフ期間)したら別テーブル(売却済み)に移すことも考えられます。 同じ商品を仕入れて在庫を管理し、出庫して在庫が少なくなったら発注するなら商品の在庫マスターと入出庫履歴テーブルが必要になるでしょう。
chankane

2018/08/23 14:36

ちょうどメルカリのようなものを創造していただければと思います(それを手本に作成しているので)ですので一品ものですね(^^♪ >売ったけどクレームなどで返品された時の処理も考えておかなければなりません。 このことは考えていませんでした. >ある程度時間が経過(クーリングオフ期間)したら別テーブル(売却済み)に移すことも考えられます。 調べてみましたが,メルカリは期間ではなく”受け取り評価”というシステムを採用しているらしいです. よってそれが行われて初めて購入処理を実装されるので自分もそのように実装します. まとめます. 全く同じカラムを持つテーブル”購入前の商品”と”購入済みの商品”を作成する ”購入前の商品”の buyer_id が NULL(=購入されていない(商品一覧に表示する)) ”購入前の商品”の buyer_id が NULLでない(=注文されている(商品一覧に表示しない)) 取引が成立した場合,”購入済みの商品”に商品データを移動する(”購入前の商品”のデータは削除) 取引が成立しなかった場合,”購入前の商品”の buyer_id を NULL に戻す. こんな感じで大丈夫ですか?
Orlofsky

2018/08/23 22:08

情報は小出しにするのはよろしくありません。 メルカリの類であれば、バイヤーマスタとしてbuyer_id がprimary key, 商品マスタは buyer_id, product_id がprimary key になります。 購入者マスタはseller_id, 購入情報テーブルは seller_id, buyer_id, product_id(, and 購入したdatetime) で ”評価” も管理するでしょう。 購入者は商品マスターでsold以外の情報をいろいろなキーワードで検索できる、評価の高い順も含めた機能が必要です。購入すると購入情報テーブルにデータがINSERTされ、商品マスタにはsold情報がUPDATEされます。 購入者は商品が到着後壊れていた場合はクレームとして評価を下げ、当然返品。何日以内に評価をないと自動的に決済される、、、、クレジットカードなどの決済システムも必要になります。 購入価格の何パーセントが利益に。 バイヤーは中古パソコンと称して模造品を送ったら出品禁止。別名でバイヤー登録させないような対策も必要です。 購入者のクレーマー対策にも人員が必要、、、 バイヤーが同じ商品を複数出品し個別に売る場合は商品マスタ以外に更に枝番を持った別テーブルも必要かと。 システム要件をまとめた上でテーブル設計やSQLの熟練者を雇った方が良いでしょう。
chankane

2018/08/25 07:33 編集

遅くなりました.コメントしてくださった内容を参考にします.いくつか不明な点はありますが,質問内容が変わってくるのでこの投稿はクローズとします. >購入者は商品マスターでsold以外の情報をいろいろなキーワードで検索できる テーブルは分けずにいこうと思います.お手数おかけいたしました.ありがとうございました!(^^)! また,情報は小出しにしないようすることを今後心がけます(人''▽`)
Orlofsky

2018/08/25 15:48

ブラックリスト関係の情報はずっと保存するとして、すべての取引情報を永久に保存することはできませんから、何年とかある程度の期間を経過したデータはDELETEする機能は必要です。
chankane

2018/08/26 00:13

たまり続ける一方ではないんですね!勉強不足を痛感いたしました...余談ですが勝手にフォローさせていただきました.ありがとうございます.
guest

0

購入前の商品はカートのようなイメージでしょうか。
それなら分けたほうが良いですね。
購入後テーブルは基本消さない事を考えると、どんどん肥大化するテーブルに高頻度の更新を掛ける事になりますから。

投稿2018/08/23 23:56

tekka

総合スコア514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chankane

2018/08/25 07:29

下の方と意見が逆ですね(;^ω^) >購入後テーブルは基本消さない事を考えると、どんどん肥大化するテーブルに高頻度の更新を掛ける事になりますから。 私も最初はそう思いました.が,より具体的な回答をしてくださった Orlofsky 様に今回は従います. お手数をおかけして申し訳ありません.ありがとうございました(人''▽`)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問