以下で詳しく説明するように、音楽アーティストの描写を含むビジネスコンテキストのエンティティ関係図(ERD)を設計する必要があります。
ArtistにはNameがあり、 aGroupor aSolo Performer(両方ではない)。
Groupは1人以上Solo Performersで構成され、 メンバー数(ソロパフォーマーの数から計算する必要がありますGroup)を構成しています。
ソロパフォーマーは、メンバーの多くのGroupsまたはなしGroupで、1つ以上を再生できますInstruments。
このようなシナリオを表すERDを構築するにはどうすればよいですか? 「または」の部分と混同しています。
回答 MDCCLは魅力的で、教育的で、おそらく正しいです(私の給与水準を超えていますが)。
対照的に、私は質問を再解釈し、最も簡単な可能な解決策の基本に戻りました。たぶん、私は浮気をしていて、本当に質問に答えていません…しかし、とにかくここに行きます。
質問を読んだり、もう一度読んだりすると混乱しました。 「アーティスト」という言葉を見たとき、私は個人のことを考え続けました。しかし、いいえ、それは「アーティストブランドのラベル付け」という意味です。たとえば、音楽レコードアルバムにはタイトルと「アーティスト」があり、アーティストが個人であるかどうかは関係ありません Johnny Cash または The Cure のようなグループ。
Prince として現在知られているアーティストを例に考えてみましょう。彼はアルバムを次のように公開しています。
これらの4つはすべて「アーティスト」のインスタンスになります。特に、彼のバンドには2人の女性、ウェンディメルボインとリサコールマンがいましたThe RevolutionではなくNew Power Generation、ブランドの下でキャリアを続けるために出発した Wendy&Lisa 。
したがって、Wendy&Lisaを持つ「アーティスト」のさらに別のインスタンスがあり、メルヴォインとコールマンの個人はそれぞれ「アーティスト」ではなくパフォーマーになります。それらの個々の女性は、2人の「アーティスト」にパフォーマーとして割り当てられます((1)Prince&The Revolution、(2)ウェンディとリサ)。
次の図は、このサンプルデータをコンパクトに示すための不器用な試みです。 2つの異なるバンド(アーティスト)に属する2つの下線付きの女性(演奏者)を示します。また、4つのバンド(アーティスト)に属しているイタリック体の男性Princeを示していますが、最後のバンド(アーティスト)に属しているnotです。
それがビジネスドメインを表す場合、次のテーブルデザイン(およびERD)を提案します。
基本的には、一対多の関係があります。
「グループ」と「SoloPerformer」について:
ビジネスロジックの一部がソロアイテムとグループアイテムのアーティストアイテムを区別することである場合、SQLで、行が1つしかないメンバーシップテーブルがあるアーティスト行と複数のメンバーシップテーブルがあるクエリを実行できます。しかし実際には、次の方法でこの情報を非正規化することはおそらく意味があります。
質問の目的が、データベース構造(またはERD)内でこのソロとグループの区別を強制することであった場合、私は失敗しました。しかし、いずれにしても、この回答が興味深く有用なものになることを願っています。
MDCCLからの回答は、EERDレベルで示されているスーパークラス/サブクラスまたは一般化/特殊化の背後にある概念のすばらしい要約です。
この回答は、定義された列を持つ定義されたテーブルに基づいて、EERDをリレーショナル設計に変えるときが来たときに知っておく価値のある3つの設計パターンまたは手法を指摘することを目的としています。
ここに3つあります:
最初の2つは代替です。1つは、ほとんどすべてのデータがスーパークラスに関連する単純なケースに適しています。 2番目の方法はより複雑ですが、多くのデータが複数のサブクラスに関連している場合は、うまく機能する可能性があります。 「継承」という言葉は、オブジェクトモデルで継承が提供するものと同じ表現力の一部をデザインが提供することを示すために使用されます。
共有主キーは、スーパークラステーブルの対応するエントリのIDを「継承」することにより、サブクラステーブルのエントリがIDを取得できる手法です。
SOでは、これらの名前のタグが3つあります。各タグの下の[情報]タブには説明があり、タグの下にグループ化された多くの質問があります。
これらのテクニックを紹介するWebサイトもたくさんあります。マーティン・ファウラーのものをお勧めします。私は彼がそれを提示する方法が好きです。ここにいくつかのウェブページがあります: