2012-02-03 8 views
11

データベース/データモデル/スキーマを最初から、特にウェブアプリケーション用に設計したことはありません。 最近のインタビューの中には、ショッピングカートアプリケーション用のデータベースをデザインするように求められていたものもあります。今私は、製品や注文情報を保存して処理する必要があるバックエンドを備えたモバイルショッピングアプリケーション(小売り、電話帳を使用)に取り組んでいます。この問題の規模は非常に大きいので、どこから始めるべきかはわかりません。私はいくつかのアドバイスを期待していました -ショッピングカートアプリケーションのデータベースを設計しますか?

  1. 私はこのような問題(ショッピングカートアプリケーションDB)にどのようにアプローチすべきですか?私はどこから始めるべきですか?
  2. 私が避けるべき一般的な間違いや落とし穴はありますか?
  3. このようなDBを設計する際には、どのような最適化/効率パラダイムを覚えておく必要がありますか?
  4. 問題の領域(製品、注文など)のエンティティを特定するにはどうすればよいですか?どのように私はそれらの間の関係を派生する必要がありますか?
  5. 面接者がこのような質問をすると、彼は正確に何を探していますか?私は何か言いたいことはありませんか?

また、私はそれを明確にすべき -

  1. はい、私はnoobのだ、と私の動機は、データベース設計を学び、今後の就職の面接のための準備をしています。私は個々の概念を詳細に記述したDBMSの本を読んだことがありますが、それらをまとめてデータベースの設計を始める手がかりはありません。
  2. 私はデータベース設計上、他のスレッドを見ました。著者たちはすでに、問題をどのように解消するかに関する知識を持っている傾向があります。私はそれを行う背後にある方法論を理解したいと思います。
  3. 外部のリソース、コメント、提案など、私を正しい軌道に乗せるものへのリンクは非常に高く評価されています。私はこのスレッドが自分自身や他の人の学習体験として役立つことを願っています。
+1

あなたの応答と正規化についての情報をいただき、ありがとうございます。 初心者として、私はこのことを私の視点から明確にしなければなりません。 ショッピングカートや銀行と同じくらい複雑なドメイン内のDBデザインの複雑さを初心者が理解することは非常に難しいです。これは、DB設計の基礎を理解することとはあまり関係がなく、ドメインを理解することと、良い解を導き出すためにドメインを分割する方法とが関係しています。上記の答えは、設計の基礎とドメインの知識の両方の問題に答えるための簡潔なソリューションを提供しています。 これまでの常識はあなたを抱くことしかできません。 –

答えて

14

は、データベース内の5つのテーブルが存在する場合があります。
このテーブルの親フィールドには親カテゴリのIDが格納されます。

PRODUCTこのストアのすべての商品はこの表に保管されています。この表には、製品が属するカテゴリーのIDを識別する外部キーcategoryIDがあります。

ORDERこの表には、店舗の訪問者が行ったすべての注文に関する情報が格納されています。

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

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

+0

私はそれを主張していませんが、あなたの問題をより視覚的に視覚化するのに役立ち、ショッピングカートアプリケーションの最大要件を含む/カバーしていることがわかりました。私はまだショッピングデータベースを構築していないので、これも私にとって興味のある質問です – Devjosh

+1

これは私のデザインスキルの作業を開始するのに良いポイントです。 +1インターネット。 –

+0

それはあなたのおかげで嬉しいです。すべて最高 – Devjosh

11

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

なぜ彼らはそれをやったのですか?なぜそれは良いですか?どんな弱点がありますか?どうやって違うの?どうして?

データベースを視覚化できるデータベース設計ツールを調達しようとします。 (Visual Studioのデータベースデザイナーのようなものか、pgsqlデータベースを持つMicroOlapからのものがあります)

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

テーブル内のフィールドに複数のオプションがある場合は、リレーションを持つ別のテーブルを作成します。したがって、商品テーブルがあり、ステータスフィールドがある場合。あなたは複数のステータスを持つことができます。これらのフィールドをハードコーディングするのではなく、テーブルを作成してユーザーがテーブルに項目を追加できるようにする(たとえば、品切れ、制限付き番号、大きなアイテム、高価な)製品表でstatus_idフィールドを追加してステータステーブルにリンクします

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

index correctlyを学んでください。

どのように動作するかを確かめるまでデータベースを作成しないでください。後で再作成する時間を節約できます。

これ以上はあるかもしれませんが、私はあなたに良いスタートを与えてくれることを願っています。お店やカテゴリ階層の製品カテゴリについては、この表の情報が格納され

CATEGORY