2012-03-24 6 views
0

次のデータベースレイアウトを作成し、アプリケーションのコーディングを開始しました。私が読むほど、データベースのレイアウトはおそらく不正確/非効率的/悪い考えであることが分かります。このレイアウトを使用してコードをあまりにも多く開発する前に、私が「正しく」行っていることを確認したいと思います。Mysqlデータベースレイアウト

基本的に私は〜2000店舗のリストと〜50のプロモーションコードのリストを持っています。各コードが各店舗で有効かどうかを保存する必要があります。今は、各店舗番号を列ヘッダーとして保存し、最初の列にはすべての可能なコードがすべて含まれています。これまでのテーブルの一部のHere's an image(1は有効なコードを表し、0はそのストアで無効です)。

プロモーションコードは比較的頻繁に変更されますが、店舗番号は比較的静的で、あまり変更されてはいけません。

これは私がこのように最初からデータベースを作成したことです。私はmysqlの初心者ですから、どんな助けでも大歓迎です!

答えて

2

あなたの店にはテーブルをよく使うべきです。そうしないと1つのストアが追加されたときに新しいフィールドを追加するために多くの時間を費やすだろう、...ここで

は、私がどうなるのかです:

table store will contains your 2000s stores 
    id 
    name 

table code will contains your 50 codes 
    id 
    name 

table code_store will contains only the valid codes ID, and related store_id(no need to save invalid ones I guess) 
    code_id 
    store_id 
+0

助けてくれてありがとう、これは正しいアプローチのように思えます - サムは同じ考えを持っているようです。私はあまりにも遠くになる前に私が尋ねてうれしい! 名前だけを格納するのではなく、各アイテムのIDを格納するのが標準的な方法ですか? – xur17

+1

これは通常のアプローチです。それは、MySQLが文字列よりも整数を比較する方が速いからです。この方法では、データベースの他の部分に影響を与えずに名前を変更できるからです。 – haltabush

2

関係のこのタイプ多対多と呼ばれます。私は通常、このような状況のために3つのテーブルを持っています。ストア用の1つのテーブル、プロモーションコード用のテーブル、ストアIDとプロモーションIDの2つの列を持つ3番目のリレーショナルテーブル。

+0

3番目のリレーショナルテーブルには、「店舗」x「プロモーションコード」IDがありますか?だから私の2000年の店舗の例と50のプロモーションコードの場合、私は10万の行を持つでしょう、正しい? – xur17

+0

各ストアxに割り当てられたプロモーションコードごとに1つの行があります。割り当てられていないストアxプロモーションコードの組み合わせに対しては、行がありません。その後、店舗によってプロモーションコードを照会したり、プロモーションコードで店舗を照会することができます。したがって、すべてのストアにすべてのプロモーションコードがある場合、最大10万行になります。現実的には、お店のおおよその行数に合わせて、2,000店舗×割り当てられたプロモーションコードの平均数があります。 – Sam

関連する問題