2017-03-14 10 views
0

追跡します。 アーティストはトラックを追加することができます。 各アルバムには多くの曲があります。エンティティ関係は、我々は3つのテーブルを持っている

ここで、曲がどのアルバムにも属しておらず、アーティストからの1曲です。だから、どのようにエントリを行うには?トラックテーブルのFOREIGN KEY album_idで何をすべきですか? nullでもかまいませんか?

答えて

0

スタースキーマ(ディメンションおよびファクトテーブル)を使用する場合、「トラック」のグレインを持つファクトテーブルを持つことができます。したがって、各行は1つのトラックになります。トラックにアルバムがない場合、アルバムの外部キーは0に設定されます。

アルバムテーブルには、0キーを含む行があり、「使用できません」またはダッシュ' - ')、またはあなたの報告目的に合ったものを使用してください。

あなたはそれをnullにすることができますが、トラック数をカウントしてアーティストに参加している場合、その行はクエリの書き方によっては返されません。

例クエリ:

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 

Table setup example

+0

アルバムには外部キー(アーティスト)がありますので、利用できないと呼ばれるレコード0はどのアーティストに属していますか?\ –

+0

スタースキーマを作成している場合です。リレーショナル・テーブルの設定は異なります。あなたのディメンション(アーティスト、アルバム、トラック)は一緒には参加しません。彼らはすべてファクトテーブルに参加します。そこから関係を照会することができます。私は私の答えにテーブルの設定の写真を追加しました。 – Hana

0

私は新しいテーブル...歌を作り、アルバムや曲の外部キーとトラックテーブルにリンクテーブルを作成することをお勧めします。外部キーにNULLを設定すると、外部キーが設計されたものが破損します。詳細はhttps://en.wikipedia.org/wiki/Foreign_keyを参照してください。

0

エンティティの関係を表す3つのテーブルがあります。これらはエンティティセットをその属性に関連付けます。エンティティセット間の関係は明確に定義されていません。各Artistは多くのAlbumsを持つことができますが、にはどれくらいの数がありますか?Albumには?各Artistには多くのTracksを含めることができますが、にはどれくらいの数がそれぞれTrackにありますか?各Albumには多くのTracksを含めることができますが、どれくらい多くのAlbumsを各Trackに含めることができますか?

実際のところ、曲は多くのアルバムに表示されますが、曲の各トラック/アピアランスは別個のエンティティとして表示される可能性があります。 TrackにはArtistsが多く含まれていてもかまいませんが、Trackは1つだけAlbumに属すると仮定します。さらに、AlbumsArtistsの間の関連付けを直接モデル化する必要はないと仮定します。代わりに、Tracksに関連付けられたArtistsの結合を各アルバムの適切なクエリで簡単に取得することができます。

Track-Album-Artist ERD

これは、二つの関係の関係が必要です:あなたはTracks許可する場合

TrackArtist (TrackID PK/FK, ArtistID PK/FK) 
TrackAlbum (TrackID PK/FK, AlbumID FK) 

TrackAlbumとの間の関係は、NULL可能AlbumIDカラムとして、Trackエンティティ関係/テーブルに非正規化することができますAlbumsから独立して存在すること。

リレーションシップに異なるカーディナリティが必要な場合は、結果が多少異なるように見えます。 AlbumsArtistsの間の関係を直接記録する場合は、状況が大きく異なるため、TrackArtistAlbumArtistの整合性について考える必要があります。

関連する問題