私の個人的な経験から、これによりすべての開発プロセスが簡単になり、将来の変更に非常に柔軟になるため、扱うデータを理解、分類、モデル化するのに時間をかけていることは素晴らしいことです。そして、あなたもあなたがすでにこれを知っていると確信しています。
予備的なデータモデルと想定されるビジネスルール
私はあなたの仕様を理解するために、あなたの質問を読み、ダイアグラムを綿密に調べた後に想定したビジネスルールのリストを定義しました。そのようなリストを定義した後、外部プラットフォーム(Dropbox)に.PDF文書としてアップロードすることを決めたIDEF1X [1]データモデルを派生させました。これは、その形式のため、このデータモデルは埋め込み画像にうまく適合しないためです。これらの2つの手段は、前進を続けるために解決すべき側面というタイトルのセクションで以下に列挙するいくつかの重要なポイントの参照として役立ちます。
まず、これは…
それはあくまでも予備的なものなので、目的の最終データモデルを完成させるための手段として考えてください。
想定されるビジネスルール
上記の予備的なデータモデルは、次のように列挙するビジネスルール(質問から推測)のコレクションから派生したものです。
組織とプロファイル
注Profile
現在の同義語として理解されていますPerson
。
- アンは
Organization
の友人である一対多 Profiles
。
- アンは
Organization
の友人である一対多 Organizations
。
- アンは
Organization
のメンバーである一対多 Organizations
。
- Aは
Profile
のメンバーである一対多Organizations
。
- Aは
Profile
の友人である一対多 Profiles
。
- Aは
Profile
のメンバーである一対多 Profiles
。
場所と住所
Organization
は1 対多を所有しLocations
ます。
- A
Location
は1対多 LocationTypes
(特定の時点で1つだけ)で分類されます。
Location
有していてもよい一対多 Addresses
(1 Physical
、1のためにShipping
、1のためにBilling
、または1つすべての前記の目的を果たす、または1つをそのコンバイン二つの目的と機能する別の唯一それらのを)。
Address
保持されてもよい1対多 Profiles
または、別の言い方を、Profile
続けて1対多 Addresses
。
特定をAddress
して使用してもよい一対多 Profiles
(として機能Physical
するための1 Profile
のために使用されているBilling
ことによって異なるものなど)。したがって、およびのAddress
場合Locations
と同様に動作しProfiles
ます。
- したがって、個人
Address
は、同時に、タイプPhysical
、Shipping
および である可能性がありBilling
ます。
場所と役割
- A
Location
は1対多で 開きますRoles
。
- A
Role
は1対多 で実行できますLocations
。
- Aは、
Profile
(それはのようにセットされた後Member
のOrganization
)を行うことができる1対多数 Roles
で、一対多 Locations
(しかし唯一の特定のRole
各々におけるLocation
特定の時点で、すなわち、決して二つ以上 Roles
を同時に)。
前進し続けるために解決すべき側面
データモデルの解像度を向上させるために、関連するポイントのリストを以下に示します。これらのポイントは、解決したら、この目標を達成するのに役立ちます。
Profile
あなたの文脈での用語はの用語と同様(または同じ)の意味を持つと想定しましたPerson
が、少し異なる場合があります。このように、あなたのシナリオでは、エンティティOrganization
とPerson
サブタイプはProfile
何ですか?
缶Profile
(またはPerson
)独自の一対多 EmailAddresses
、またはであるProfile
(またはPerson
)に固定され、正確に1 EmailAddress
?
あなたはのための可能性を提供したいと考えOrganization
介して接触させるTelephone
とEmail
、またはあなたはそれが唯一の可能であることを制限したいProfile
(またはPerson
)?
私はa Location
がタイプの1つ Address
に固定されていると思いPhysical
ますが、これは正しいですか?
a Location
を1対多の異なるで共有することは可能ですOrganizations
か、そうでなければ、1だけLocation
が所有できますか? Organization
a Member
とa であるという事実はFriend
同じであるとコメントで述べました。あなたが私の提案の予備的データモデルで見ることができるように、私はあなたに、元の仕様を踏襲し、会員のすべての可能な組み合わせを示したと友情の間Organization
およびProfile
(またはPerson
私はそれが可能な限り最高の定義の努力に役立つことができることを考えているので、異なるエンティティで)シナリオのその部分の構造。この意味で:
an Organization is a Member of another Organization
この声明a Profile (or Person) is a Member of an Organization
は、と呼ばれるエンティティに関する声明とは異なる効果があると思いLocation
ます。
- あなたはデータモデルに見ることができるように、私はと思う
Role
のは、Owner
のためにのみ有効であるOrganization
と、私には、有効なRoles
ためProfile
(またはPerson
)、内側にLocation
あるAdmin
とMember
。これについてどう思いますか?あなたはあなたの状況に適用されるビジネスルールに直接接触しているので、私の仮定が正しいかどうか教えてください。
Profile
(またはPerson
)Roles
同じ内部で異なるプレイはできますLocation
か?つまり、a Person
は同時に、Admin
aもaもMember
同じLocation
ですか?これに関するルールは何ですか?
同じProfile
(またはPerson
)が別ので異なっRoles
て遊ぶことができると思いますLocations
。例えば:特定Profile
(またはPerson
)で「管理者」であり、Location
「1」、及びこの同じProfile
(又はPerson
)「があるMember
」にLocation
同時に、「2」。私は正しいですか?
特定の人Location
がLocationTypes
同時に別の人を持つことは可能ですか、それとも個人Location
が1人だけを保持するように固定されていLocationType
ますか?
属性Organization.Website
は、「dba.stackexchange.com」などの特定の組織のWebサイトアドレスを表しますか?
場合Profile
(と理解「1」Person
)であるMember
(又はFriend
)のProfile
「2」は、それがために可能であるProfile
行うために「1」Role
にLocation
することによって所有Profile
「2」?そのようなシナリオはan Organization
とMember
Person
soの関係に対してのみ有効だと思いますが、どう思いますか?
同様に、Organization
「1」が「2」のMember
(またはFriend
)である場合、「1」がOrganization
「2」が所有Organization
するRole
で実行することは可能ですか?繰り返しますが、私はシナリオのこの種の間の関係のためにのみ有効であることを考えると、これは正しいでしょうか?Location
Organization
Organization
Member
Person
私はこのquestions-を書いています-whileこの点で、私は関係するだけで3種類の関係があることを言うのは合理的であると考えるOrganizations
とはPersons
、私たちは定義することができます。
- (a)「」としてのan
Organization
とa の関係。Person
Membership
- (b)a
Person
と別のPerson
「Friendhip
」としての関係。
- (c)個人と別の個人との関係を説明するために、意味のある名前をまだ見つけていません。
Organization
Organization
- (a)、(b)、(c)についてのご意見をお聞かせください。
が同時に1対多の異なる(または)Organization
になることは可能ですか?または、別の1つとのみ関係を持つことのみが可能です。Friend
Member
Organizations
Organization
Organization?
最初の進歩を表す連続データモデル
上記の保留中の側面に対するあなたの回答と解決策に注目して、以下を作成しました…
私はまだそれには慣れていませんが、この新しいデータモデルは次のビジネスルールを表しています。
- Aは
Profile
あるのいずれかOrganization
またはPerson
。[2]
- Aは、
Profile
の提供の友人かもしれ一対多 FriendProfiles
、およびProfile
の受諾友人かもしれ一対多 FriendProfiles
。[3]
- A
Location
は1対多で 構成されますLocations
。[4]
その後の特定のコメントへの回答
関心事の分離[たとえば、LocationAddressとProfileAddress]をメモ/合成することは本当に興味深いです。正しい関係なしに急いですべてを保持したかったのは明らかです[面白いことに、元のERDには問題がありました]。
はい、それは良い比較です。ただし、これは懸念の分離とは言いませんが(これは確かに、アプリケーションのプログラミングと設計の基本原則です)、この用語は一般にアプリケーション開発段階に関係しており、現在、データを理解し、その論理構造を設計する段階。
私の個人的な経験から、このフェーズは、重要なことを全体のコンテキストに入れることと関係があると思います。関心のある特定のシナリオに関連するさまざまなエンティティ間に存在する関連を確認することと関係があります。これらをデータモデルで表現します。あなたはコメントされている特定のケースでは、Address
エンティティがあり、他のエンティティと1との接続の異なる種類の持っているProfile
として別のものをLocation
。
そして、はい、何かが正しくない、または自然に感じられない場合、適切なデータを理解するためにさらに努力する必要があることを示している可能性があります。このように、Address
a Profile
とanの関係はエンティティーによって処理Address
できると思うので、エンティティーはもっと注意する必要があると私が考えるものの1つですLocation
(すべてLocation
に少なくとも1つの物理的Address
)、したがって、最新のモデルに示されている関連エンティティを却下することができProfileAddress
ますが、これらのポイントの分析を続けて、あなたのアイデアを教えてください。
また、IDEF1Xでは、読みやすさを向上させるためにエンティティのPK / FK表記を変更するのが一般的ですか(例:ProfileId-LocationOwnerProfileId)?
はい。IDEF1Xは、使用されているエンティティに応じてそのような属性の意味を把握するために、FOREIGN KEYSを指定するためにロール名を使用することを推奨しているため、非常に巧妙な意見です。これは主キーの移行の概念にも強く関連していることにも注意してください。実際、役割名の使用はIDEF1Xの前にあります。これは、EF Codd博士が1970年の独創的なテキストで最初に提示したためです。このようにして、IDEF1X標準がリレーショナルモデルに対して忠実に維持していることがはっきりとわかります。
私はあなたが特に好きではない/それがモデル化していないと感じているものをソリューションで/学ぶのに興味がありますか?
Address
エンティティについて既に上記で説明した詳細に加えて、特定の特定のRoles
によって実行されたがとのどちらで同等かはわかりません。私の観点では、最初にを関連付ける必要があります。次に、これを特定ので実行するように指定しますが、シナリオをよりよく理解しているため、このルールは必要ない場合があります。この点で、私は私が文脈の説明や知っておくことは非常に参考になるという事実について主張するつもりの意味にこのデータ構造の弾力の将来のユーザーのことを、と、Profile
Location
Organization
Person
Person
Organization
Organization
Person
Role
Location
Organization
Profile
Location
、ただしこれは機密情報と見なされる可能性があることを理解しているため、これは制限となります。
現在の構造では、誰でも(Organization
またはPerson
)は誰でも(再び、Organization
またはPerson
)に関連付けることができ、Role
どこでも(Location
)何でもできる()ことができるようですが、これは正確に、あなたとユーザーがこのデータベースに期待していることですもちろん、そのために明確に定義された制約を提供します。その場合は、ほぼ最終的なソリューションを提供しています。当然のことながら、この状況ではあなたの意見が決定的であるため、このアイデアを分析し、結論を知らせて、最終的な手順を実行できるようにする必要があります。
フィージブルセカンドアドバンス
残念ながら、コミュニケーションは数週間前に停止しました。これは、あなたが満たさなければならない仕事の責任のためだと思います。これは完全に合理的です。もっと安定したロバストなモデルを開発できれば、もっと多くのコンテンツが得られたでしょうが、以前の相互作用により、私はあなたを正しい方向に向けることができたと思います。
この質問と回答のプロセスですでに提示されていることに加えて、以前のデータモデルからの新しい進展を提供することは、同様の問題を抱える他の求職者に役立つ可能性があると考えています。それで、私は作成しました…
組織とプロファイルの予備データモデル— 2番目の進歩
このようなデータモデルに見られるように、私が削除されている多対多私は間先行モデルに描かれているという関係Profile
とAddress
与えられたがので、Profile
既にに関連する一対多 Addresses
その所有経由しLocations
。
この新しい進歩に示されているもう1つの変更は、特定のLocation
ユーザーが1対多 で所有できる可能性が含まれていることProfiles
です。したがって、私は変更されているLocation
(却下によってPRIMARY KEY LocationOwnerProfileId
属性)、次いで(連想エンティティ加え多対多関係する)Profile
とをLocation
。
ノート
1. IDEF1Xは、1993年12月に米国国立標準技術研究所(NIST)によって標準として定義された、非常に推奨されるデータモデリング手法です。
2.これは、(スーパー)タイプ-サブタイプクラスターのオカレンスです。あなたが興味を持っているのであれば、ここに私がこの種の関係をより詳細に扱う答えがあります。
3. 多対多の階層関係の例であり、「部品展開問題」に決定的な解決策を与えた構造に非常に似ています。もちろん、そのような解決策は1970年にエドガーフランクコッド博士によって非常に影響力のある論文「大規模な共有データバンクのデータのリレーショナルモデル」で紹介されました。
4.そのため、これは1対多(または多対1)の階層関係のインスタンスです。