如何改进数据库设计?

时间:2012-04-23 16:08:09

标签: database-design

我正在开发一个小型音乐网站。我是一名前端开发人员,并且在数据库方面没有很多知识。我想出了这个网站的数据库设计。你能建议改进吗?

我可能会遇到的问题很少......

  • 如何更改它以支持更多艺术家的歌曲?
  • 是否可以在歌曲表中添加专辑,或者它必须是一个单独的表?我不认为我还有其他关于我要存储的专辑的内容,但是在歌曲表中有专辑是不切实际的吗?

非常感谢。

enter image description here

3 个答案:

答案 0 :(得分:2)

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

enter image description here

此数据模型具有以下特征:

  • 歌曲和艺术家之间存在多对多的关系(由中间的“链接”表格实现:SONG_ARTIST)。
  • 相册位于单独的表格中。如果您想要的只是专辑名称,这并不是特别重要,但我假设您以后会想要更多字段。
  • SONG_NAME和ALBUM_NAME在各自的表格中不是键 - 可能有多首歌曲(或专辑)共享相同的名称。
  • 另一方面,GENRE_NAME是(替代)密钥。
  • ARTIST_NAME是否应该成为备用密钥是值得怀疑的。我选择在我的模型中做到这一点,但是这需要你为在现实生活中碰巧拥有相同名字的艺术家“发明”有名的名字。也许更好的方法是要求出生日期或地点,尽管这也有潜在的问题......
  • PLAYLIST_NAME包含在播放列表的主键中,因此单个用户可以拥有多个播放列表。由于PLAYLIST没有“子”关系,因此无需引入代理键,例如“PLAYLIST_ID”。
  • 而不是普通的密码,有PASSWORD_HASH和PASSWORD_SALT(以阻止"rainbow" attacks)。
  • 命名约定对实体名称使用单数,这更符合可以找到的建议here

答案 1 :(得分:1)

对于歌曲中的多位艺术家,您可以拥有一个单独的表格,其中每一行都有一个歌曲ID&该歌曲上的艺术家的艺术家ID,因此具有多个艺术家的歌曲的ID将具有每个艺术家具有该歌曲ID的行。典型的N对N关系构造。

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

答案 2 :(得分:1)

如果你想让一首歌有多位艺术家,你需要艺术家和歌曲之间的另一张表,其中包含一首歌和一位艺术家的身份。

我还建议为专辑创建一个自己的表,如果你实际上没有任何东西要存储,因为编辑标题的名称很容易,你可以在一个地点。我可以想象,将图像存储到相册中也很有用;)

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