Bonsoir,
Envoyé par
Shivan
Au niveau perf il me semble mieux de faire une colonne option par options dans ma table client (pas de jointure).
Si vous définissez une table ayant la structure suivante (clé primaire soulignée) :
Client (ClientId, Option1, Option2, Option3, Option4, Option5, ClientNom, ClientAdresse, ...)
La normalisation est respectée (au moins les 1NF, 2NF, 3NF, BCNF).
Il est vrai par ailleurs que vous n’avez pas de jointure à faire pour tout savoir sur un client.
Mais il ya quelques inconvénients :
Dans le cas général, les fonctions d’agrégation SUM, AVG, COUNT, etc. ne peuvent pas être utilisées. Mais dans votre cas particulier, peut-être n’en avez-vous pas besoin.
Un inconvénient majeur : la structure de la table est figée. Si un jour on ajoute des options, il faudra redéfinir cette structure et vraisemblablement reprendre toutes les requêtes qui font nommément référence aux attributs Option1, Option2, etc.
Si vous définissez deux tables :
Client (ClientId, ClientNom,.ClientAdresse, ...)
Option (ClientId, OptionId, OptionValeur)
La normalisation est respectée (OptionId est un numéro relatif, prenant des valeurs comprises entre 1 et 5, selon le nombre d’options retenues par le client).
Si vous ne voulez pas passer votre temps à faire des jointures, vous pouvez créer une vue du genre :
ClientOption (ClientId, ClientNom,.ClientAdresse, Option, ...)
As
SELECT x.ClientId, x.ClientNom,.x.ClientAdresse, y.OptionValeur...
FROM Client x INNER JOIN Option y ON x.ClientId = y.ClientId
Par ailleurs, le surcoût dû à la jointure est de l’ordre de la dizaine de millisecondes s’il y a accès au disque (par exemple dans le cas de DB2, un accès à l’index de service dont la clé contient les trois attributs ClientId, OptionId, OptionValeur).
Les fonctions d’agrégation redeviennent opérationnelles.
Avantage décisif (au moins dans le cas général) : si le nombre d’options passe de 5 à 6 ou plus, la structure des tables est inchangée, les requêtes ne sont pas à reprendre (sauf celles qui mentionnent explicitement le nombre 5).
Maintenant, c'est vous qui voyez...
Partager