アプリケーションの設計に対する従来の ER ダイアグラム データベース中心のアプローチから来て、OO アプローチを使用してクラスを実装すると、以下の例に示すような混乱が生じます
1) 多対多の関係のクラスを実装します。
次の関係を持つ教授と大学の 2 つのエンティティがあるとします (SO を描画する方法がわかりません。それ以外の場合は、例を図で示したはずです)。
- 1 人の教授が、講師、客員講師、研究室アシスタント、研究者など、さまざまな能力でさまざまな大学で働く場合があります。
- 1つの大学には、講師、ゲスト講師、ラボアシスタント、研究員など、さまざまな立場で働く多くの教授がいる場合があります。
これを ER の方法で行うと、次のようなテーブルが得られます
CollegeTable (CollegeId、CollegeName)
ProfessorTable (ProfessorId、ProfessorName))
LecturerTable (LecturerId、CollegeId、ProfessorId、Timings))
したがって、多対多の関係は、エンティティとその他の関係固有のデータの両方の主キーを含むテーブルです。テーブルの行を表すクラスを作成する必要がある場合、それらは次のようになります
class CollegeData
{
string CollegeId;
string CollegeName;
}
class ProfessorData
{
string ProfessorId;
string ProfessorName;
}
class LecturerData
{
string CollegeId;
string ProfessorId;
DateTime Timings;
}
しかし、OOPで同じことを行い、エンティティをクラスにマッピングすると、次のようになります
class College
{
string CollegeId;
string CollegeName;
}
class Professor
{
string ProfessorId;
string ProfessorName;
}
class Lecturer
{
College aCollege;
Professor aProfessor;
DateTime Timings;
}
したがって、適切なオブジェクト指向の方法を実行すると、システムにさらに負荷がかかります。これは、ID フィールドだけではなく、多対多クラスで本格的なクラス オブジェクトを作成するためです。タイミングを編集したり、教授を変更したりできる講師の追加/編集ページがあるとしたら、この意味を考慮してください。本格的な教授または大学オブジェクトは必要なく (追加/編集用の独自のマスター ページがあるため)、それらの ID のみが必要です。
2) 1 対 1 の関係のクラスを実装します。
上記の例を拡張して、次の制約を持つ学部長エンティティがあるとします (簡単にするために、学部長は教授ではないと仮定します)
- 1 つのカレッジには 1 人の学部長を配置でき、1 人が 1 つのカレッジのみで学部長として働くことができます。
再び、私たちが持つERの方法
class DeanData
{
string DeanId;
int DeanExp;
}
class CollegeData
{
string CollegeId;
string CollegeName;
string DeanId;
}
、OOPの方法でそれを行いながら
class Dean
{
string DeanId;
int DeanExp;
}
class College
{
string CollegeId;
string CollegeName;
Dean aDean;
}
また、データを保存またはロードするときに、オブジェクト指向オブジェクトをリレーショナル データベース内のテーブル構造表現にマッピングする際の問題もあります。「冗長性」を持たずに、適切なオブジェクト指向の方法で上記を実行できた方法はありますか? それとも、これは OO の方法で行うことに対して支払われるペナルティですか?