Database design 如何改进数据库设计?

Database design 如何改进数据库设计?,database-design,Database Design,我正在开发一个小型音乐网站。我是一个前端开发人员,在数据库方面并没有很好的知识。我为这个网站设计了这个数据库。你能建议改进一下吗 我想问的几个问题是 如何将其更改为支持一首歌曲中的多个艺术家 是否可以将唱片集放在歌曲表中,或者它必须是一个单独的表?我不认为我有任何其他关于专辑的东西,我想储存,但它是不切实际的专辑在歌曲表 非常感谢 对于一首歌曲中的多个艺术家,您可以有一个单独的表,其中每一行都有该歌曲中艺术家的songID和artistID,因此多个艺术家的歌曲ID会有一行,每个艺术家都有该

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

我想问的几个问题是

  • 如何将其更改为支持一首歌曲中的多个艺术家
  • 是否可以将唱片集放在歌曲表中,或者它必须是一个单独的表?我不认为我有任何其他关于专辑的东西,我想储存,但它是不切实际的专辑在歌曲表
非常感谢


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


至于将专辑(大概是名字)放在歌曲表中,若你们并没有关于专辑的任何其他信息,那个么它在自己的表中看起来有点傻。但是,只要您有除姓名以外的任何专辑特定信息(例如,专辑的发行日期可能不同于其单个歌曲的发行日期;而且,一首歌曲可能出现在多个专辑中),您就会遇到麻烦。

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


至于将专辑(大概是名字)放在歌曲表中,若你们并没有关于专辑的任何其他信息,那个么它在自己的表中看起来有点傻。但是,一旦您拥有除姓名以外的任何专辑特定信息(例如,一张专辑的发行日期可能不同于其单个歌曲的发行日期;而且,一首歌曲可能出现在多张专辑中),您就有麻烦了。

如果您想让多个艺术家参与一首歌曲,则需要在艺术家和歌曲之间建立另一个表,其中包含一首歌曲和一个艺术家id

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


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

如果希望一首歌曲有多个艺术家,则需要艺术家和歌曲之间的另一个表,其中包含一首歌曲和一个艺术家id

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


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

在我的脑海中,我可能会选择这样的方式:

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

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

    • 在我的头顶上,我可能会这样说:

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

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