我应该为每张专辑制作单独的桌子吗?

时间:2019-02-27 12:48:19

标签: database database-design database-normalization

我正在一个关于MySQL中音乐和专辑的数据库项目中,我列出了一些受欢迎的艺术家,他们最畅销的专辑以及其中包含的歌曲。但是我突然不确定如何为每张专辑填写歌曲名称。我应该为每个歌曲列表制作一张单独的桌子,还是应该将来自所有不同歌手(5位不同歌手)的所有歌曲(总共约50张专辑中的所有歌曲)都填充在同一张桌子中(我是最终将导出数据并将其连接到PHP文件夹

希望问题很明确

2 个答案:

答案 0 :(得分:2)

所有歌曲应放在一张“歌曲”表中。然后,在该表中创建一列“专辑ID”,这是一个外键,返回到专辑表中的ID列。这样您才能知道哪首歌属于哪张专辑。 (当然,“专辑”和“艺术家”之间的关系也一样。)

这称为“一对多”关系,是关系数据库设计的基本原理之一。

如果发现自己创建了多个表来表示相同类型的数据项,则说明您出了错。

如果您想支持同一首歌(或者可能更精确地跟踪,因为可能会录制一首歌的许多不同录音)可以包含在多个专辑中的想法,那么您需要实现“许多多对多”关系,即在“专辑”和“歌曲”之间有一个额外的表格,其中包含专辑ID和歌曲ID。每个都将是分别返回专辑和歌曲表的外键。为了确保不重复,这两个字段都将被指定为复合主键。这样,您可以针对不同的专辑在该表中多次列出相同的歌曲ID。如果您想在“艺术家”和“专辑”之间的关系中具有这种灵活性,请再次确认。

这可能是个休息时间,是更详细地研究关系数据库设计和数据规范化概念的好时机,然后您可以开始亲自了解这些模式并在架构设计中做出正确的决定。

答案 1 :(得分:0)

类似于this question关于播放列表数据库的情况,您还应该为一张专辑使用一张表,为歌曲使用一张表。

此外,您可能还需要一个用于艺术家等的表格。