【发布时间】:2016-01-25 02:15:15
【问题描述】:
考虑一下这个 ER 设计示例。我有三个实体:
- 歌手
- 专辑
- 歌曲
每位歌手至少有一张专辑(根据定义),每张专辑至少有一首歌曲。每首歌只属于一张专辑。所以我也有两个关系:
- 专辑:歌手 (1-or-more:exactly-1)
- song:album (1-or-more:exactly-1)
如果我想知道谁在唱这首歌,我可以加入以专辑实体为轴心的表格。
现在我的问题是:我是否应该添加歌手和歌曲之间的直接关系?我不明白它是否仅取决于用例,或者是否有严格的规则/最佳实践。如果我添加它,我会使用更多的磁盘空间,但我需要更少的内存来查询歌曲作者(我不需要连接)。
解决办法是什么?
【问题讨论】:
-
对不起,我犯了一个错误。问题已更新!
-
第 1 步:不要担心磁盘空间是首要问题 - 首先为域找到合适的模型,然后您可以考虑对空间/时间的影响和决定是否需要调整模型。另外:您的专辑和歌曲之间的一对多关系将不支持包含以前发布的歌曲的“最热门”专辑(当然,除非您的域要求歌曲是单张专辑独有的)
-
谢谢!您对“最热门歌曲”的警告是正确的。我简化了建模以将问题集中在主要主题上:是否有(拇指)规则/最佳实践来决定是否添加关系?
-
@philipxy 感谢您的纠正,我改变了问题中关系的基数。
标签: database-design entity-relationship