2012-01-11 9 views
0

私はテーブルにミュージシャンとイベントテーブルを格納するデータベースをデータベースに持っています。私がしようとしているのは、ミュージシャンがどのようなイベントで何をしたのかを把握することです。これを行う最も効率的な方法は何ですか? event_idをミュージシャンテーブルに入れ、ミュージシャンが演奏するイベントごとに新しいレコードを作成する必要がありますか? event_idmusician_idという別々のルックアップテーブルを作成し、特定のイベントで演奏するミュージシャンを取得しようとするときにテーブルに参加する必要がありますか?問題は現在約50人のミュージシャンがいて、毎年50のイベントを演奏することができるということです。それは冗長なデータであり、あるイベントではより多くのイベントが行われ、ある時点で100人のミュージシャンになる可能性もあります。何か案は?データベーステーブルの設計

答えて

2

私はあなたのためのテーブルをレイアウトしませんが、基本的な構造は次のようになります。

musicians - アーティストについての詳細(例えば50のレコード。)
events - イベントの詳細(たとえば、50のレコード両方が戻って、それぞれの親テーブルへの外部キーであること、ミュージシャンのIDイベントID: - )
musicians_events示しています関節のテーブルには、アーティストが

で演奏されたイベントの共同の表は、2つのフィールドで簡単に構成されます。あなたの規定のデータサイズで

すべてのミュージシャンはすべてのイベントで演奏すれば、あなたは50のミュージシャンレコード、50のイベント記録、および潜在的に、2,500ミュージシャン・イベント・レコードを持っていると思います。

+0

偉大な、ありがとう、それは私が知る必要があったものです! – user1143767

+0

プラスとして、ミュージシャン_イベント(ミュージシャンIDとイベントID)にUNIQUEマルチカラムインデックスを作成することができます。これにより、ミュージシャンやイベントの数を増やすと、将来のパフォーマンスが向上します! – mgm

1

あなたはミュージシャンやイベント間の多対多の関係をマッピングするために(もジャンクションテーブルと呼ばれる)別のルックアップテーブルを必要とします。

テーブルには、uniqueID、MusicianID、EventIDの3つのフィールドが必要です。

0

結合テーブルを使用する必要があります。これは、event_idmusician_idの両方のテーブルを持っているところで概説したオプションです。

テーブルに適切なインデックスを付けるとうまくいくでしょう。

0

私は、イベントテーブルと多対多関係のテーブルミュージシャンを作成します。あなたがのは、これはあなたがテーブルを持っている必要があり、典型的な多対多の関係のように聞こえる主キー(MusiciantIDとのEventId)

0

の両方が含まれているMusiciantEventを言わせ呼ばれる関係表を持っていることを意味

ミュージシャン、イベントのための別のテーブル、そしてそれらの間の関係を格納する第3のテーブルを含む。そのテーブルにはミュージシャンIDとイベントIDがあります。

0

あなたがイベントで複数のミュージシャンを持つことができる場合は、これをモデル化するための正しい方法は、あなたが提案番目のオプションである - musician_id、それらを関連付けるのevent_idを有する第2のテーブルを作成します。

データ量は - 50 x 50はわずか2,500レコードですが、これはMySQLにとっては何もありません。適切なインデックス作成を行うと、MySQLはテーブル内の何百万ものレコードを簡単に処理できます。

0

これは明らかメートルです:nまたは多対多の状況への参加:musician_id

  • musicianテーブル:あなたは3つのテーブルを必要としています。

  • eventevent_idの表。

  • musician_idevent_idを主キーとするジャンクションテーブル(musician_events)です。

論理的には、多対多の関係があります。物理的には、musicianmusician_eventsの間に1対多の関係があり、eventmusician_eventsの間に1対多の関係があります。

ミュージシャンが多くのイベントに参加でき、イベントに多数のミュージシャンが参加することができるからです。

musician    musician_events   event 
+-----------------+ +--------------------+  
| PK musician_id |--->| PK FK musician_id | +--------------+ 
|  name  | | PK FK event_id |<---| PK event_id | 
+-----------------+ +--------------------+ |  date  | 
               +--------------+ 
0

ので、これは単なるサンプル

**tbl_Event** 
Event_ID 
Event_Name 
Event_Location 


**tbl_Musician** 
    musician_id 
    musician_firstName 
    musician_lastname 

***tbl_join*** 
    event_ID 
    musician_ID 

その性質のために何かあるように私は、イベント用のテーブルを作成します。私は専門家ではありませんが、重複したデータがたくさんある場合は、避けてください。

関連する問題