我正在尝试为音乐品味共享 Web 应用程序设计一个数据库。
我几乎从来不需要做 Db 设计/架构,并认为我会从 SO 用户那里得到一些帮助,希望我的问题可以成为“好的”Db 设计实践的一个很好的例子。
仅供参考:ERD 是使用免费软件MySQL Workbench绘制的。
这些是我的要求以及我如何在 Db 模式中表示它们
用户拥有凭据和帐户/个人资料(电子邮件、fName、lName 等)——所有这些都在
USER_DETAILS
表格之下用户可以拥有角色 & & 多个用户可以拥有相同的角色 - 因此&表之间的多对多关系
USER_DETAILS
ROLE
用户可以拥有图像 - 因此&表之间的一对多关系
USER_DETAILS
USER_IMAGE
用户可以拥有许多徽章,并且多个用户可以拥有相同的徽章 - 因此&表之间的多对多关系
USER_DETAILS
BADGE
用户的轨迹可以有许多声誉历史,而声誉历史只匹配一个特定用户的轨迹 - 因此&表之间的一对多关系
USER_DETAILS_TRACK
REPUTATION_HISTORY
用户可以有许多轨道,多个用户可以有相同的轨道 - 因此&表之间的多对多关系
USER_DETAILS
TRACK
用户可以有每个轨道的标签和多个用户可以有相同的标签每个轨道 - 因此&表之间的多对多关系
USER_DETAILS_TRACK
TAG_2
轨道在 has
TRACK
表下表示轨道可以有几个艺术家,一个艺术家可以在多个轨道中 - 因此&表之间的多对多关系
TRACK
ARTIST
轨道可以有多个版本,一个版本可以(通常)有多个轨道 - 因此&表之间的多对多关系
TRACK
RELEASE
release 有一个 release_type 并且 release_type 可以在许多版本中 - 因此&表之间的一对多关系(发布类型可以是专辑、EP、LP、单曲等)
RELEASE_TYPE
RELEASE
track 可以有评论 - 因此&表之间的一对多关系
TRACK
COMMENT
曲目可以有多个标签,并且艺术家可以在多个曲目中 - 因此&表之间的多对多关系
TRACK
TAG_1
您一定已经注意到我复制了 TAG 表有 TAG_1 和 TAG_2。理想情况下,我只有一个,但我担心这会在USER_DETAILS_TRACK
&TRACK
表之间产生过于强烈的耦合,因为这些表已经与多对一关系相关联。
我计划在中间层保持 TAG_1 和 TAG_2 同步。
podiluska 发表评论后的最新编辑
- 关于我的数据库设计,我是否走在正确的道路上?
- 你会修改/改进什么?
多谢