2012-03-07 4 views
1

オンラインチェックアウト用のデータベースをプロジェクトとして設計しています。これは私が最初に作ったデータベースなので、簡単に手に入ります。データベース設計ヘルプ - オンラインチェックアウトプロジェクト

とにかく、私はテーブル「アカウント」、「注文」、「ショッピングカート」、「スキュー」を持っています。アカウントには、出荷情報、名前、電話番号、電子メールなどが格納されます。主キーはaccountNumberです。オーダーは請求情報を保持します。外部キーはaccountNumberで、主キーはOrderIDです。ショッピングカートには2つの列(orderIDとskuNumber)しかありません。 OrderIDは外部キーで、skuNumberは主キーです。 SKUには、skuNumber、quanity、price、unit、およびtotalPriceの4つの列があります。 skuNumberは外部キーと主キーです。

私の質問は - 私は現在このセットアップが1つだけのアイテムSKUは一度に注文することができます。これをどうやって違うようにデザインすればいいのですか?私はsku1、sku2などを行うことができることを知っていますが、それはベストプラクティスに反しているようです。

ありがとうございます!

答えて

1

あなたのデータベースには、注文の詳細から(...など、Nameprice)の代わりにあなたは、単にprodctsの詳細を分離する必要がbecouseあなたは、2つの余分なテーブルが必要になりますSKUテーブルの、この設計ではないnormaizedです

製品::

  • Idますので、以下の表を追加する必要があります。
  • Name
  • Price。受注テーブルに

    • OrderID外部キー:次の列が含まれてい
    • ...

    もう1 OrderItemsまたはSKUItems

  • ProductId製品テーブルの外部キー。
  • Quantity
  • ...

私はSKUが何であるかを理解していなかったが、それは製品の種類のいくつかの種類であるならば、あなたは、製品の種類を保持余分なテーブルProductTypes: Id, nameを追加することができ、このテーブルには、例えば、製品の種類が含まれていますProductsテーブルについて

ProductTypeId | Name 
------------------------ 
     1   SKU 

:あなたのような何かを持っていることができるように、あなたは、あなたのProductsProductTypeIdを追加することができますSKUと呼ば

ID | Name | ProductTypeId 
----------------------------- 
1  SKU1  1 
2  SKU2  1 
3  SKU3  1 
+0

OrderItemsテーブルの主キーにはどのようなものがありますか?また、SKUはバーコードのようなものです。 – cmorris1441

+0

@ cmorris1441、まあ、最初に2つのフィールド 'ProductId'と 'OrderId'をプライマリキーとして使用するという2つの選択肢があります、2番目は[Surrogate Key](http://en.wikipedia.org/wiki)です。/Surrogate_key)は 'OrderItemId'のようなものです。 –

+0

OrderItemTableにproductIdというアイディアがありません。製品のタイトル、価格、その他の特性が変更された場合はどうなりますか?OrderItemは、注文を送信した後も過去数ヶ月間生きることができます。誤解を招く注文履歴ページになります –