你会如何设计这个关系数据库?

时间:2011-09-04 14:06:14

标签: mysql

我已经获得了许多想法,我不知道它们将如何转化为现实生活,我只是设计了我的第一个到多个表格模式,所以请耐心等待:)

我有一个事件表,其中包含音乐流派等信息。我所做的是创建了一个名为 music_styles 的单独表格。 music_styles 中的每一行都包含该类型的ID和名称。到目前为止,我使用了该ID并将其插入到 events 表中的外键列中,如果每个事件只有一个音乐流派,则该表可以正常工作。所以我想要的是多种类型的解决方案,我被告知要去的方法是创建一个第三个表,它将引用事件ID和music_style id。那会怎么样?我不知道如何开始所以欢迎任何想法。谢谢!

5 个答案:

答案 0 :(得分:4)

您必须创建第三个表,我们可以将其称为events_music_styles,其中包含两列:event_id和music_style_id; event_id显然会包含一个事件的id,而music_style_id会显示一个类型的id。

这样,您可以拥有两个或更多行,其中相同的事件与不同的类型相关联。您还应该删除事件表中有关音乐流派的信息。

这是执行此操作的标准方法。您应该学习一些数据库设计和规范化,有一些重要但容易理解的概念可以真正帮助您。

答案 1 :(得分:1)

pufAmuf,

您创建了第三个表格,例如event_styles,只有两列:event_idmusic_style_id。如果某个活动仅引用了一种风格,您可以使用相应的event_stylesevent_idmusic_style_id表添加一行。如果事件引用了多个样式,则为每个样式添加一行。这些行中的每一行都包含相同的event_id和相应的music_style_id

例如,假设事件01引用pop,而事件02引用jazz和rock:

|events                 |  | music_styles |  | event_styles               |
|-----------------------|  |--------------|  |----------------------------|
| id | data             |  | id | style   |  | event_id | music_style_ id |
|----+------------------|  |----+---------|  |----------+-----------------|
| 01 | "event info"     |  | 01 | jazz    |  | 01       | 03              |
| 02 | "2nd event info" |  | 02 | rock    |  | 02       | 01              |
-------------------------  | 03 | pop     |  | 02       | 02              |
                           ----------------  ------------------------------

答案 2 :(得分:1)

你的主表是事件,每个事件都有一个带有id和id的条目(也许是一个让生活更轻松的GUID)。你将有一个第二个表,然后有一行或多行将具有该事件的音乐风格。音乐风格将从类型的第三个表格(您已经拥有)引用。

一个好的设计只会在一个地方将任何项目作为事件或类型,并根据需要多次引用。

答案 3 :(得分:1)

您所指的是多对多关系或查找。它的工作原理是因为任何一个表中的实体组合都可以通过第三个表格明确地链接在一起。

例如:

Table 1 - music styles
1 Techno
2 Breaks

Table 2 - music event
1 Blagfest
2 Rockers Night

让我们说Blagfest活动有技术和休息,Rockers Night刚刚休息。第三个表将包含以下配对:

Event Style
1     1      - Blagfest has Techno
1     2      - Blagfest has Breaks
2     2      - Rockers night has Breaks

希望有所帮助。

答案 4 :(得分:1)

TBL_EVENT_MUSIC_STYLE 中您说的是正确的, EventID StyleID 将指向 EventID TBL_EVENT TBL_MUSIC_STYLE 的StyleID

TBL_EVENT(EventID,Column1,Column2)
TBL_MUSIC_STYLE(StyleID,Column4,Column5)
TBL_EVENT_MUSIC_STYLE(EventID, StyleID)

通常,您不会对表名使用复数名称。因此,如果您可以将表格名称设置为 music_style 等而不是 music _styles

,那就更好了

Sriwantha Sri Aravinda