2012-01-11 122 views
0

我在我的數據庫中有一張表,用於存儲表中的音樂家以及事件表。我想要做的是跟蹤音樂家在什麼事件中演奏什麼。什麼是最有效的方法來做到這一點?我是否應該將event_id放入音樂家表格中,併爲音樂家演奏的每個事件創建新記錄?我是否應該用event_idmusician_id創建單獨的查找表,並在試圖讓特定活動中的音樂家參與時加入表格?問題是我目前有大約50位音樂家,他們每年可能會播放50個活動,這是大量冗餘數據,還有一些人會參加更多活動,並且這個數字可能會增加到100位音樂家。有任何想法嗎?數據庫表設計

回答

2

我不會鋪陳表給你,但基本結構是:

musicians - 關於事件的細節(例如50個記錄 - 關於藝術家的細節
events(如50條記錄。) )
musicians_events - 聯合表列出了活動的藝術家演奏在

接合表將包括簡單的2場:音樂家ID事件ID,均爲外鍵返回到各自的父表。

隨着您所陳述的數據大小,你有50分音樂家的記錄,50條事件記錄,並有可能2500音樂家事件記錄,如果每一個音樂家在每一個活動中起。

+0

太好了,謝謝,那就是我需要知道的! – user1143767 2012-01-11 17:50:20

+0

另外,您可以在musicians_events(音樂人ID和事件ID)上創建一個UNIQUE多列索引。如果您將增加音樂家和/或活動的數量,這將確保未來有更好的表現! – mgm 2012-01-11 19:03:25

1

你需要單獨的查找表(也稱爲結合表)來映射音樂家和事件之間的許多一對多的關係。

表需要三個字段UNIQUEID,MusicianID和事件ID。

0

您應該使用連接表。這是您列出的選項,您可以在event_idmusician_id之間選擇一個表格。

如果你把正確的索引上的表格中它會表現良好。

0

我會創建一個表格與事件表的多對多關係的音樂家。

這意味着你將有一個名爲的關係表假設包含MusiciantEvent兩個主鍵(MusiciantID和EVENTID)

0

這聽起來像一個典型的多對多一對多的關係,你應該有一個表音樂家,另一張表格,然後是第三張表格,存儲它們之間的關係。該表將會有一個musicianId和一個eventId。

0

如果你可以在一個事件多的音樂家,然後模擬這種正確的方式是你提出的第二個方案 - 創建第二個表與musician_id和事項標識來聯繫他們。

至於數據量 - 50×50只有2500條記錄,這是沒有的MySQL。通過適當的索引,MySQL可以輕鬆處理表中數百萬條記錄。

0

這顯然是一個M:N或許多一對多連接的情況:你需要三個表:

  • 一個musician表與musician_id

  • 一個eventevent_id

  • 具有musician_idevent_id的聯結表(musician_events),其中兩個字段均爲主鍵。

從邏輯上說,你有多對多的關係。在物理上,您在musicianmusician_events之間存在一對多關係,並且eventmusician_events之間存在一對多關係。

這是因爲一位音樂家可以參加很多活動,一個活動可以有很多音樂家。

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 

東西的性質。我不是專家,但任何你會看到很多重複的數據,你應該儘量避免它。