2012-03-15 9 views
2

これは本当に愚かな場合には謝罪しますが、私はphpとmysqlで何をやるべきかを知る経験はありません。私はMySQLのDBとグループテーブル内の顧客テーブルを持っている:複数のIDを別のテーブルの1つの列に格納していますか?

顧客 - ID名前メールアドレス電話グループ グループ - ID名の説明

は、だから私は、必要に応じて顧客にグループを割り当てる必要があり、これは、より多くのことができます1つのグループよりも各顧客に適しています。だから顧客1はグループ4,5,6

顧客テーブルのグループ列にどのようにグループを割り当てる必要がありますか。コンマで区切られたグループIDを追加するだけで、個々のIDを取得する必要があるときに爆発を使用するだけですか?

これはまったく正しいアプローチではないかもしれませんが、誰かが私に啓発してください。これを行う正しい方法を知っていただければ幸いです。

答えて

4

複数のIDを1つの列に格納しないでください。これは非正規化であり、データのクエリや変更、パフォーマンスの低下をより困難にします。

代わりに、別のCustomerGroupテーブル(CustomerIDおよびGroupIDカラム)を作成し、顧客/グループの関係ごとに1つの行を作成します。

+0

多くの多くのおかげで、私はすでに、これはクエリが困難になるだろう何らかの方法で知っていたが、私は私が考える可能性が最も簡単な(もっとも怠慢な)方法を探していたと思います。 – mao

+0

今すぐ書いたり、後でそれを維持するのが最も簡単な方法は?私はこのミスを何度も見てきました(コンマで区切られた値をSQLフィールドに入れています)。 – Shinhan

1

グループIDをコンマで区切って追加するだけで、個々のIDを取得する必要があるときに爆発を使用する必要がありますか?

いいえ!そうすると、特定のグループに属するユーザーをすばやく(たとえば)照会することができなくなります。

代わりに、join tableを2つの列で使用します。それぞれの列には、対応する表のforiegnキー制約があります。ここで

group_id customer_id 
4   1 
5   1 
6   1 
+0

リンクをありがとう、よく説明します。私はちょっと混乱している。そのようなテーブルを作成する際にREFERENCES customer(ID)を使用すると、存在しないその結合テーブルに顧客IDを入力しようとするとどうなりますか?エラーが表示されますか? – mao

+0

@mao:はい、参照テーブルに存在しない値を追加しようとすると、エラーが発生します。行は挿入されません。 –

+0

ok優れている、感謝します、 – mao

1

あなたは、この実装方法を示すために、テーブルの例である:

表1の消費者:

id name email 
1 john [email protected] 
2 ray [email protected] 

表2グループ:

id group_name description 
1 music  good music group 
2 programming programmers 

表を3 CONSUMERS_GROUPS

consumer_id group_id 
1    1 
1    2 
2    1 

ここで、表3は、どのグループidに属する消費者IDであるかを示しています。

このタイプの関係は、1人の消費者が多数のグループを持つことができ、多くの関係に1と呼ばれています。あるグループが多くの消費者を持つことができる場所では、リバースも真実かもしれません。その場合には関係が呼ばれ

+0

余分な情報ありがとう、私は今それを得る – mao

関連する問題