2009-03-17 8 views
1

私は2つのテーブル "場所"と "クラス"を持つデータベースを持っています。私は自分のデータベーステーブルで何らかの親/子の状況を設定するのに慣れていますが、これは私にループを投げかけています。MySQLデータベースの関係を設定する方法

この関係は、あなたの期待どおりに機能します。 「場所」には複数の「クラス」があります。しかし、いくつかの "クラス"は複数の "場所"にあります。だから私はこれをどのように設定するのですか?関係を処理するために作成された3番目のテーブルが必要ですか?

私は(重要場合)のMySQL/PHP

答えて

1

あなたが参加するテーブルが必要になります。

tbl_location 
ID: int 
Name: Varchar(20) 

tbl_class 
ID: int 
Name: Varchar(20) 


tbl_classlocation 
ID: int 
locationID: int 
classID: int 

これらの線に沿って何か、本質的classlocationテーブルは、他の2つを結合(locationIdとのclassIDの両方が場所とクラスのテーブルから外部キーです)

3

はい、あなたは第三のテーブルを必要とするを使用しています。これはmany-to-many relationshipと呼ばれます。テーブルには、プライマリキー、ロケーションIDカラム、クラスIDカラムがあります(お勧めします)。

2
locations   location_classes   classes 

+----+-------+ +-------------+----------+ +----+-------+ 
| id | title | | location_id | class_id | | id | title | 
+----+-------+ +-------------+----------+ +----+-------+ 
| 1 | foo | |   1 |  1 | | 1 | clas1 | 
| 2 | bar | |   3 |  1 | | 2 | clas2 | 
| 3 | test | |   1 |  2 | +----+-------+ 
+----+-------+ |   2 |  2 | 
        |   3 |  2 | 
        +-------------+----------+ 
3

はい、これは多対多の関係であるため、3番目の表が必要です。

--------   ----------------- 
|Class |  | ClassLocation |  ------------ 
|--------|  |-----------------|  | Location | 
|Id  | <---- |ClassId   |  |------------| 
|Name |  |LocationId  | ----> |Id   | 
|...  |  -----------------  |Name  | 
--------         | ...  | 
              ------------ 

リレーションの方向が重要な場合は、さらに2つのテーブルが必要になることさえあります。 「クラスが場所に属している」という意味が「場所がクラスに属している」という意味と同じでない場合は、2つの結合表が必要です。なぜなら、1つの結合表のみが関係の方向について何も教えていないからです。しかし、私はあなたの状況に当てはまらないと思います。

+0

状況を記述し、ClassLocationテーブルのフィールドが関連付けの方向を示すのにどのように適切でないかを説明できますか? –

関連する問題