繁体   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