Il existe essentiellement trois choix pour traduire la généralisation en un modèle de base de données
1. Un tableau par classe de béton
Créer des tables Admin , Teacher et Student . Chacune de ces tables contient des colonnes pour tous les attributs et relations de User
- Pro
- Tous les champs d'une sous-classe concrète sont dans la même table, donc aucune jointure n'est nécessaire pour obtenir toutes les données des étudiants
- Contraintes de validation des données faciles (telles que les champs obligatoires pour
Student)
- Con
- Tous les champs de
Usersont dupliqués dans chaque table de sous-classe - Clés étrangères vers
Userdoivent être divisés en trois champs FK. Un pourAdmin, un pourTeacheret un pourStudent.
- Tous les champs de
2. Sur table pour l'ensemble de généralisation
Dans ce cas, vous n'avez qu'un seul appel de table User qui contient tous les champs de User + tous les champs de toutes les sous-classes de User
- Pro
- Tous les champs sont dans la même table, donc aucune jointure n'est nécessaire pour obtenir tous les
Userdonnées - Aucun fractionnement des FK vers
User
- Tous les champs sont dans la même table, donc aucune jointure n'est nécessaire pour obtenir tous les
- Con
- De nombreux champs ne sont jamais utilisés. Tous les champs spécifiques à
StudentetTeacherne sont jamais remplis pour lesAdminset vice versa - Validation des données telles que les champs obligatoires pour une classe concrète telle que
Studentdevient assez complexe car il ne s'agit plus d'un simpleNot Nullcontrainte.
- De nombreux champs ne sont jamais utilisés. Tous les champs spécifiques à
3. Une table par classe concrète, et une pour la superclasse
Dans ce cas vous créez des tables pour chacune des sous-classes concrètes et vous créez une table pour la classe User . Chacune des tables de sous-classes concrètes a un FK obligatoire pour User
- Pro
- Schéma le plus normalisé :pas de champs répétés pour les attributs de l'utilisateur et pas de champs inutilisés.
- Aucun fractionnement des FK vers
User - Contraintes de validation des données faciles (telles que les champs obligatoires pour
Student)
- Con
- Vous devez interroger deux tables si vous voulez toutes les données d'un
Student - Des règles de validation complexes pour s'assurer que chaque
Userl'enregistrement a exactement unAdmin,TeacherouStudentenregistrer.
- Vous devez interroger deux tables si vous voulez toutes les données d'un
Laquelle de ces options vous choisissez dépend d'un certain nombre de choses telles que le nombre de sous-classes, le nombre d'attributs dans la sous-classe ou la superclasse, le nombre de FK à la superclasse, et probablement quelques autres choses que je n'ai pas fait réfléchissez.