我在我的数据库中有一张表,用于存储表中的音乐家以及事件表。我想要做的是跟踪音乐家在什么事件中演奏什么。什么是最有效的方法来做到这一点?我是否应该将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. 数据库表格设计
- 4. 多表数据库设计
- 5. 数据库表设计
- 6. Mysql数据库表设计
- 7. 设计数据库表
- 8. 数据库表设计
- 9. 数据库设计 - 配置/设置表
- 10. 数据库表设计/设置
- 11. 如何设置数据库表,数据库设计
- 12. 数百个表的数据库设计
- 13. 设计数据库
- 14. 数据库设计
- 15. 数据库设计
- 16. 设计数据库
- 17. 数据库设计
- 18. 数据库设计?
- 19. 数据库设计
- 20. 数据库设计
- 21. 数据库设计
- 22. 数据库设计
- 23. 数据库设计
- 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