30-09-2009, 09:56 AM
Bonjour à tous,
Faut il dénormaliser les relations 1:1 pour augmenter les performances de sa base de données ? Pour améliorer le confort de conception ?
Après une recherche infructueuse de personnes dans le même questionnement que moi, je vais l'expliquer sous forme d'exemple.
Imaginons un jeu de course de voiture par navigateur. Dans ce jeu nous aurions comme élément logique (nos objets) :
- compte du jeu (identifiant, mails, question secrète... : 7 champs différents)
- personnage joueur (le nom du personnage, compétences de conduite, nombre de cheveux... : 12 champs au total )
- voiture (nom, couleur, caractéristiques de la voiture,... : 23 champs)
- ressources (dollars, euros, nombre de bidon d'huile... : 10 champs)
- etc (544 champs)
Dans notre modèle conceptuel de donnée ces objets sont liés par des relations 1:1 : Un compte_jeu n'a qu'un seul personnage unique, une seule voiture unique, un seul ensemble de ressource propre.
Donc monsieur Merise nous encouragerait à tout mettre dans la même table :
Table_information_joueur (identifiant, mail, question_secrete, ..., nom_personnage, age_personnage, competence_personnage, nombre_cheveux, ..., nom_voiture, couleur_voiture;..)
Ce qui va nous donner une table unique avec un nombre conséquent de colonnes.
Faut il dénormaliser le modèle pour répartir les objets logiques dans différentes table, malgré leurs relations 1:1, pour réduire le nombre de colonne de chaque table ?
Solution 1 : tout dans une table : les requêtes deviennent elles coûteuses ? Quelle nombre de colonne il serait idéal de ne pas dépasser ?
Solution 2 : ensemble logique : une table par objet (une table personnage, une table voiture, une table ressource, etc). Tant mieux pour la clarté dans le développement et tant pis pour la normalisation ?
Solution 3 : hybride des précédentes : on essaye de regrouper un maximum les tables pour limiter les dégâts et ne pas dépasser un certains nombre de colonne, tout en gardant une volonté de rester au maximum dans la normalisation ? (Une table compte_jeu + ressource, une table personnage+voiture...)
Autre ?
Que pensez vous qu'il est plus sain d'adopter ? Quel est l'équilibre à avoir entre performance de la BDD et confort de conception lorsqu'on se retrouve avec des structures de tables très denses ?
Faut il dénormaliser les relations 1:1 pour augmenter les performances de sa base de données ? Pour améliorer le confort de conception ?
Après une recherche infructueuse de personnes dans le même questionnement que moi, je vais l'expliquer sous forme d'exemple.
Imaginons un jeu de course de voiture par navigateur. Dans ce jeu nous aurions comme élément logique (nos objets) :
- compte du jeu (identifiant, mails, question secrète... : 7 champs différents)
- personnage joueur (le nom du personnage, compétences de conduite, nombre de cheveux... : 12 champs au total )
- voiture (nom, couleur, caractéristiques de la voiture,... : 23 champs)
- ressources (dollars, euros, nombre de bidon d'huile... : 10 champs)
- etc (544 champs)
Dans notre modèle conceptuel de donnée ces objets sont liés par des relations 1:1 : Un compte_jeu n'a qu'un seul personnage unique, une seule voiture unique, un seul ensemble de ressource propre.
Donc monsieur Merise nous encouragerait à tout mettre dans la même table :
Table_information_joueur (identifiant, mail, question_secrete, ..., nom_personnage, age_personnage, competence_personnage, nombre_cheveux, ..., nom_voiture, couleur_voiture;..)
Ce qui va nous donner une table unique avec un nombre conséquent de colonnes.
Faut il dénormaliser le modèle pour répartir les objets logiques dans différentes table, malgré leurs relations 1:1, pour réduire le nombre de colonne de chaque table ?
Solution 1 : tout dans une table : les requêtes deviennent elles coûteuses ? Quelle nombre de colonne il serait idéal de ne pas dépasser ?
Solution 2 : ensemble logique : une table par objet (une table personnage, une table voiture, une table ressource, etc). Tant mieux pour la clarté dans le développement et tant pis pour la normalisation ?
Solution 3 : hybride des précédentes : on essaye de regrouper un maximum les tables pour limiter les dégâts et ne pas dépasser un certains nombre de colonne, tout en gardant une volonté de rester au maximum dans la normalisation ? (Une table compte_jeu + ressource, une table personnage+voiture...)
Autre ?
Que pensez vous qu'il est plus sain d'adopter ? Quel est l'équilibre à avoir entre performance de la BDD et confort de conception lorsqu'on se retrouve avec des structures de tables très denses ?