0

さて、Table 1(T1)とTable 2(T2)があります

構造:

T1 (main table):
ID (Auto-Increment)
Name
Properties

T2 (properties table):
ID
Property Name

table 12つのエントリがあるとしましょう。Table 24つのプロパティがあります。私がやりたいのは、エントリ1のプロパティをのtable 1プロパティ1、2、3にマップするように設定することtable 2です。表1のエントリ2について、表2のプロパティ2、3、および4にマップします。

たとえば、BALLとCUBEの2つの製品があるとします。それらはにリストされtable 1ます。ここで、table 2使用可能なすべての色を保持するとします。

Table 2:
ID COLOR
1  RED
2  BLUE
3  GREEN
4  YELLOW

Table 1:
ID NAME AVAILABLE_COLORS
1  BALL (TABLE 2 ENTRY 1, TABLE 2 ENTRY 2, TABLE 2 ENTRY 3, in other words RED BLUE GREEN)
2  CUBE (TABLE 2 ENTRY 2, TABLE 2 ENTRY 3, TABLE 2 ENTRY 4, in other words BLUE GREEN YELLOW)

カラーテーブルを指すために利用可能な色を取得するにはどうすればよいですか?基本的に、プロパティを変更した場合(たとえば、赤->黒の色)、すべてのテーブル1エントリに対して自動的に変更されることを確認したいと思います。

通常、1つのアイテムに1つの色を割り当てるだけで、その色を別のアイテムで使用できない場合はtable 2、「所属する」などの列を追加するだけで、複数の色を次のように設定できます。の同じエントリに一致しtable 1ますが、その方法では1つのエントリにのみ色を割り当てることができます...ボールとキューブの両方に赤を割り当てることはできません。

誰かアイデアがありますか?

4

1 に答える 1

0

私が通常行うことは、どの製品がどの色で利用可能かを追跡するための3番目のテーブルを作成することです。カタログテーブルを考えてみましょう。保存されるのは、プライマリIDと製品のIDおよび色のIDだけです。

Table 3:  Catalog
ID ColorsID ProductsID
1 1 1  // row one connects with colors and products and this is a red ball 
2 2 1  // blue ball
3 1 2  // red cube
4 4 2  // yellow cube

このようにすることで、必要な数の属性を製品に接続できます。カタログを追跡するにはより多くの作業が必要ですが、長期的にははるかに簡単になります。製品から使用可能な色を削除し、製品IDと製品名のみをそのテーブルに保存します。説明のように標準的なもので、必ずしも色によって変わるとは限りません。このように、使用可能な色を3から10に変更した場合、追跡するために新しいフィールドを追加する必要はありません。カタログを取得して、製品が現在その色で利用可能かどうかを追跡するアクティブまたは在庫などのフィールドを追加することもできます。カタログには、在庫番号を保存することもできます。色によって価格が異なる場合はどうなりますか?白いボールの方が安いですか?データが正常であるすべての正当な理由。

正規化とは、各テーブルに最小限のフィールドのみがあることを確認し、依存関係を取り除くことです。理論レベルでの正規化の適切な説明については、この受け入れられた回答を参照してください。 MYSQLでの正規化

次に、JOINSを使用してそれらすべてを接続し、カタログテーブルをループできます。

SELECT Colors.ColorID as Color, Products.ProductID as Product
FROM Catalog
    INNER JOIN Colors
        ON Catalog.ColorsID = Colors.ColorID
    INNER JOIN Products 
        ON Catalog.ProductsID = Products.ProductID

JOINSの詳細については、こちらをご覧ください-http ://en.wikipedia.org/wiki/Join_%28SQL%29

于 2013-01-16T18:23:12.560 に答える