我正在尝试为音乐品味共享 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轨道在 has
TRACK表下表示轨道可以有几个艺术家,一个艺术家可以在多个轨道中 - 因此&表之间的多对多关系
TRACKARTIST轨道可以有多个版本,一个版本可以(通常)有多个轨道 - 因此&表之间的多对多关系
TRACKRELEASErelease 有一个 release_type 并且 release_type 可以在许多版本中 - 因此&表之间的一对多关系(发布类型可以是专辑、EP、LP、单曲等)
RELEASE_TYPERELEASEtrack 可以有评论 - 因此&表之间的一对多关系
TRACKCOMMENT曲目可以有多个标签,并且艺术家可以在多个曲目中 - 因此&表之间的多对多关系
TRACKTAG_1
您一定已经注意到我复制了 TAG 表有 TAG_1 和 TAG_2。理想情况下,我只有一个,但我担心这会在USER_DETAILS_TRACK&TRACK表之间产生过于强烈的耦合,因为这些表已经与多对一关系相关联。
我计划在中间层保持 TAG_1 和 TAG_2 同步。

podiluska 发表评论后的最新编辑

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