0

私はウェブサイトを作成する過程にあり、その分野での経験があまりないため、データベーススキーマに関するアドバイスをしたいと思います。MySQL製品販売スキーム

2つの製品(product1とproduct2)が販売されていたサイトがありました。

ユーザーがいずれかの製品を購入すると、ユーザーは自分のアカウントにアクセスするためのキーを持つユーザーアカウントを取得します。ユーザーはアカウントページから製品をダウンロードできます。その後、そのユーザーは後で残りの製品を購入することができ、製品は自分のアカウントに追加され、最初の製品を購入するときに与えられたキーを使用してproduct1とproduct2の両方をダウンロードすることができます。

支払い情報(支払い方法、トランザクションID、タイムスタンプなど)も保存されます。

私は現在、私のスキーマがなるように計画している:

enter image description here

私はそれをやっている方法が最適ではなく、それを整理するためのより良い方法があることを感じています。アドバイスはありますか?

は、事前に役立つと感謝することができます願っています:)

+1

その図にはどのデータベース設計ソフトウェアを使用しましたか? – dcolumbus

+0

http://ondras.zarovi.cz/sql/demo/は私が使ったものです。 –

+0

ニース、ありがとう。それは素晴らしいね! – dcolumbus

答えて

0

あなたのスキーマが格納されるオブジェクトを識別し始めることをお勧めです。これは、候補コンポーネントがあるかもしれないように見えます

  • ユーザー
  • (ユーザデータ)
  • 製品
  • 購入

これらのエンティティは、あなたがから始めるのテーブルになります。関係を適切に追加する。

あなたのスキーマ内のエンティティを特定することで、うまくいけばテーブルを外側に広げることができます。たとえば、製品を追加するたびにスキーマ全体を修正する必要はありません。同様に、毎回新しいテーブルを追加することは望ましくありません。

これらを特定したら、normal formに入れてください。一般的には第3正規形が推奨されます。おそらく、スキーマに示されているように、購入エンティティの下にある冗長なデータが多くあり、それを別のテーブルに分けると、より管理しやすいスキーマになります。

これにより、後で同期が外れる可能性のあるテーブル内の重複したデータが排除され、一部のデータがどこにないのかを特定するのに役立ちます。

+0

こんにちは、お返事ありがとうございます。スキーマを改善しようとしましたが、どう思いますか? http://i.imgur.com/SmXuJ.png –

+0

これはずっとメンテナンス可能です。ユーザーデータがまったく必要ない場合があります。 –

+0

ご協力いただきありがとうございますが、私は元の投稿を中止した別の問題があります。私はすべての注文、注文とプラットフォームのために支払われた合計金額を保つために、この情報をウェブページに表示したかったとします。購入が完了するたびに別のテーブル 'stats'を作成してそのテーブルに書き込むのですか、ページが読み込まれるたびにプラットフォームXの注文数とプラットフォームYの数()をカウントする方が良いでしょうか?私はおそらく各注文の統計表のプラットフォームXに+1するほうがよいと考えています。ありがとう –

関連する問題