|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Bertrand Inscription : octobre 2011 Messages : 47 ![]() |
Bonsoir,
Surement une question de base, mais je vous remercie par avance de votre aide J'ai une table de quelques milliers de lignes, que j'aimerai alléger un peu J'estime qu'un groupe de 5-6 champs n'est utilisé que dans 15-20% environ des lignes Afin de garantir l'intégrité référentielle, ces champs sont toujours remplis (avec une valeur par défaut, si non utilisé) et donc pèsent sur la tailel de la table Si je sépare ma table en 2, je ne gagnerai donc pas en taille J'ai donc pensé créer une table secondaire (un peu à la manière d'une table de jonction entre 2 tables, mais cette fois ci avec lien que vers la table principale) ainsi seules les lignes contenant les champs réellement utilisés seraient présentes Est ce une bonne idée ? Si oui, dois je mettre un N° auto dans cette table secondaire ? ou puis je reprendre le N° auto de la table principale ? (si je fais cela, cela ne reviendrait il pas à séparer simplement ma table en 2, avec pour chaque ligne des valeurs par défaut ?) Je ne sais pas si ma demande est bien claire, mais par avance merci Cordialement Bertrand |
|
|
10
|
|
|
#2 | ||
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 415 ![]() |
Bonjour,
Si je prends un exemple classique de table des commandes : Commande (idCommande, #idClient, DateCommande, AnnulationCommande) AnnulationCommande est un booléen signalant que la commande est annulée si sa valeur est Vrai. Supposons qu’en cas de commande annulée, on veuille connaître certaines informations supplémentaires comme la date d’annulation, le motif de l’annulation, l’employé qui a validé l’annulation etc. Commande (idCommande, #idClient, DateCommande, AnnulationCommande, DateAnnulation, MotifAnnulation, #idEmployeAnnulation) Et si on suppose qu’une minorité de commande soit annulée, nous voilà avec une majorité de lignes remplis avec des champs bêtement à vides (ou remplis par défaut), consommateurs de mémoire comme tu as pu le constater. Solution===> Une table des commandes annulées en relation "un à un": Commande-1-----------1-CommandeAnnulee Commande (idCommande, #idClient, DateCommande) (plus besoin du booléen AnnulationCommande) CommandeAnnulee(#idCommande, DateAnnulation, MotifAnnulation, #idEmployeAnnulation) (CommandeAnnulee.idCommande (entier long) à la fois clé primaire et clé étrangère reliée à Commande.idCommande) Code :
Voilà le principe…pas de champs vides (ou remplis par défaut)
__________________
L'informatique fait son grand retour au lycée... |
||
|
20
|
|
|
#3 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 184 ![]() |
Bonjour 105rn2 et Fabien,
Je me permets de m'immiscer, Fabien... 105rn2, , félicitation pour ta réflexion et la solution que tu as pressentie : il s'agit, en fait, d'une problématique bien connue dans le monde de la modélisation (l'excellent exemple du non moins excellent Fabien le montre). Le fait que, visiblement, tu sois parvenu à cette solution naturellement est remarquable (au sens littéral du mot : restons humbles !...
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
10
|
|
|
#4 |
|
Candidat au titre de Membre du Club
![]() Bertrand Inscription : octobre 2011 Messages : 47 ![]() |
Bonjour Fabien, Bonjour Richard,
Je vous remercie tout deux d'avoir pris le temps de me répondre et de m'encourager ! Merci Fabien, pour cette démonstration très claire et pédagogique (par l'exemple) Ne me reste plus qu'à mettre en œuvre : je crois qu'Access a un outil pour séparer une table en 2, il ne me suffira alors qu'à supprimer les lignes inutiles. Merci encore de votre réponse, car je n'avais pas trouvé (peut être pas bien cherché) d'article sur ce sujet Bonne journée et de très agréables fêtes de fin d'année ! Bertrand |
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Bertrand Inscription : octobre 2011 Messages : 47 ![]() |
Bonjour à Tous,
Voila j'ai fait les modifications, et ça marche super ! ![]() La fonction scission d'Access ne voulant pas marcher (message d'erreur sur la version de la table ??) voila comment j'ai fait : -J'ai dupliqué la structure de la table 1 vers table 2 -J'ai supprimé de la Table 2 les champs inutiles (voués à rester uniquement dans table 1) -Une petite Requête pour remplir la table 2 avec les lignes pertinentes (au passage, mon évaluation était complétement fausse : environ 1400 lignes sur 65000 au total) -Sur le Form de la Table 1, ajout d'un Sous Form de la Table 2 (rendu visible selon critère) -Vérification de la cohésion des infos en redondance entre les 2 Tables -Suppression dans table 1 des champs repris dans Table 2 Je n'ai plus qu'à appliquer aux autres tables ! Merci encore pour votre aide, et bonnes fêtes de fin d'année ! ![]() Bertrand |
|
|
10
|
Copyright © 2000-2012 - www.developpez.com