Bonjour,
J'ai une question concernant l'architecture d'une table de base de données.
Nous devons stocker dans une table des données provenant de différentes sources. Chaque source ne possède pas le même format ni même les mêmes paramètres.
La solution adoptée jusqu'à aujourd'hui était une table où toutes les colonnes sont générique du style:
Champ1, Champ2, Champ3, etc…
Vous avez tout de suite compris que de nombreuses colonnes restent vides. Je ne connais pas l'incidence sur les performance???
Afin d'optimiser cette table, j'ai opté pour la solution suivante:
une table avec: Id, Numéro de ligne, clé, valeur. (Numéro de ligne correspond en fait à une ligne dans le type de table décrit ci-dessus. si on prend Champs1, champs2 et champs3 comme paramètre, on aura 3 clés pour un numéro de ligne)
id1 - 1 - champs1 - value1
id2 - 1 - champs2 - value2
id3 - 1 - champs3 - value3
id4 - 2 - champs1 - value4
id5 - 2 - champs2 - value5
id6 - 2 - champs3 - value6
id7 - 3 - champs1 - value7
id8 - 3 - champs2 - value8
etc...
mais pour un autre fichier de data, on aura:
id100 - 12 - champs5 - value1
id101 - 12 - champs6 - value2
id102 - 12 - champs7 - value3
id103 - 12 - champs8 - value4
id104 - 13 - champs5 - value5
id105 - 13 - champs6 - value6
id106 - 13 - champs7 - value7
id107 - 13 - champs8 - value8
etc...
Ainsi, on n'a plus de colonne non utilisée. Par contre, les requêtes en sont devenues plus complexes. (Je précise que le nom des champs est stocké dans une seconde table vers laquelle on fait référence)
Par exemple, si on veut la valeur de champs3 si champs1 = 'TOTO' et Champs2='24'. Dans le premier cas, c'est facile. Dans le second, il faut faire bien plus de requêtes. (extraire le numéro de ligne où champs1 = 'TOTO', dans ces numéros de lignes, extraire ceux où champs2=24 puis récupérer la valeur de champs3 pour les numéro de ligne restant.
D'un côté, on optimise le stockage (et encore, je suis pas sûr!), de l'autre, on optimise le calcul. Quel modèle de table préconisez vous?
Je précise que les requêtes SQL sont exécutées à l'aide d'ADO.net (appli c#) vers SQlserver2005.
Merci de m'apporter vos lumières.
Partager