web-dev-qa-db-ja.com

ショッピングカートアプリケーションのデータベースを設計しますか?

特にWebアプリケーション用に、データベース/データモデル/スキーマを最初から設計したことはありません。最近の就職の面接で、ショッピングカートアプリケーションのデータベースを「設計」するように依頼されました。現在、製品と注文の情報を保存および処理する必要があるバックエンドを備えたモバイルショッピングアプリケーション(小売、phonegapを使用)に取り組んでいます。この問題の規模は非常に大きいので、どこから始めればよいのかわかりません。私はいくつかのアドバイスを期待していました-

  1. このような問題(ショッピングカートアプリケーションDB)にはどのように対処すればよいですか?どこから始めればいいですか?
  2. 避けるべき一般的な間違い/落とし穴はありますか?
  3. このようなDBを設計する際に、どのような最適化/効率パラダイムを念頭に置く必要がありますか?
  4. 問題スペース内のエンティティ(製品、注文など)を特定するにはどうすればよいですか?それらの間の関係をどのように導き出す必要がありますか?
  5. インタビュアーがそのような質問をするとき、彼は正確に何を探していますか?私が言うべき/すべきでないことはありますか?

私もそれを明確にする必要があります-

  1. はい、私は初心者です。私の動機は、データベース設計を学び、今後の就職の面接に備えることです。個々の概念を詳細に説明しているDBMSの本を読んだことがありますが、それらを組み合わせてデータベースの設計を開始する方法がわかりません。
  2. 私はデータベース設計に関する他のスレッドを見てきました。著者はすでに問題を分解する方法についてある程度の知識を持っている傾向があります。その背後にある方法論を理解したいと思います。
  3. 外部のリソースへのリンク、コメント、提案、そして私を正しい方向に導くものは何でもありがたいです。このスレッドが私自身や他の人の学習体験として役立つことを願っています。
12
Quest Monger

データベースには5つのテーブルがあります。

[〜#〜] category [〜#〜]このテーブルには、ストアの商品カテゴリとカテゴリ階層に関する情報が格納されます。
このテーブルの親フィールドには、親カテゴリのIDが格納されます。

[〜#〜] product [〜#〜]ストアのすべての商品がこのテーブルに保存されます。このテーブルには、製品が属するカテゴリのIDを識別する外部キーcategoryIDがあります。

[〜#〜] order [〜#〜]このテーブルには、ストアの訪問者によるすべての注文に関する情報が格納されます。

ORDERED_SHOPPING_CARTテーブルはPRODUCTテーブルおよびORDERテーブルと緊密に接続されています。顧客の注文内容に関する情報を保存します。

SPECIAL_OFFERテーブルには、ホームページに特別オファーとして表示される製品のリストが含まれています

19
Devjosh

簡単な答えは、私がこの問題に取り組む方法です。まず、オープンソースまたは無料のWebベースのショッピングカートがたくさんあります。これは、データベースを取得してデータベースを設定し、それらが何をしたかをよく調べることができることを意味します。

なぜ彼らはそれをしたのかなどの質問を自問してください。なんでいいの?どのような欠点がありますか?どうすれば違うのですか?どうして?

データベースを視覚化できるデータベース設計ツールを調達しようと思います。 (ビジュアルスタジオのデータベースデザイナーのように、またはpgsqlデータベースを実行するMicroOlapのデータベースデザイナーがいます)

次に、データベースに何が必要かを考える必要があります。お客様は何をするつもりですか?製品を購入する!したがって、製品テーブルが必要です。ルート全体を下ることなく、ポイントを見ることができます。何が必要か想像して、基本的にそのためのテーブルを作成します。

テーブル内のフィールドに複数のオプションがある場合は、リレーションを含む別のテーブルを作成します。したがって、製品テーブルがあり、ステータスフィールドがある場合。複数のステータスを持つことができます。 (在庫切れ、数に限りがある、大きなアイテム、高価ななど)これらのフィールドをハードコーディングする代わりに、テーブルを作成して、ユーザーがテーブルにアイテムを追加できるようにします。次に、製品テーブルにフィールドstatus_idを追加し、それをステータステーブルにリンクします

多く-多くの関係は知っておくと便利なことです。 (私はこれに自分で足りませんでした。)コンポーネントと製品のテーブルがあると言います。製品は多くのコンポーネントで構成でき、コンポーネントは多くの製品に割り当てることができます。メディエーターテーブルを作成します。 prodcompのようなもの(そしてこれにはid、prod_id、comp_id、qtyneededのようなフィールドがあります)。

学ぶ 正しくインデックスを付ける

データベースがどのように機能するかをしっかりと理解するまで、データベースを作成しないでください。これにより、後で再作成する時間を節約できます。

これにはもっと多くのことがあるかもしれませんが、私はあなたに良いスタートを切ったことを願っています。

12
Daniel Casserly