我在我的數據庫中有一張表,用於存儲表中的音樂家以及事件表。我想要做的是跟蹤音樂家在什麼事件中演奏什麼。什麼是最有效的方法來做到這一點?我是否應該將event_id
放入音樂家表格中,併爲音樂家演奏的每個事件創建新記錄?我是否應該用event_id
和musician_id
創建單獨的查找表,並在試圖讓特定活動中的音樂家參與時加入表格?問題是我目前有大約50位音樂家,他們每年可能會播放50個活動,這是大量冗餘數據,還有一些人會參加更多活動,並且這個數字可能會增加到100位音樂家。有任何想法嗎?數據庫表設計
數據庫表設計
回答
我不會鋪陳表給你,但基本結構是:
musicians
- 關於事件的細節(例如50個記錄 - 關於藝術家的細節
events
(如50條記錄。) )
musicians_events
- 聯合表列出了活動的藝術家演奏在
接合表將包括簡單的2場:音樂家ID事件ID,均爲外鍵返回到各自的父表。
隨着您所陳述的數據大小,你有50分音樂家的記錄,50條事件記錄,並有可能2500音樂家事件記錄,如果每一個音樂家在每一個活動中起。
你需要單獨的查找表(也稱爲結合表)來映射音樂家和事件之間的許多一對多的關係。
表需要三個字段UNIQUEID,MusicianID和事件ID。
您應該使用連接表。這是您列出的選項,您可以在event_id
和musician_id
之間選擇一個表格。
如果你把正確的索引上的表格中它會表現良好。
我會創建一個表格與事件表的多對多關係的音樂家。
這意味着你將有一個名爲的關係表假設包含MusiciantEvent兩個主鍵(MusiciantID和EVENTID)
這聽起來像一個典型的多對多一對多的關係,你應該有一個表音樂家,另一張表格,然後是第三張表格,存儲它們之間的關係。該表將會有一個musicianId和一個eventId。
如果你可以在一個事件多的音樂家,然後模擬這種正確的方式是你提出的第二個方案 - 創建第二個表與musician_id和事項標識來聯繫他們。
至於數據量 - 50×50只有2500條記錄,這是沒有的MySQL。通過適當的索引,MySQL可以輕鬆處理表中數百萬條記錄。
這顯然是一個M:N或許多一對多連接的情況:你需要三個表:
一個
musician
表與musician_id
。一個
event
表event_id
。具有
musician_id
和event_id
的聯結表(musician_events
),其中兩個字段均爲主鍵。
從邏輯上說,你有多對多的關係。在物理上,您在musician
和musician_events
之間存在一對多關係,並且event
和musician_events
之間存在一對多關係。
這是因爲一位音樂家可以參加很多活動,一個活動可以有很多音樂家。
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. Mysql數據庫表設計
- 4. 數據庫表格設計
- 5. 設計數據庫:表
- 6. 數據庫表格設計
- 7. 數據庫表設計/設置
- 8. 數據庫設計 - 配置/設置表
- 9. 如何設置數據庫表,數據庫設計
- 10. 數百個表的數據庫設計
- 11. 數據庫設計
- 12. 數據庫設計
- 13. 數據庫設計
- 14. 數據庫設計
- 15. 設計數據庫
- 16. 設計數據庫
- 17. 數據庫設計
- 18. 數據庫設計
- 19. 數據庫設計
- 20. 庫存數據庫設計
- 21. 數據庫設計中的外鍵 - 數據庫設計
- 22. 閱讀和寫表數據庫設計
- 23. 服務列表MySQL數據庫設計
- 24. 數據庫設計 - 儀表板
- 25. 數據庫設計如何參考表
- 26. 簡單的數據庫表設計
- 27. 數據庫設計和大表?
- 28. 以下狀態表數據庫設計
- 29. 固定時間表數據庫設計
- 30. 數據庫設計 - 表格標準化
太好了,謝謝,那就是我需要知道的! – user1143767 2012-01-11 17:50:20
另外,您可以在musicians_events(音樂人ID和事件ID)上創建一個UNIQUE多列索引。如果您將增加音樂家和/或活動的數量,這將確保未來有更好的表現! – mgm 2012-01-11 19:03:25