[英]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.