首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >艺术家专辑曲目的实体关系

艺术家专辑曲目的实体关系
EN

Stack Overflow用户
提问于 2017-03-14 22:16:11
回答 3查看 1.7K关注 0票数 2

我们有3张桌子: 1.艺术家2.专辑3.曲目

艺术家有一张或多张专辑。艺术家可以有摩尔斯曲目。每一张专辑都有许多曲目。

现在,如果一首歌不属于任何一张专辑,而是艺术家的一首歌,那该怎么办?那该怎么做呢?以及我们应该如何处理轨道表中的外键album_id。它可以是空的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-15 16:56:08

您有3个表表示实体关系。这些将使您的实体集与它们的属性相关联。您的实体集之间的关系没有明确定义。每个Artist可以有许多Albums,但是每个Album可以有多少个Artists?每个Artist可以有许多Tracks,但是每个Track可以有多少个Artists?每个Album可以有多个Tracks,但是每个Track可以属于多少个Track

在现实世界中,一首歌可以出现在许多专辑中,但是一首歌的每一首歌/一首歌的出现都可能被看作是一个不同的实体。我假设一个Track可以有很多Artists,但是Track只属于一个Album。此外,我假设我们不需要直接建模AlbumsArtists之间的关联,而是可以使用每个相册中与Tracks关联的Artists的联合,这可以通过适当的查询获得。

这需要两种关系:

代码语言:javascript
复制
TrackArtist (TrackID PK/FK, ArtistID PK/FK)
TrackAlbum (TrackID PK/FK, AlbumID FK)

如果希望允许TrackAlbum独立于Albums,则可以将TracksAlbumID之间的关系还原到Track实体关系/表中,作为一个可为空的AlbumID列。

如果您想要不同的关系基数,结果将看起来有些不同。如果您想直接记录AlbumsArtists之间的关系,情况就会大不相同,您可能不得不考虑TrackArtistAlbumArtist之间的一致性。

票数 2
EN

Stack Overflow用户

发布于 2017-03-14 22:31:22

当使用星型模式(维度和事实表)时,可以有一个带有“跟踪”纹理的事实表。所以每一行都是一个轨道。如果轨道没有相册,则相册的外键将设置为0。

相册表将有一行包含0键,描述“不可用”或破折号('-')或任何对您的报告有意义的内容。

您可以将其为null,但如果您正在计算曲目,并加入到艺术家中,则行将不会返回,这取决于您如何编写查询。

示例查询:

代码语言:javascript
复制
select t.track_id, t.track_name, a.album_id, a.album_name, art.artist_id,art.artist_name 
from FACT_MUSIC_DB F 
JOIN DIM_TRACKS T ON T.TRACK_ID = F.TRACK_ID 
JOIN DIM_ALBUMS A ON A.ALBUM_ID = F.ALBUM_ID 
JOIN DIM_ARTISTS ART ON ART.ARTIST_ID = F.ARTIST_ID

表设置示例

票数 1
EN

Stack Overflow用户

发布于 2017-03-14 22:51:51

我建议做一张新桌子..。歌曲和使曲目表与外键链接表相册和歌曲。外键中的空值破坏了设计外键的目的。有关更多详细信息,请参阅钥匙

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42797585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档