11-02-2014, 10:27 PM
Bonjour,
N'ayant pas fait de BDD depuis longtemps, j'ai voulu m'y remettre.
Je me fait un diagramme de classe, et là, question : le polymorphisme dans une BDD ça donne quoi ?
Ma première réaction : QUOI ? On est en 2014 et les BDD ne gèrent toujours pas l'héritage !?
Ma seconde réaction : BDD relationnel signifie orienté relation, et non orienté objet pardi !
Pensons donc relation !
Mon besoin à travers un exemple :
Un Passager peut être dans un et un seul Véhicule.
Il y a plusieurs TypeDeVéhicule, qui ont chacun un nom et une description.
En Véhicule nous pouvons avoir des Voitures, des Camions, des Bateaux ...etc.
Chaque spécialisation a ses propres informations, et des informations en commun (une immatriculation par exemple).
C'est tout. Oui je bloque là dessus !
J'ai donc au moins une table Passager, avec une clé étrangère vers la table Véhicule j'imagine.
Du coup, après m'être renseigné sur ce forum et d'autres, je trouve 2 solutions possibles :
Numéro 1 (STI) : On concatène tous les attributs de toutes les spécialisations dans la même table Véhicule, avec une clé étrangère nommé type vers TypeDeVéhicule.
Désavantage : plein de NULL, cohérence à maintenir entre la clé étrangère type et les valeurs des attributs qu'elle conditionne.
Numéro 2 (MTI) : Chaque spécialisation a sa table, avec une clé étrangère vers Véhicule. Chaque instance de Véhicule doit avoir une clé étrangère vers TypeDeVéhicule ?
Désavantage : cohérence à maintenir entre une instance d'une spécialisation et le type de l'instance de véhicule pointé par celle-ci, et rien n'empêche plusieurs instances de spécialisation de pointer vers la même instance de Véhicule, on peut donc avoir un Véhicule qui est 3 fois une Voiture, 1 fois un Bateau et de type Camion.
(La numéro 3 (CTI) qui consiste à ce que chaque spécialisation a sa propre table avec duplication d'attributs n'est pas possible car l'absence de la classe générique Véhicule empêche d'avoir une clé étrangère vers celle-ci dans Passager).
J'ai vraiment l'impression de passer à coté de quelque chose. J'ai oublié quoi ?
Merci de m'aider !
PS: Contrainte supplémentaire importante, la BDD doit être facilement accessible et faire profiter au maximum des possibilités du framework CakePHP.
N'ayant pas fait de BDD depuis longtemps, j'ai voulu m'y remettre.
Je me fait un diagramme de classe, et là, question : le polymorphisme dans une BDD ça donne quoi ?
Ma première réaction : QUOI ? On est en 2014 et les BDD ne gèrent toujours pas l'héritage !?
Ma seconde réaction : BDD relationnel signifie orienté relation, et non orienté objet pardi !
Pensons donc relation !
Mon besoin à travers un exemple :
Un Passager peut être dans un et un seul Véhicule.
Il y a plusieurs TypeDeVéhicule, qui ont chacun un nom et une description.
En Véhicule nous pouvons avoir des Voitures, des Camions, des Bateaux ...etc.
Chaque spécialisation a ses propres informations, et des informations en commun (une immatriculation par exemple).
C'est tout. Oui je bloque là dessus !
J'ai donc au moins une table Passager, avec une clé étrangère vers la table Véhicule j'imagine.
Du coup, après m'être renseigné sur ce forum et d'autres, je trouve 2 solutions possibles :
Numéro 1 (STI) : On concatène tous les attributs de toutes les spécialisations dans la même table Véhicule, avec une clé étrangère nommé type vers TypeDeVéhicule.
Désavantage : plein de NULL, cohérence à maintenir entre la clé étrangère type et les valeurs des attributs qu'elle conditionne.
Numéro 2 (MTI) : Chaque spécialisation a sa table, avec une clé étrangère vers Véhicule. Chaque instance de Véhicule doit avoir une clé étrangère vers TypeDeVéhicule ?
Désavantage : cohérence à maintenir entre une instance d'une spécialisation et le type de l'instance de véhicule pointé par celle-ci, et rien n'empêche plusieurs instances de spécialisation de pointer vers la même instance de Véhicule, on peut donc avoir un Véhicule qui est 3 fois une Voiture, 1 fois un Bateau et de type Camion.
(La numéro 3 (CTI) qui consiste à ce que chaque spécialisation a sa propre table avec duplication d'attributs n'est pas possible car l'absence de la classe générique Véhicule empêche d'avoir une clé étrangère vers celle-ci dans Passager).
J'ai vraiment l'impression de passer à coté de quelque chose. J'ai oublié quoi ?
Merci de m'aider !
PS: Contrainte supplémentaire importante, la BDD doit être facilement accessible et faire profiter au maximum des possibilités du framework CakePHP.