Bonjour,
Pour maintenir une base de donnée de client avec un historique de toutes les modifications, actuellement, j'ai :
IDclient|valeur1|valeur2|valeur3|valeurN|date_modif
A chaque modification, je crée une nouvelle ligne avec les valeurs actuelles. Le problème est que le volume de donnée devient important et toutes les opérations sur la table sont de plus en plus longues.
Je veux modifier via une structure comme celle-ci :
Table1 : IDclient|nom
Table2 : IDclient|IDdelavaleur|lavaleur|datedebutvalidite|datefinvalidite
Table3 : IDvaleur|nomcourt
(j'ai réduit les tables à leur minimum pour ma question).
Je veux ensuite récupérer toute les valeurs pour chaque client en une seule ligne mais en plus avoir l'historique (donc faire une vue pour qu'il m'affiche la même chose que j'ai dans ma table actuelle)
La Table3 me sert à définir toutes les valeurs possible (en sachant qu'une valeur peut ne pas exister). Elle sert dans mon application mais à priori ne peut pas être utilisé directement pour générer la VUE que j'attends.
Actuellement, j'ai trouvé la requête suivante :
Ca me sort quelque chose de presque convenable mais je n'arrive pas à ordonner de manière à n'avoir qu'une seule ligne pour chaque date_start de chaque client (puis à trier par ordre croissant des date_end).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT Table1.IDclient, Table1.Nom, Table2a.lavaleur as nomcourtA, Table2b.lavaleur as nomcourtB (etc) FROM Table1 LEFT OUTER JOIN Table2 as Table2a ON Table1.IDclient = Table2a.IDclient AND Table2a.idType = a LEFT OUTER JOIN Table2 as Table2b ON Table1.IDclient = Table2b.IDclient AND Table2b.idType = b
Sauriez-vous m'aider ? Est-ce que la structure de ma nouvelle table est vraiment rationnelle ?
Partager