一般化をデータベースモデルに変換するには、基本的に3つの選択肢があります
1。具体的なクラスごとに1つのテーブル
テーブルを作成するAdmin
、Teacher
およびStudent
。これらの各テーブルには、User
のすべての属性と関係の列が含まれています
- プロ
- 具象サブクラスのすべてのフィールドは同じテーブルにあるため、すべての生徒のデータを取得するために結合する必要はありません
- 簡単なデータ検証の制約(
Student
の必須フィールドなど) )
- Con
User
のすべてのフィールド 各サブクラステーブルで複製されますUser
への外部キー 3つのFKフィールドに分割する必要があります。Admin
用に1つ 、Teacher
用に1つ 1つはStudent
用です 。
2。一般化セット全体のテーブル上
この場合、User
を呼び出すテーブルは1つだけです。 User
のすべてのフィールドが含まれています +User
のすべてのサブクラスのすべてのフィールド
- プロ
- すべてのフィールドが同じテーブルにあるため、すべての
User
を取得するために結合する必要はありません。 データ - FKを
User
に分割しない
- すべてのフィールドが同じテーブルにあるため、すべての
- Con
- 使用されないフィールドがたくさんあります。
Student
に固有のすべてのフィールド およびTeacher
Admins
に入力されることはありません 逆もまた同様です -
Student
などの具体的なクラスの必須フィールドなどのデータ検証 単純なNot Null
ではなくなったため、かなり複雑になります 制約。
- 使用されないフィールドがたくさんあります。
3。具象クラスごとに1つのテーブル、およびスーパークラス用に1つのテーブル
この場合、具体的なサブクラスごとにテーブルを作成し、クラスUser
のテーブルを作成します。 。各具象サブクラステーブルには、User
に必須のFKがあります。
- プロ
- 最も正規化されたスキーマ:ユーザーの属性に繰り返されるフィールドや未使用のフィールドはありません。
- FKを
User
に分割しない - 簡単なデータ検証の制約(
Student
の必須フィールドなど) )
- Con
-
Student
のすべてのデータが必要な場合は、2つのテーブルをクエリする必要があります - 各
User
を確認するための複雑な検証ルール レコードには1つのAdmin
があります 、Teacher
またはStudent
記録します。
-
これらのオプションのどれを選択するかは、サブクラスの数、サブクラスまたはスーパークラスの属性の数、スーパークラスへのFKの数、そしておそらく私がしなかった他のいくつかのことなど、いくつかのことによって異なります。考えてみてください。