私はテーブルにミュージシャンとイベントテーブルを格納するデータベースをデータベースに持っています。私がしようとしているのは、ミュージシャンがどのようなイベントで何をしたのかを把握することです。これを行う最も効率的な方法は何ですか? event_id
をミュージシャンテーブルに入れ、ミュージシャンが演奏するイベントごとに新しいレコードを作成する必要がありますか? event_id
とmusician_id
という別々のルックアップテーブルを作成し、特定のイベントで演奏するミュージシャンを取得しようとするときにテーブルに参加する必要がありますか?問題は現在約50人のミュージシャンがいて、毎年50のイベントを演奏することができるということです。それは冗長なデータであり、あるイベントではより多くのイベントが行われ、ある時点で100人のミュージシャンになる可能性もあります。何か案は?データベーステーブルの設計
答えて
私はあなたのためのテーブルをレイアウトしませんが、基本的な構造は次のようになります。
musicians
- アーティストについての詳細(例えば50のレコード。)
events
- イベントの詳細(たとえば、50のレコード両方が戻って、それぞれの親テーブルへの外部キーであること、ミュージシャンのIDイベントID: - )
musicians_events
示しています関節のテーブルには、アーティストが
で演奏されたイベントの共同の表は、2つのフィールドで簡単に構成されます。あなたの規定のデータサイズで
すべてのミュージシャンはすべてのイベントで演奏すれば、あなたは50のミュージシャンレコード、50のイベント記録、および潜在的に、2,500ミュージシャン・イベント・レコードを持っていると思います。
あなたはミュージシャンやイベント間の多対多の関係をマッピングするために(もジャンクションテーブルと呼ばれる)別のルックアップテーブルを必要とします。
テーブルには、uniqueID、MusicianID、EventIDの3つのフィールドが必要です。
結合テーブルを使用する必要があります。これは、event_id
とmusician_id
の両方のテーブルを持っているところで概説したオプションです。
テーブルに適切なインデックスを付けるとうまくいくでしょう。
私は、イベントテーブルと多対多関係のテーブルミュージシャンを作成します。あなたがのは、これはあなたがテーブルを持っている必要があり、典型的な多対多の関係のように聞こえる主キー(MusiciantIDとのEventId)
の両方が含まれているMusiciantEventを言わせ呼ばれる関係表を持っていることを意味
ミュージシャン、イベントのための別のテーブル、そしてそれらの間の関係を格納する第3のテーブルを含む。そのテーブルにはミュージシャンIDとイベントIDがあります。
あなたがイベントで複数のミュージシャンを持つことができる場合は、これをモデル化するための正しい方法は、あなたが提案番目のオプションである - musician_id、それらを関連付けるのevent_idを有する第2のテーブルを作成します。
データ量は - 50 x 50はわずか2,500レコードですが、これはMySQLにとっては何もありません。適切なインデックス作成を行うと、MySQLはテーブル内の何百万ものレコードを簡単に処理できます。
これは明らかメートルです:nまたは多対多の状況への参加:musician_id
と
musician
テーブル:あなたは3つのテーブルを必要としています。event
event_id
の表。musician_id
とevent_id
を主キーとするジャンクションテーブル(musician_events
)です。
論理的には、多対多の関係があります。物理的には、musician
とmusician_events
の間に1対多の関係があり、event
とmusician_events
の間に1対多の関係があります。
ミュージシャンが多くのイベントに参加でき、イベントに多数のミュージシャンが参加することができるからです。
musician musician_events event
+-----------------+ +--------------------+
| PK musician_id |--->| PK FK musician_id | +--------------+
| name | | PK FK event_id |<---| PK event_id |
+-----------------+ +--------------------+ | date |
+--------------+
ので、これは単なるサンプル
**tbl_Event**
Event_ID
Event_Name
Event_Location
**tbl_Musician**
musician_id
musician_firstName
musician_lastname
***tbl_join***
event_ID
musician_ID
その性質のために何かあるように私は、イベント用のテーブルを作成します。私は専門家ではありませんが、重複したデータがたくさんある場合は、避けてください。
- 1. 「ユーザー設定」データベーステーブルの設計
- 2. 複雑なデータベーステーブルの設計
- 3. スケジューリングタスクのためのデータベーステーブルの設計
- 4. データベーステーブルの設計(ユーザー、受信者、アドレス)
- 5. 原料データベーステーブルを設計するには?
- 6. OO設計とデータベース設計
- 7. マルチモジュール設計とシングルモジュール設計の選択
- 8. SQLデータベーステーブルの変更を監視するための設計上の考慮事項
- 9. ブルームフィルタの設計
- 10. ループアルゴリズムの設計
- 11. S3の設計
- 12. リレーショナルアンケートアンケートデータベースの設計
- 13. ニュースシステムの設計
- 14. フォーラムデータベースの設計
- 15. アンケートデータベースの設計?
- 16. オブジェクトモデルの設計
- 17. ブログアーキテクチャの設計
- 18. コマンドオブジェクトの設計
- 19. インスタントメッセージングサーバーの設計
- 20. ニューラルネットワークの設計
- 21. MVVMモデルの設計
- 22. リレーショナルデータベース設計(MySQLの)
- 23. アーカイバ・プログラムの設計
- 24. MongoDBのスキーマ設計
- 25. PHPアプリケーションの設計
- 26. リレーションシップのクラス設計
- 27. cassandraのスキーマ設計
- 28. Pythonハッシュテーブルの設計
- 29. Djangoのタグモデル設計
- 30. データベース設計のアドバイス
偉大な、ありがとう、それは私が知る必要があったものです! – user1143767
プラスとして、ミュージシャン_イベント(ミュージシャンIDとイベントID)にUNIQUEマルチカラムインデックスを作成することができます。これにより、ミュージシャンやイベントの数を増やすと、将来のパフォーマンスが向上します! – mgm