1

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

我几乎从来不需要做 Db 设计/架构,并认为我会从 SO 用户那里得到一些帮助,希望我的问题可以成为“好的”Db 设计实践的一个很好的例子。

仅供参考:ERD 是使用免费软件MySQL Workbench绘制的。

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

  • 用户拥有凭据和帐户/个人资料(电子邮件、fName、lName 等)——所有这些都在USER_DETAILS表格之下

  • 用户可以拥有角色 & & 多个用户可以拥有相同的角色 - 因此&表之间的多对多关系USER_DETAILSROLE

  • 用户可以拥有图像 - 因此&表之间的一对多关系USER_DETAILSUSER_IMAGE

  • 用户可以拥有许多徽章,并且多个用户可以拥有相同的徽章 - 因此&表之间的多对多关系USER_DETAILSBADGE

  • 用户的轨迹可以有许多声誉历史,而声誉历史只匹配一个特定用户的轨迹 - 因此&表之间的一对多关系USER_DETAILS_TRACKREPUTATION_HISTORY

  • 用户可以有许多轨道,多个用户可以有相同的轨道 - 因此&表之间的多对多关系USER_DETAILSTRACK

  • 用户可以有每个轨道的标签和多个用户可以有相同的标签每个轨道 - 因此&表之间的多对多关系USER_DETAILS_TRACKTAG_2

  • 轨道在 hasTRACK表下表示

  • 轨道可以有几个艺术家,一个艺术家可以在多个轨道中 - 因此&表之间的多对多关系TRACKARTIST

  • 轨道可以有多个版本,一个版本可以(通常)有多个轨道 - 因此&表之间的多对多关系TRACKRELEASE

  • release 有一个 release_type 并且 release_type 可以在许多版本中 - 因此&表之间的一对多关系(发布类型可以是专辑、EP、LP、单曲等)RELEASE_TYPERELEASE

  • track 可以有评论 - 因此&表之间的一对多关系TRACKCOMMENT

  • 曲目可以有多个标签,并且艺术家可以在多个曲目中 - 因此&表之间的多对多关系TRACKTAG_1

您一定已经注意到我复制了 TAG 表有 TAG_1 和 TAG_2。理想情况下,我只有一个,但我担心这会在USER_DETAILS_TRACK&TRACK表之间产生过于强烈的耦合,因为这些表已经与多对一关系相关联。

我计划在中间层保持 TAG_1 和 TAG_2 同步。

初始 ERD 图


podiluska 发表评论后的最新编辑

最新的 ERD 图

  1. 关于我的数据库设计,我是否走在正确的道路上?
  2. 你会修改/改进什么?

多谢

4

1 回答 1

1

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

您需要从 Release 中删除 Track_ID 并将其替换为轨道中的 Release_ID,或者拥有一个 TrackRelease 表 - 取决于轨道是否可以在多个版本上,反之亦然。

于 2012-10-26T13:43:50.437 回答