【问题标题】:Should i make seperate tables for each album?我应该为每张专辑制作单独的表格吗?
【发布时间】:2019-02-27 20:58:04
【问题描述】:

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

希望问题很清楚

【问题讨论】:

    标签: database database-design database-normalization


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • @Zim84 是的。这在我认为的问题中有所暗示,这似乎是一个相当简单的例子,而不是一个充满多艺术家合辑等的完整现实世界。但我同意你的观点。
    • 为什么?在专辑表中,多个专辑可以链接到相同的歌曲 ID。我会这样做,而不是反过来(在歌曲表中链接到专辑表)。
    • @Axel 实际上我刚刚编辑了答案以讨论同一曲目可以出现在多个专辑中的场景。这需要多对多的关系。当您说“反过来”时,我不太清楚您的意思是什么?如果将“歌曲 ID”改为“专辑”的外键,则该歌曲可以出现在多张专辑中,但每张专辑只能包含一首歌曲。我想你不会真的认为这是可取的。
    • @ADyson 我不得不承认我的逻辑在这里有片刻的缺陷。没错,实际上两个表中的条目都需要能够指向另一个表中的多个条目,因此需要第三个表。
    • 我非常感谢有用的答案,我想我应该能够继续这个项目:D.
    【解决方案2】:

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

    此外,您可能还需要一张供​​艺术家使用的桌子等。

    【讨论】:

      猜你喜欢
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 2014-09-20
      • 2020-11-27
      • 1970-01-01
      • 2012-03-29
      相关资源
      最近更新 更多