我正在尝试为音乐品味共享网络应用程序设计数据库。
我几乎从不做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
表
track在TRACK
表
赛道可以有几位艺术家和一个艺术家可以在几个轨道 - 因此TRACK
&之间的多对多关系。 ARTIST
表
track可以有几个版本&一个版本可以(通常)有几个轨道 - 因此TRACK
&之间的多对多关系。 RELEASE
表
发布有一个release_type& release_type可以在许多版本中 - 因此RELEASE_TYPE
&之间的一对多关系。 RELEASE
个表格(发布类型为专辑,EP,LP,单个&等等)
跟踪可以有评论 - 因此TRACK
&之间的一对多关系COMMENT
表
曲目可以有几个标签&一个艺术家可以在几个轨道 - 因此TRACK
&之间的多对多关系。 TAG_1
表
你一定注意到我复制了TAG表有TAG_1& TAG_2。理想情况下,我只会有一个,但我担心会在USER_DETAILS_TRACK
和TRACK
之间产生过强的耦合。这些{{1}}表已与多对一关系链接。
我打算保留TAG_1& TAG_2在中间层同步。
podiluska评论后的最新编辑
非常感谢
答案 0 :(得分:1)
除了评论中的调整外,我认为现在或多或少都存在。
您需要从Release中删除Track_ID并将其替换为Track中的Release_ID,或者使用TrackRelease表 - 具体取决于轨道是否可以在多个版本上,反之亦然。