2017-07-12 5 views
0

私はこれを非常に長い間執着してきましたが、さまざまなデザインを試しましたが、何かがいつも外れています。私はアートスクール/ダンスやフィットネスセンターのビジネスのためのデータベースを設計しています。 私はエンティティの関係と情報を設計しようとしています。 personクラス - 「student」、「guardian」、「teacher」のタイプで構成されているとします。それぞれの人は複数のタイプがあります。 未成年者は、連絡先情報を保持し、登録を処理するための保護者(親、複数のこともある)を持つことになります。大人の中には保護者(老人や障害者)もいます。 /サービス。マルチロールシステムのためのデータモデリングの助け

私は、これを設定する方法(特に連絡先情報)をどのようにして正常なフォームを破ることなく頭を悩ませています。私が最後にやった試みは、下のダイアグラムにあります。 私はどこの連絡先情報を結ぶべきか分かりません。

ヘルプ/ガイダンスは高く評価されます。

enter image description here

答えて

0

私はあなたのモデルにoverabstractingていると思います。一般的ではなく具体的​​なタイプとして異なるロールを実装することで、ロールごとに固有の属性、関係および制約を指定することができます。

は、次の表の図を考えてみましょう:

School table diagram

私はpersonの具体的なサブタイプとしてteacherstudentをモデル化しました。それらは重なり合うことができ、すなわち、人は両方のタイプになり得る。生徒が録音されるときは、student_numberが必要です。教師が録音されると、employee_numberが記録されます。サブタイプ固有の属性を示すためにこれらの属性を追加しました。

Guardianは、人間の多対多の関係としてモデル化されています。これにより、再帰的な関連付けが作成されます。ガーディアンをどのように使いたいかによって、その関係をさらに洗練させることができます。

personに連絡先を追加しました。これは生徒が保護者と異なる連絡先情報を持つことができることを意味します。 1つの制限は、各人が1つだけを有することができるということである。address,phone,mobileおよびemail;それぞれの複数をサポートすることを検討できます。

classは名前や教師を持ち、classstudent間の多対多の関係(student_class)があります。

このモデルでは時間を扱っていないことに注意してください。いつも、これらのシステムは、学期、学期または年のクラス、年間の学生登録などを追跡しなければなりません。

+0

ありがとうございます。私はあなたの例を試して実行します。はい、これはモデルの一部ですが、私はスケジュール、出席、支払いにまだ取り組んでいません。 –

0

これは、リレーショナルデータベースモデルが継承をきちんとサポートしていないためです。それは確かに複数の継承をサポートしていません。

このトピックについては、多くの質問があります。 this oneは良い出発点です。

@ reaanbの回答は、「サブクラスごとに1つのテーブル」の例です。それは良いモデルだと、あなたに明確なスキーマを提供します - それはあなたのアプリケーションがそのすべての可能なサブクラスへの論理マッピング「人」を行う、その後、データ属性を取得するために有することを意味します。要するに

- 何のきれいな解決策はありません。できるだけ一貫して、可能な限りきれいにしてください。ただし、完璧を期待しないでください。

+0

は感謝、入力をありがとう –

+0

リレーショナルモデルは、テーブル継承が含まれていませんが、それはどちらかそれを排除するものではありません。 RMは論理モデリングに対処しますが、継承はテーブルの物理的な実装に適用されます。これは、アプリケーション/クエリ内の努力のビットを保存するかもしれないが、それはさらに、オブジェクト指向プログラミングとデータモデリングの混同を悪化させるので、私はそれが良いでしょうかはわかりません。私はテーブルの継承よりもデータベースの継承についてもっと興奮しています。 – reaanb

関連する問題