如何模拟CD与Genres的关联?

时间:2013-03-25 21:36:23

标签: sql rdbms

我正在为销售音乐CD的网站创建一个数据库设计,而且我已经碰壁了,因为我无法理解CD和它的类型之间的关系是否是一对一的。许多或多对多

每张CD都有多种类型。例如“声音Dubstep Anthems”可以有Dubstep,Dance和Electro等类型。

我想的越多,每种类型也可以链接到许多CD。

目前我拥有数据库的方式是:

cd_table
   PK ID
   FK Genre
   Description
   ...

genre_table
   PK ID
   Genre

如果它是多对多的,我认为我需要一个连接表,例如:

cd_genre
   CD_ID
   Genre_ID

然后让他们都充当主键?我如何将cd_genre链接到cd_table?或者我只是删除CD_table中的FK,然后在查询CD时进行连接?

3 个答案:

答案 0 :(得分:0)

你是对的 - CD和Genre 之间的关系是多对多的,这正是你提供的原因。

是的,您所描述的交叉引用/连接表就是您所需要的。


有趣的是,根据其他限制,您可能希望能够将类型放在其他地方。例如,歌曲:像Weird Al这样的艺术家可能会在他的一张专辑中放置几种不同类型的歌曲,而专辑本身并不一定有任何单一的“主要”类型(但通常会有一些'主题')

答案 1 :(得分:0)

我想你回答了自己的问题。 CD和流派是多对多的,你用两个列表和两个外键完成它,通常称为“连接表”。通常没有必要将该表视为具有主键,但合理地将两列组合在一起是复合主键。

答案 2 :(得分:0)

要确定多重性,请从不同的关系开始提出相同的问题:

  1. CD可以属于多种类型吗?
  2. 一个类型可以包含多张CD吗?
  3. 当然,可能错误的数据库模型。相反,Song< - > Genre和Song< - > CD是更高的标准化形式。它是较高的NF,因为CD - 类型可以由CD - Song - Genre组成,但是CD - 类型不能回答关于CD上的歌曲的相同查询(除非CD可以是最多一种类型。)

    另一方面,人们可能关心CD而不关心歌曲......在这种情况下,建模歌曲不相关甚至是有害的过度数据。同样,完美的分类可能会使实际分类过于复杂 - 要注意信息粒度与问题域使用之间的权衡。