Database 我应该为每张专辑制作单独的表格吗?

Database 我应该为每张专辑制作单独的表格吗?,database,database-design,database-normalization,Database,Database Design,Database Normalization,我正在做一个关于MySQL中音乐和专辑的数据库项目,我列出了一些流行艺术家、他们最畅销的专辑以及其中包含的歌曲。但是,当涉及到为每张专辑填写歌曲名称时,我突然真的不知道该怎么做。我应该为每个歌曲列表制作一个单独的表格,还是应该将来自所有不同艺术家(5位不同艺术家)的所有歌曲(大约50首来自所有专辑)填入同一个表格(我最终将导出数据并将其连接到PHP文件夹) 希望问题很清楚所有歌曲都应该放在一个“歌曲”表中。然后在该表中创建一列“唱片集ID”,它是唱片表中ID列的外键。这是如何知道哪首歌曲属于哪张

我正在做一个关于MySQL中音乐和专辑的数据库项目,我列出了一些流行艺术家、他们最畅销的专辑以及其中包含的歌曲。但是,当涉及到为每张专辑填写歌曲名称时,我突然真的不知道该怎么做。我应该为每个歌曲列表制作一个单独的表格,还是应该将来自所有不同艺术家(5位不同艺术家)的所有歌曲(大约50首来自所有专辑)填入同一个表格(我最终将导出数据并将其连接到PHP文件夹)


希望问题很清楚

所有歌曲都应该放在一个“歌曲”表中。然后在该表中创建一列“唱片集ID”,它是唱片表中ID列的外键。这是如何知道哪首歌曲属于哪张唱片集的。(当然,“唱片集”和“艺术家”之间也有同样的关系。)

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

如果您发现自己创建了多个表来表示同一类型的数据项,那么您就知道自己错了

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

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

与关于播放列表的数据库类似,您还应该使用一个表来存储相册和一个表为了歌曲


此外,你可能还需要一个艺术家列表等。

@Zim84 True。这在问题中有点暗示,我认为,这似乎是一个相当简单的例子,而不是一个充满多艺术家编译等的真实世界。但我接受你的观点。为什么?在专辑表中,多张专辑可以链接到同一个歌曲id。我会这样做这样做,而不是相反的方式(在歌曲表中链接到唱片表)。@Axel实际上我只是编辑了答案,以讨论同一首曲目可以出现在多张唱片上的场景。这需要多对多的关系。我不太确定你说的“另一种方式”是什么意思?如果你同意的话“歌曲ID”是“专辑”的外键"相反,这首歌可以出现在多个相册上,但每个相册只能包含一首歌。我想你不会真的认为这是可取的。@ADyson我不得不承认我的逻辑在这里有一点缺陷。你是对的,实际上两个表中的条目都需要能够指向另一个表中的多个条目,因此需要第三个选项卡我真的很感激这些有用的答案,我想我应该能够继续这个项目:D。