0

我正在开发一个小型音乐网站。我是一名前端开发人员,对数据库的了解不多。我想出了这个网站的数据库设计。你能建议改进它吗?

我可能有几个问题是..

  • 如何更改它以支持多位艺术家对一首歌曲?
  • 歌曲表中可以有专辑还是必须是单独的表?我认为我没有任何其他关于专辑的内容要存储,但将专辑放在歌曲表中是否不切实际?

非常感谢。

在此处输入图像描述

4

3 回答 3

2

在我的脑海中,我可能会选择这样的东西:

在此处输入图像描述

该数据模型具有以下特点:

  • 歌曲和艺术家之间存在多对多的关系(通过中间的“链接”表实现:SONG_ARTIST)。
  • 专辑在单独的表格中。如果您想要的只是专辑名称,这并不是特别重要,但我假设您稍后会想要更多字段。
  • SONG_NAME 和 ALBUM_NAME不是它们各自表中的键 - 可能有多个歌曲(或专辑)具有相同的名称。
  • 另一方面,GENRE_NAME 是一个(备用)键。
  • ARTIST_NAME 是否应该是备用键是值得怀疑的。我选择在我的模型中这样做,但这需要你为在现实生活中碰巧有相同名字的艺术家“发明”不同的名字。也许更好的方法是还要求出生日期或地点,尽管这也有潜在的问题......
  • PLAYLIST_NAME 包含在播放列表的主键中,因此单个用户可以拥有多个播放列表。由于 PLAYLIST 没有“子”关系,因此无需引入“PLAYLIST_ID”等代理键。
  • 除了普通的 PASSWORD,还有 PASSWORD_HASH 和 PASSWORD_SALT(以阻止“彩虹”攻击)。
  • 命名约定对实体名称使用单数,这更符合可在此处找到的建议。
于 2012-04-23T19:18:02.743 回答
1

对于一首歌曲的多个艺术家,您可以有一个单独的表,其中每一行都有该歌曲中艺术家的歌曲 ID 和艺术家 ID,因此带有多个艺术家的歌曲的 ID 将有一行带有该歌曲 ID 的每个艺术家。典型的 N 对 N 关系构建。

至于将专辑(可能是名称)放在歌曲表中,如果您没有关于专辑的任何其他信息,那么它在自己的表中看起来有点傻。但是,只要您拥有除名称以外的任何专辑特定信息(例如,专辑的发行日期可能与其单首歌曲的发行日期不同;此外,一首歌曲可以出现在多个专辑中),您会有麻烦了。

于 2012-04-23T16:14:04.310 回答
1

如果您想让一首歌曲有多个艺术家,您需要在艺术家和歌曲之间有另一个表,其中包含一首歌曲和一个艺术家 ID。

我还建议为专辑制作一个自己的表格,如果您实际上没有任何东西可以存储在其中,因为编辑标题名称非常容易,您可以在一个地方完成。而且我可以想象将图像存储到相册中会很有趣;)

此外,尽管用户名是唯一的,但通常总是使用整数作为主键。

于 2012-04-23T16:17:07.753 回答