Voilà je me demandais comment on faisait pour intégrer la notion d'héritage dans mySQL, enfin, comment représenter l'héritage entre les tables.
Par exemple :
Imaginons un table Vehicule(id, marque, année, km, .... ) et je souhaite faire une table Camion avec des champs supplémentaire. De manière logique, c'est un héritage.
Mais de manière pratique, je fais comment ? Je crée une clé étrangère entre Vehicule.id et un Camion.vehiculeid ou je dis que Camion.id est identique à Vehicule.id ?
publicclassDBContext:DbContext{// Votre contexte a été configuré pour utiliser une chaîne de connexion « DBContext » du fichier // de configuration de votre application (App.config ou Web.config). Par défaut, cette chaîne de connexion cible // la base de données « tests_forum_zds.DBContext » sur votre instance LocalDb. // // Pour cibler une autre base de données et/ou un autre fournisseur de base de données, modifiez // la chaîne de connexion « DBContext » dans le fichier de configuration de l'application.publicDBContext():base("name=DBContext.cs"){}publicDbSet<Vehicule>Vehicules{get;set;}publicDbSet<Truck>Trucks{get;set;}}
le contexte de base de données
Activons les migrations et regardons le code qui génèrera la bdd :
Il n'y a qu'une seule table de créée qui rassemble les données des deux jeux d'entités.
Le "Discriminator" n'est qu'une simple chaîne de caractère qui contient "Vehicule" ou "Truck" pour permettre de retrouver les camions et les non camions.
Ce sera identique sous Doctrine bien qu'il propose les 2 solutions. En règle général on préférera n'avoir qu'une seule table contenant tous les véhicules quelque soit leur type (camion, vélo, moto, voiture, etc) et le discrimant permet à l'ORM de retrouver ses petits quand il doit reconstituer les objets et/ou mapper les collections. Les champs présent pour camion seront NULL pour les autres et inversement.
Connectez-vous pour pouvoir poster un message.
Connexion
Pas encore membre ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte