Les différents types de voitures illustrent un problème général qui se répète sans cesse dans la modélisation des données. On l'appelle "généralisation / spécialisation" dans la modélisation ER, et "superclasse / sous-classe" dans la modélisation d'objet.
Un modélisateur d'objets utilise les fonctionnalités d'héritage intégrées au modèle d'objet pour résoudre le problème assez facilement. Les sous-classes étendent simplement la super-classe.
Le modeleur relationnel est confronté à un problème. comment concevoir les tables de manière à imiter les avantages que l’on obtiendrait de l’héritage?
La technique la plus simple s'appelle l' héritage d'une table . Les données sur tous les types de voitures sont regroupées dans un seul tableau pour les voitures. Il existe une colonne, type_car, qui regroupe toutes les voitures d'un même type. Aucune voiture ne peut appartenir à plus d'un type. Si une colonne ne concerne pas, par exemple, les voitures électriques, elle sera laissée à NULL dans les lignes relatives aux voitures électriques.
Cette solution simple fonctionne bien pour les cas plus petits et plus simples. La présence d'un grand nombre de valeurs NULL ajoute un tout petit peu à la surcharge de stockage et un peu à la charge de récupération. Le développeur devra peut-être apprendre la logique à trois valeurs SQL si des tests booléens sont effectués sur des colonnes nullables. Cela peut être déconcertant au début, mais on s'y habitue.
Il existe une autre technique, appelée héritage de table de classe . Dans cette conception, il existe des tables séparées pour gas_car, electric_car et hybrid_car, en plus d'une table combinée, voiture, pour chacune d'entre elles. Lorsque vous souhaitez obtenir toutes les données sur un type de voiture spécifique, vous joignez la table des voitures à la table spécialisée appropriée. Il y a moins de valeurs NULL dans cette conception, mais vous en faites davantage. Cette technique fonctionne mieux dans les cas les plus grands et les plus complexes.
Il existe une troisième technique appelée clé primaire partagée. Cette technique est souvent utilisée conjointement avec l'héritage des tables de classes. Les tables spécialisées des sous-classes ont pour clé primaire une copie de la clé primaire de l'entrée correspondante dans la table car. Cette colonne id peut être déclarée comme étant à la fois la clé primaire et une clé étrangère.
Cela implique un peu plus de programmation lorsque de nouvelles voitures doivent être ajoutées, mais cela rend les jointures simples, faciles et rapides.
Les super-classes et les sous-classes se produisent tout le temps dans le monde réel. N'aie pas peur. Mais testez votre conception initiale pour en vérifier les performances. Si votre première tentative est simple et saine, vous pourrez l’ajuster pour l’accélérer.