Database design 一个相当复杂的音乐品味共享web应用程序的数据库设计和ERD

Database design 一个相当复杂的音乐品味共享web应用程序的数据库设计和ERD,database-design,erd,Database Design,Erd,我正在尝试设计一个音乐品味共享web应用程序的数据库 我几乎不需要做数据库设计/架构,我想我会从用户那里得到一些帮助,希望我的问题能成为“好”数据库设计实践的一个很好的例子 仅供参考:ERD是使用自由软件MySQL Workbench绘制的 这些是我的需求,以及我如何在Db模式中表示它们 用户具有凭据和帐户/配置文件(电子邮件、fName、lName等)-所有这些都在user\u DETAILS表下 用户可以有角色&多个用户可以有相同的角色-因此用户详细信息和角色表之间存在多对多关系 用户可以

我正在尝试设计一个音乐品味共享web应用程序的数据库

我几乎不需要做数据库设计/架构,我想我会从用户那里得到一些帮助,希望我的问题能成为“好”数据库设计实践的一个很好的例子

仅供参考:ERD是使用自由软件MySQL Workbench绘制的

这些是我的需求,以及我如何在Db模式中表示它们

  • 用户具有凭据和帐户/配置文件(电子邮件、fName、lName等)-所有这些都在
    user\u DETAILS
    表下

  • 用户可以有角色&多个用户可以有相同的角色-因此
    用户详细信息
    角色
    表之间存在多对多关系

  • 用户可以有图像-因此
    user\u DETAILS
    user\u IMAGE
    表之间存在一对多关系

  • 用户可以拥有多个徽章&多个用户可以拥有相同的徽章-因此
    用户详细信息
    徽章
    表之间存在多对多关系

  • 用户的轨迹可以有多个声誉历史记录&声誉历史记录只匹配一个特定用户的轨迹-因此
    用户详细信息\u轨迹
    声誉\u历史
    表格之间存在一对多关系

  • 用户可以有多个曲目&多个用户可以有相同的曲目-因此
    user\u DETAILS
    track
    表之间存在多对多关系

  • 用户每首曲目可以有个标签&多个用户每首曲目可以有相同的标签-因此
    user\u DETAILS\u track
    tag\u 2
    表之间存在多对多关系

  • 磁道在has
    磁道表中表示

  • 曲目可以有多个艺术家&一个艺术家可以在多个曲目中-因此
    曲目
    艺术家
    表格之间存在多对多关系

  • 曲目可以有多个版本&一个版本可以(通常)有多个曲目-因此
    曲目
    版本
    表之间存在多对多关系

  • 发行版有一个发行版类型&一个发行版类型可以在多个发行版中-因此
    发行版类型
    发行版
    表之间的一对多关系(发行版类型可以是专辑、EP、LP、单张等等)

  • 轨迹可以有注释-因此
    轨迹
    &
    注释
    表格之间存在一对多关系

  • 曲目可以有多个标签&艺术家可以在多个曲目中-因此
    曲目
    标签1
    表格之间存在多对多关系

您一定注意到我复制了TAG表中的TAG_1和TAG_2。理想情况下,我只会有一个,但我担心这会在
用户详细信息\u TRACK
TRACK
表之间产生太强的耦合,因为这些表已经通过多对一关系链接

<>我计划保持TAGE1和TAGE2在中间层同步。


波迪卢斯卡评论后的最新编辑

  • 关于我的db设计,我走的是正确的道路吗
  • 你会修改/改进什么

  • 非常感谢

    除了评论中所做的调整之外,我认为它现在或多或少已经存在了


    您需要从Release中删除Track\u ID并在Track中用Release\u ID替换它,或者拥有一个TrackRelease表-这取决于一个曲目是否可以在多个版本上,反之亦然。

    除了在评论中所做的调整之外,我认为现在或多或少都有了


    您需要从发行版中删除Track\u ID并在Track中用Release\u ID替换它,或者拥有TrackRelease表-这取决于一个曲目是否可以在多个发行版上,反之亦然。

    如果声誉历史记录链接到用户详细信息和曲目,为什么不通过user\u details\u track\u id链接到user\u details\u track?在您的建议后,我刚刚用模式更改更新了我的问题。我觉得它有点重,不是吗?这样行吗?我会链接到
    user\u details\u track
    ,而不是
    user\u details
    track
    thx。由一对多的
    user\u details\u track
    reputation\u history
    纠正,因为一个曲目可以在同一用户的声誉历史记录中多次出现。这可能是“album”、“EP”、“LP”等。我的想法是关注跟踪本身,因此我决定不为发布类型创建表,也不为发布名称创建表,而是直接将它们放入跟踪表中。如果声誉历史记录链接到用户详细信息和跟踪,为什么不通过user\u details\u track\u id链接到user\u details\u track?在您的建议后,我刚刚用模式更改更新了我的问题。我觉得它有点重,不是吗?这样行吗?我会链接到
    user\u details\u track
    ,而不是
    user\u details
    track
    thx。由一对多的
    user\u details\u track
    reputation\u history
    纠正,因为一个曲目可以在同一用户的声誉历史记录中多次出现。这可能是“album”、“EP”、“LP”等。我的想法是专注于跟踪本身,因此我决定不为Release\u类型创建表,也不为Release\u Name创建表,而是直接将它们放在跟踪表中。更新了描述和模式:跟踪可以有多个版本&一个版本可以(&通常)有多个轨迹-因此轨迹和释放表之间存在多对多关系。再次感谢您的帮助,这看起来比最初的ERD图好得多:)更新了描述和模式:track可以有多个发行版&一个发行版可以(通常)有多个发行版-因此track和RELEASE表之间存在多对多关系。再次感谢您的帮助,这看起来好多了