Optimiser la BDD : Doit-on utiliser les vues ?
(re)Bonjour,
Une question de philo plus qu'une question technique :ccool:
je suis en train d'essayer de comprendre au mieux comment bien utiliser symfony et doctrine. En sachant que j'ai l'habitude de commencer un projet en utilisant MySql Workbench. De mon point de vue, une base de donnée bien conçue et bien pensée permet déjà d'avoir 70% du travail de fait, et évite de se taper des modèles (dans le MVC) d'une complexité pharaonique.
J'ai l'impression que dans doctrine avant même de faire la BDD, il faut bien avoir en tête son modèle objet. Ainsi, quand on créé une table, il faut immédiatement se poser la question de quel module elle permettra de générer, et donc quelles sont les infos qu'on veut voir apparaitre dans ce module. Si il y a des infos provenant d'autres tables qu'on veut voir apparaitre dans ce module, le mieux est d'attacher ces tables à la table principale avec une relation 1:1, et donc de générer une clef étrangère dans la table principale, permettant ainsi d'obtenir immédiatement toutes les méthodes permettant de récupérer ces infos (en jouant ensuite avec le __toString() pour ramener les infos voulues).
Ma première question est : existe-il un 'truc' du même type pour générer immédiatement un maximum de méthodes pour les relations 1:n ? J'ai l'impression que le recours au vue serait approprié.
Prenons un exemple concret :
Soit un blog avec une table article à partir de laquelle on va générer deux modules : un pour afficher tous les articles paginés avec des métas infos du type vote et nombre de commentaires ; et un autre permettant d'afficher un article en particulier avec tous ses commentaires.
Les tables article et vote sont liées par une relation 1:1 (1 image correspond à une note), aucun problème, on place une clef étrangère id_vote dans la table article. Par contre, chaque article a plusieurs commentaires. Or, on veut afficher le nombre de commentaires sur l'affichage principal et tous les commentaires sur l'affichage d'un article en particulier. En php, c très facile à faire, soit.
Ma question est : comment créer la bdd de manière optimale, de façon à ce que la génération des modèles et des modules produise immédiatement toutes les méthodes voulues (pour les 1:1, c ok, reste les 1:n) ?
De prime abord, j'ai l'impression que l'idéal serait de créer une vue nb_commentaires associant à chaque article le nombre de commentaires associés (avec un select count), et d'associer en clefs étrangère sur la table article l'id adéquat sur cette vue nb_commentaire. (bref, on réduit la relation 1:n à une relation 1:1)
Mais, quid de la génération automatique de la méthode permettant d'afficher tous les commentaires associés à un article ? j'ai l'impression que ce n'est pas faisable (bref qu'on est obligé d'ajouter manuellement la méthode allant chercher tous les commentaires d'un article dans la classe article)...
D'après vous, existe-t-il un moyen d'organiser la BDD de façon à ce que la méthode allant chercher tous les commentaires associés à un article soit générée automatiquement lors de l'opération 'symfony doctrine:build-model' ?