Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/08/2008, 05h25   #1
Membre du Club
 
Inscription : août 2005
Messages : 171
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 171
Points : 40
Points : 40
Par défaut Est-ce utile de stocker une même information dans plusieurs tables?

Bonjour,

Lorsque j'ai appris à créer des tables SQL, mes professeurs m'ont toujours dit qu'une des règles à respecter était de ne jamais stocker une même donnée dans plusieurs tables, pour des raisons de taille de la table et surtout de cohérence (en cas de modification de la dite donnée, par exemple)...

Cependant, alors que j'étudiais les bases de données de plusieurs forum (phpbb et fluxbb pour ne citer qu'eux), j'ai remarqué que certaines données étaient répétées de nombreuses fois. Entre autre, le nom d'utilisateur, mais aussi le titre du dernier message et sa date. En effet, pour ne prendre que le nom d'utilisateur, il apparait dans les tables "users", "posts", "topics", "bans"...

D'où ma question. Est-ce là une pratique permettant de ménager la BDD en lui évitant des jointure à chaque fois que quelqu'un consulte la page pour retrouver le pseudo du posteur? Ou simplement un "défaut" de conception qu'ont ces forums ?

Merci d'avance pour vos réponses!
ChriGoLioNaDor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 09h26   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 034
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 034
Points : 18 326
Points : 18 326
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par ChriGoLioNaDor Voir le message
D'où ma question. Est-ce là une pratique permettant de ménager la BDD en lui évitant des jointure à chaque fois que quelqu'un consulte la page pour retrouver le pseudo du posteur? Ou simplement un "défaut" de conception qu'ont ces forums ?
Je dirais les deux.
Un forum peut effectivement comprendre un très grand nombre d'entrées, Developpez.net est là pour le prouver.

Le principe général est qu'il faut commencer par normaliser au maximum sa conception et ensuite seulement s'autoriser des dénormalisations en les testant l'une après l'autre pour voir si elles sont utiles en terme de performance.

Dans les cas que tu cites, je crains qu'on ait à faire à des développeurs qui n'ont peut-être pas une grande connaissance des bases de données plutôt qu'à de vrais concepteurs qui ont effectué la démarche citée plus haut. Mais je suis peut-être mauvaise langue...
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 12h22   #3
Expert Confirmé
 
Avatar de Alain Defrance
 
Homme Alain DEFRANCE
Project Lead
Inscription : août 2007
Messages : 1 993
Détails du profil
Informations personnelles :
Nom : Homme Alain DEFRANCE
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Project Lead

Informations forums :
Inscription : août 2007
Messages : 1 993
Points : 2 919
Points : 2 919
Envoyer un message via MSN à Alain Defrance Envoyer un message via Skype™ à Alain Defrance
Bonjour,

la raison pour laquelle les professeurs interdisent la redondance d'information est qu'ils enseignent le modèle merise qui garanti une économie de place maximal et évite les incohérences dans la base de donnée.

Cette méthode est reconnu comme performante mais est aussi très discuté concernant, par exemple, l'optimisation.

Il peut arriver de dégrader ce modèle pour soulager le SGBD. Bien évidement il faut peser le pour et le contre, et éviter les redondance lorsque ça n'apporte pas grand chose
__________________
http://alaindefrance.wordpress.com - http://www.alain-defrance.com
Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
Project Lead eXo Social
Java Black Belt - Java Black Belt Coach
Alain Defrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 12h54   #4
Membre expérimenté
 
Avatar de rberthou
 
Inscription : septembre 2007
Messages : 609
Détails du profil
Informations personnelles :
Âge : 48

Informations forums :
Inscription : septembre 2007
Messages : 609
Points : 542
Points : 542
Ne pas oublier que le modèle relationnel (contrairement aux bases de données hiérarchique) IMPLIQUE une redondance des données pour permettre les relations entre ces tables (les zones clefs sont naturellement redondantes).
__________________
- Informaticien passionné
- ( java, c++, cobol, php, asp, ... )
- http://www.berthou.com/fr/
rberthou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 14h43   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 034
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 034
Points : 18 326
Points : 18 326
Envoyer un message via MSN à CinePhil
La redondance, dans une clé étrangère, d'une clé numérique auto-incrémentée et la redondance d'un nom par exemple, ce n'est quand même pas la même chose !

Un exemple :
TablePrincipale(id, nom)
TableLiee(id, nom_TablePrincipale, ...)

Zut ! J'ai mal écrit le nom de M. Schtroupmpf ! Je corrige de suite.
Manque de bol, il figure aussi dans la table liée avec la mauvaise orthographe et j'oublie de le changer. Oui je sais, ON UPDATE CASCADE existe mais il y a fort à parier que celui qui a choisi de répéter le nom n'a probablement pas utilisé les contraintes de clés étrangères.

Je suis caustique moi aujourd'hui !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 15h09   #6
Expert Confirmé
 
Avatar de Alain Defrance
 
Homme Alain DEFRANCE
Project Lead
Inscription : août 2007
Messages : 1 993
Détails du profil
Informations personnelles :
Nom : Homme Alain DEFRANCE
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Project Lead

Informations forums :
Inscription : août 2007
Messages : 1 993
Points : 2 919
Points : 2 919
Envoyer un message via MSN à Alain Defrance Envoyer un message via Skype™ à Alain Defrance
Sans compter que l'update cascade s'applique à des foreign key, c'est à dire généralement à des identifiants, alors à moins de lier les données par des titres (), l'update cascade ne servira a rien.
De plus puisque les foreign key concernent généralement que des identifiants, et qu'un identifiant ne dois JAMAIS changer, l'update cascade est rarement utile, a un tel point que Oracle ne l'implémente même pas.
__________________
http://alaindefrance.wordpress.com - http://www.alain-defrance.com
Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
Project Lead eXo Social
Java Black Belt - Java Black Belt Coach
Alain Defrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 15h11   #7
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 034
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 034
Points : 18 326
Points : 18 326
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par kazou Voir le message
l'update cascade est rarement utile
Justement je me demandais à quoi ça servait !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2008, 17h01   #8
Membre du Club
 
Inscription : août 2005
Messages : 171
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 171
Points : 40
Points : 40
Merci pour vos réponse, ça me rassure pas mal

Pour tout dire, je pensais appliquer une solution hybride. En effet, je trouve ça assez choquant d'aller mettre le nom du posteur partout. Si un jour il doit être changé... Et s'il a un identifiant, c'est dommage de ne pas l'utiliser. Par contre, je comprends aussi qu'une information concernant le dernier post soit placé dans la table "topics", afin de ne pas avoir à parcourir l'ensemble de la table "posts" à chaque affichage, pour le trouver ^^

Je pensais donc faire quelque chose comme ça :

Code :
1
2
3
4
Users(user_id, user_name, user_pass, user_email)
Topics(topic_id, topic_subject, num_replies, last_post_id)
Posts(post_id, user_id, topic_id, post_datetime, post_message)
Forum(forum_id, forum_name, num_topics, last_subject_id)
Je n'ai donc pas à trouver à chaque vue de la page le dernier sujet/message, ni à calculer le nombre de réponse/sujet, mais d'un autre coté je ne stock pas 36 fois le nom du dernier sujet par exemple...

Cela vous semble-t'il un bon compromis?
ChriGoLioNaDor est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h08.


 
 
 
 
Partenaires

Hébergement Web