「どちらか一方」の関係をモデル化するにはどうすればよいですか?


12

Softwareという名前のエンティティと、2つのサブタイプFreeSoftwareおよびNonFreeSoftwareがあるとします。NonFreeSoftwareエンティティには、購入日、ベンダーなどの属性があります。FreeSoftwareエンティティには、ライセンス、ソースコードのURLなどの属性があります。

それで、別のエンティティであるOperatingSystemをモデル化したい場合、どうすればよいですか?ソフトウェアには「ある」関係がありますが、FreeSoftwareおよびNonFreeSoftwareには「どちらかまたは両方」の関係があります。

この階層を分析する方法に何か欠けていると思います。


この回答を確認してください。この種の関係をモデル化する実装の詳細について説明します。
Nick Chammas

回答:


8

これを管理する方法は、サブタイプをスーパータイプによって決定する必要があることです(つまり、サブタイプのPKは、サブタイプからスーパータイプへのFKでもあります)。

問題は、何かが本当に相互に排他的であるかどうかを理解することです。サブタイプの属性はそれらのサブタイプにのみ適用されますが、一部のサブタイプは相互に排他的であり、一部はそうでない場合があります。

相互に排他的なサブタイプがある場合は、スーパータイプのパーティション属性を使用して、(2つ以上の)相互に排他的なサブタイプのどれを適用するかを指定できます。このパーティショニング属性は、制約またはトリガーと共に使用して、相互排他性を適用できます。

相互に排他的でないサブタイプがある場合、パーティション属性を使用せずにそれらを存在させることができます。

次のデータモデルを検討してください。

ERD

3つのスーパータイプがFREE_SOFTWAREありNON-FREE_SOFTWAREますが、SOFTWARE.free_not_freeフラグのパーティション属性に基づいて、タイプとタイプは相互に排他的です。ソフトウェアOPERATING_SYSTEMが無料かどうかに関係なく、特定のソフトウェアも潜在的にです。


1
少しOT:このER図を作成するために何を使用しましたか?
Daniel Serodio

@DanielSerodio-James Martin ERD表記に基づいて自分で作成したスマートシェイプでVisioを使用しました。図形はカスタムの線のテクスチャを使用して非公式の外観を提供します。これは、ダイアグラムが「スケッチ」またはドラフトのデザインであるときに人々に思い出させるのに役立ちます。
Joel Brown

@JoelBrownステンシルを共有してもよろしいですか?これらは本当にいい形です
imoatama 2016年

2
@imoatama -それはしばらくしているが、私は最終的にここにステンシルを投稿する暇:moosewarevisioerd.codeplex.com ステンシルのスマート形状が古いのVisioのバージョンとの行動のいくつかのために建設されたことを説明のようにご注意を関係コネクタの形状は少し不安定になる可能性があります。いつか私はこれを修正するために移動します。
Joel Brown、

1

OperatingSystemが完全に新しいエンティティになるのはなぜですか?それはそれがそうであるので、それはソフトウェアのものに分類されるべきです。また、OS(クローズドソースの場合)には購入日、ベンダーなどがあります。オープンソースOSには、ライセンス、ソースコードURLなどがあります。

私はSoftwareTypeこれらの線に沿って何かとの関係をお勧めします。このとき、ソフトウェアがOS、アプリケーション、またはサポートしている他の種類のソフトウェアのいずれであるかを指定できます。


オペレーティングシステムはソフトウェアの専門分野であるため、独立したエンティティにしたいと考えています。他のソフトウェアにはない属性(カーネルタイプ、RTOS-or-notフラグ、マルチユーザーフラグなど)がある場合があります。
jl6 '10 / 06/12

1
@ jl6私はまだここで違うように頼みました。すべてのソフトウェア(OSであるかどうかに関係なく)には特定の属性があります。それらは他の場所に保存できます。OSを分離することで、スケーラビリティを最小限に抑えています。
トーマス・ストリンガー

私が正しく理解していれば、SoftwareエンティティとSoftwareTypeエンティティを推奨しています。Free、NonFree、OperatingSystemはすべて、SoftwareTypeの異なるインスタンスにすぎませんか?あなたは正しいと確信していますが、さまざまなタイプのさまざまな属性をどこに保存しますか?
jl6 '10 / 06/12
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.