[英]Database Table Design
我的數據庫中有一個表,該表將音樂家存儲在一個表以及一個事件表中。 我要做的是跟蹤音樂家在什么活動中演奏的曲目。 最有效的方法是什么? 我應該將event_id
放在音樂家表中,並為音樂家參加的每個事件創建新記錄嗎? 我應該創建一個單獨的查找表event_id
和musician_id
並加入在桌子上試圖獲得在特定事件所扮演的音樂家是什么時候? 問題是我目前大約有50位音樂家,他們每年可能參加50個活動,這是很多冗余數據,而且還存在一些人可能會參加更多活動的可能性,並且這個數字有時會增加到100個。 有任何想法嗎?
我不會為您布置表格,但是基本結構為:
musicians
-有關藝術家的詳細信息(例如50條記錄)
events
-有關events
詳細信息(例如50條記錄)
musicians_events
聯合表,列出藝術家參加過的活動
聯合表將僅包含兩個字段:音樂家ID和事件ID,這兩個都是返回各自父表的外鍵。
根據聲明的數據大小,如果每個音樂家在每個事件中演奏,那么您將擁有50個音樂家記錄,50個事件記錄,並可能有2,500個音樂家事件記錄。
您需要單獨的查找表(也稱為聯結表)來映射音樂家與事件之間的多對多關系。
該表需要三個字段,即uniqueID,MusicianID和EventID。
您應該使用聯接表。 這就是您介紹了,您有一個表與兩個選項event_id
和musician_id
。
如果在表上放置適當的索引,它將很好地執行。
我將創建一個與事件表具有多對多關系的表音樂家。
這意味着您將有一個名為MusiciantEvent的關系表,其中包含兩個主鍵(MusiciantID和EventId)
這聽起來像是典型的多對多關系,您應該有一個用於音樂家的表,另一個用於事件的表,然后是一個存儲它們之間關系的第三個表。 該表將有一個musicatorId和一個eventId。
如果一次活動可以有多個音樂家,那么建議的第二種方法是建模該模型的正確方法-創建一個第二個表,其中包含一個music_id和一個event_id來關聯他們。
至於數據量-50 x 50僅為2500條記錄,對於MySQL而言,這算不了什么。 通過適當的索引,MySQL可以輕松處理表中的數百萬條記錄。
這顯然是am:n或多對多聯接情況:您需要三個表:
一個musician
表與musician_id
。
具有event_id
的event
表。
帶有一個musician_id
和一個event_id
(兩個字段都作為主鍵)的聯結表( musician_events
)。
從邏輯上講,您具有多對多關系。 從物理musician
, musician_events
和musicine_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
這種性質的東西。 我不是專家,但是在任何會看到大量重復數據的地方都應盡量避免使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.