私のジレンマを説明するために、まず問題の例から始めましょう (ここから盗まれました)。データベースに次のような GradStudent テーブルがあるとします。
GradStudent:
firstName
lastName
birthDate
courseAssignment
researchGrant
ただし、ティーチング アシスタントのみがコースの割り当てを持ち、リサーチ アシスタントのみが researchGrant を持つため、これら 2 つのうちの 1 つは常に null になります。明らかにこれは最適ではなく、これを行う方が良いでしょう:
GradStudent:
firstName
lastName
birthDate
TeachAsst:
courseAssignment
ResearchAsst:
researchGrant
TeachAsst と ResearchAsst には、GradStudent テーブルからの外部キー (おそらく "studentID" サロゲート) があります。
また、次のように 2 つの完全に別個のテーブルを作成することが最善ではない理由も理解しています。
TeachAsst:
firstName
lastName
birthDate
courseAssignment
ResearchAsst:
firstName
lastName
birthDate
researchGrant
同じ意味を持つ多くの属性を繰り返しているからです。
ただし、次のような共通のフィールドがほとんどない場合、2 つの異なるクラスは理にかなっています (私はそう思います)。
TeachAsst:
name
courseAssignment
payRate
numStudents
ResearchAsst:
name
researchGrant
facultyAdvisor
researchTopic
ここでは、共通の「名前」しかないので、「名前」の属性が 1 つだけの GradStudent スーパークラスを持つのはばかげているでしょうか? 転換点はどこですか?共通情報のスーパークラスを持つ時期や、2 つのクラスを完全に分離する時期をどのように決定しますか? TeachAsst を作成または更新するには、1 つではなく 2 つのテーブルを変更する必要があるため、スーパークラスを使用すると、ほとんどの CRUD が少し難しくなります。
別の例として、あなたが取り組んでいる DB に、さまざまな電子デバイスの情報を測定することが含まれているとします。また、カメラと携帯電話には共通の長さ/幅/高さがありますが、他の測定値のほとんどは一致しません (たとえば、カメラには音声情報がなく、携帯電話にはレンズやビューポートの測定値がありません)。 )。そのため、少量の共通情報をスーパークラス テーブルに入れるよりも、cameraData テーブルと mobileData を完全に分離する方が簡単に思えます。どう思いますか?サブクラスの記述データのわずかな割合であっても、共通データを常にスーパークラスにまとめる必要があるという一般的な規則はありますか?
編集: 大学院生の例では、大学院生はティーチング アシスタントまたはリサーチ アシスタントのいずれかであり、役割を切り替えることはなく、両方でもどちらでもないと仮定しましょう。