簡體   English   中英

數據庫表設計

[英]Database Table Design

我的數據庫中有一個表,該表將音樂家存儲在一個表以及一個事件表中。 我要做的是跟蹤音樂家在什么活動中演奏的曲目。 最有效的方法是什么? 我應該將event_id放在音樂家表中,並為音樂家參加的每個事件創建新記錄嗎? 我應該創建一個單獨的查找表event_idmusician_id並加入在桌子上試圖獲得在特定事件所扮演的音樂家是什么時候? 問題是我目前大約有50位音樂家,他們每年可能參加50個活動,這是很多冗余數據,而且還存在一些人可能會參加更多活動的可能性,並且這個數字有時會增加到100個。 有任何想法嗎?

我不會為您布置表格,但是基本結構為:

musicians -有關藝術家的詳細信息(例如50條記錄)
events -有關events詳細信息(例如50條記錄)
musicians_events聯合表,列出藝術家參加過的活動

聯合表將僅包含兩個字段:音樂家ID和事件ID,這兩個都是返回各自父表的外鍵。

根據聲明的數據大小,如果每個音樂家在每個事件中演奏,那么您將擁有50個音樂家記錄,50個事件記錄,並可能有2,500個音樂家事件記錄。

您需要單獨的查找表(也稱為聯結表)來映射音樂家與事件之間的多對多關系。

該表需要三個字段,即uniqueID,MusicianID和EventID。

您應該使用聯接表。 這就是您介紹了,您有一個表與兩個選項event_idmusician_id

如果在表上放置適當的索引,它將很好地執行。

我將創建一個與事件表具有多對多關系的表音樂家。

這意味着您將有一個名為MusiciantEvent的關系表,其中包含兩個主鍵(MusiciantID和EventId)

這聽起來像是典型的多對多關系,您應該有一個用於音樂家的表,另一個用於事件的表,然后是一個存儲它們之間關系的第三個表。 該表將有一個musicatorId和一個eventId。

如果一次活動可以有多個音樂家,那么建議的第二種方法是建模該模型的正確方法-創建一個第二個表,其中包含一個music_id和一個event_id來關聯他們。

至於數據量-50 x 50僅為2500條記錄,對於MySQL而言,這算不了什么。 通過適當的索引,MySQL可以輕松處理表中的數百萬條記錄。

這顯然是am:n或多對多聯接情況:您需要三個表:

  • 一個musician表與musician_id

  • 具有event_idevent表。

  • 帶有一個musician_id和一個event_id (兩個字段都作為主鍵)的聯結表( musician_events )。

從邏輯上講,您具有多對多關系。 從物理musicianmusician_events和musicine_events之間是一對多的關系, eventmusician_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM