私の個人的な経験から、これによりすべての開発プロセスが簡単になり、将来の変更に非常に柔軟になるため、扱うデータを理解、分類、モデル化するのに時間をかけていることは素晴らしいことです。そして、あなたもあなたがすでにこれを知っていると確信しています。
予備的なデータモデルと想定されるビジネスルール
私はあなたの仕様を理解するために、あなたの質問を読み、ダイアグラムを綿密に調べた後に想定したビジネスルールのリストを定義しました。そのようなリストを定義した後、外部プラットフォーム(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は同時に、Adminaも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 Personsoの関係に対してのみ有効だと思いますが、どう思いますか?
同様に、Organization「1」が「2」のMember(またはFriend)である場合、「1」がOrganization「2」が所有OrganizationするRoleで実行することは可能ですか?繰り返しますが、私はシナリオのこの種の間の関係のためにのみ有効であることを考えると、これは正しいでしょうか?LocationOrganizationOrganizationMember Person
私はこのquestions-を書いています-whileこの点で、私は関係するだけで3種類の関係があることを言うのは合理的であると考えるOrganizationsとはPersons、私たちは定義することができます。
- (a)「」としてのan
Organizationとa の関係。PersonMembership
- (b)a
Personと別のPerson「Friendhip」としての関係。
- (c)個人と別の個人との関係を説明するために、意味のある名前をまだ見つけていません。
OrganizationOrganization
- (a)、(b)、(c)についてのご意見をお聞かせください。
が同時に1対多の異なる(または)Organizationになることは可能ですか?または、別の1つとのみ関係を持つことのみが可能です。FriendMemberOrganizationsOrganizationOrganization?
最初の進歩を表す連続データモデル
上記の保留中の側面に対するあなたの回答と解決策に注目して、以下を作成しました…
私はまだそれには慣れていませんが、この新しいデータモデルは次のビジネスルールを表しています。
- Aは
ProfileあるのいずれかOrganization またはPerson。[2]
- Aは、
Profileの提供の友人かもしれ一対多 FriendProfiles、およびProfileの受諾友人かもしれ一対多 FriendProfiles。[3]
- A
Locationは1対多で 構成されますLocations。[4]
その後の特定のコメントへの回答
関心事の分離[たとえば、LocationAddressとProfileAddress]をメモ/合成することは本当に興味深いです。正しい関係なしに急いですべてを保持したかったのは明らかです[面白いことに、元のERDには問題がありました]。
はい、それは良い比較です。ただし、これは懸念の分離とは言いませんが(これは確かに、アプリケーションのプログラミングと設計の基本原則です)、この用語は一般にアプリケーション開発段階に関係しており、現在、データを理解し、その論理構造を設計する段階。
私の個人的な経験から、このフェーズは、重要なことを全体のコンテキストに入れることと関係があると思います。関心のある特定のシナリオに関連するさまざまなエンティティ間に存在する関連を確認することと関係があります。これらをデータモデルで表現します。あなたはコメントされている特定のケースでは、Addressエンティティがあり、他のエンティティと1との接続の異なる種類の持っているProfileとして別のものをLocation。
そして、はい、何かが正しくない、または自然に感じられない場合、適切なデータを理解するためにさらに努力する必要があることを示している可能性があります。このように、Addressa Profileとanの関係はエンティティーによって処理Address できると思うので、エンティティーはもっと注意する必要があると私が考えるものの1つですLocation(すべてLocationに少なくとも1つの物理的Address)、したがって、最新のモデルに示されている関連エンティティを却下することができProfileAddressますが、これらのポイントの分析を続けて、あなたのアイデアを教えてください。
また、IDEF1Xでは、読みやすさを向上させるためにエンティティのPK / FK表記を変更するのが一般的ですか(例:ProfileId-LocationOwnerProfileId)?
はい。IDEF1Xは、使用されているエンティティに応じてそのような属性の意味を把握するために、FOREIGN KEYSを指定するためにロール名を使用することを推奨しているため、非常に巧妙な意見です。これは主キーの移行の概念にも強く関連していることにも注意してください。実際、役割名の使用はIDEF1Xの前にあります。これは、EF Codd博士が1970年の独創的なテキストで最初に提示したためです。このようにして、IDEF1X標準がリレーショナルモデルに対して忠実に維持していることがはっきりとわかります。
私はあなたが特に好きではない/それがモデル化していないと感じているものをソリューションで/学ぶのに興味がありますか?
Addressエンティティについて既に上記で説明した詳細に加えて、特定の特定のRolesによって実行されたがとのどちらで同等かはわかりません。私の観点では、最初にを関連付ける必要があります。次に、これを特定ので実行するように指定しますが、シナリオをよりよく理解しているため、このルールは必要ない場合があります。この点で、私は私が文脈の説明や知っておくことは非常に参考になるという事実について主張するつもりの意味にこのデータ構造の弾力の将来のユーザーのことを、と、ProfileLocationOrganizationPersonPersonOrganizationOrganizationPersonRoleLocationOrganizationProfileLocation、ただしこれは機密情報と見なされる可能性があることを理解しているため、これは制限となります。
現在の構造では、誰でも(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)の階層関係のインスタンスです。