|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : août 2005 Messages : 171 ![]() |
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! |
|
|
00
|
|
|
#2 | |
![]() ![]() |
Citation:
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 ! |
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() ![]() |
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 |
|
00
|
|
|
#4 |
|
Membre expérimenté
![]() Inscription : septembre 2007 Messages : 609 ![]() |
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/ |
|
|
00
|
|
|
#5 |
![]() ![]() |
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 ! |
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() ![]() |
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 |
|
00
|
|
|
#7 |
![]() ![]() |
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 ! |
|
00
|
|
|
#8 | ||
|
Membre du Club
![]() Inscription : août 2005 Messages : 171 ![]() |
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 :
Cela vous semble-t'il un bon compromis? |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com