2011-07-14 8 views
0

誰かがあなたが正しいと思う方法で私のMySQLテーブルを整理するのを手伝ってもらえるかどうかは疑問でした。(アソシエーションテーブルは私が探しているものです)私はそれらを実装する際に問題があります。ここでアソシエーションテーブルを実装する

は例です:あなたは一度だけあなたのデータベース「場所1」を持っており、それに関連するイベントが別の場所に格納持っていると思った場合

Location   Type     Event     Date 
Location 1   bar, disco   event1     friday 
Location 1   bar, disco   event2     saturday 
Location 2   bar, restaurant  Event3     friday 

はどのようにこのついて行くでしょうか?同じことがタイプセクションにも当てはまります。私はそのタイプを想定

答えて

2

LocationsEventsとの間の関係は、1対多の関係の一例です。つまり、個々の場所には複数のイベントが関連付けられている可能性があります。これらのタイプの関係は、通常、 '1つの'テーブル(場所)の主キーを参照する '多数の'テーブル(イベント)に外部キーを追加することによって実装されます。

「場所」と「種類」の関係は、多対多の関係の例です。つまり、場所には多くの種類があり、種類には多くの場所が関連している可能性があります。これらのタイプの関係は、通常、関連する行の外部キーを含むリンクテーブルで実装されます。リンクテーブルには、通常、2つの外部キーの複合主キーがあります。つまり、1つの場所を 'bar'タイプに2回リンクすることはできません。

ので、次の表の構造があなたに適しているかもしれません:

Location: ID (primary key), LocationName, ... 
Events: ID (primary key), LocationID (foreign key), Date, Name, ... 
LocationTypes: LocationID (fk), TypeID (fk) 
Types: ID (pk), Name, ... 

テーブルのいくつかの間で情報を照会するには、あなたが加入を使用する必要があります。 1対多の関係については、次のクエリは動作します:多対多の関係については

SELECT 
    l.LocationName, e.Name, e.Date 
FROM Location l 
    JOIN Events e ON l.ID = e.LocationID 

、次のクエリは、情報を一緒に参加します。

これらの例は、標準の内部結合を示しています。必要に応じて他の結合タイプがあります。

+0

これで、欠落しているvarsを置き換えるときにそれらの関連付けを作成するsqlクエリがあります。私は間違いなくこれについてさらに検索しますが、これは非常に有用です。 – pufAmuf

1

は場所

tblType 
id int 
name varchar 

tblLocation 
id int 
name varchar 

tblLocationType (m-n relation) 
fk_type int (ref. tblType.id) 
fk_location int (ref. tblLocation.id) 

tblEvent 
id int 
name varchar 
place int (ref. tblLocation.id) 
date DATETIME 

EDITのタイプです...トラブル私は、このようなバーもレストランとして、一箇所に複数の変数を設定する方法を決定する、などを持っています:あなたのexapmleは次のようになります。

tblType 
id name 
1 bar 
2 disco 
4 restaurant 

tblLocation 
id name 
1 Location 1 
2 Location 2 

tblLocationType 
1 1 
2 1 
1 2 
3 2 

tblEvent 
1 event1 1 whenever 
2 event2 1 whenever 
3 event3 2 whenever 
+0

Hmmmと私は上記のクエリを実行する必要がありますか?私はまだ関係が正確にどのように働いているのか、そこからどこに行くのか混乱しています。 – pufAmuf

+0

私の "ref。"参照を意味する。あるテーブルのカラムを別のテーブルの参照カラムに「バインド」する外部キー(エンジンで許可されている場合)を定義します。 – Hyperboreus

関連する問題