|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||
|
Invité régulier
![]() Etudiant Licence Bioinformatique Inscription : juin 2011 Messages : 16 ![]() |
Bonjour,
J'ai crée une base dont voici le code : Code :
Code :
D'après le cours sur le site ce n'est pas recommandé. Admettons, je veux rechercher tous les agriculteurs, je suis obligé de comparer les valeurs des 5 colonnes à "Agriculteurs" car l'ordre de saisie peut changer. Code :
Par exemple : Code :
Remarque : Je sais que ma base ne respecte pas les normes, c'est volontaire donc je ne change pas la structure. Remarque 2 : Un élus peut avoir plusieurs fonctions (ex : tata est conseiller municipal et agriculteurs) La première image est un aperçu du résultat des 2 premiers bloc de code. La seconde un aperçu des colonnes indéxées. Le SGBD que j'utilise est MySQL. J'espère avoir été assez clair sinon demander des informations supplémentaires. Max |
||||||||
|
|
00
|
|
|
#2 | |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
Bonjour
la fonction des index n'est pas de "simplifier" les requêtes mais de les accélérer ![]() En faisant un index sur plusieurs colonnes, cela ne crée pas une colonne synthétique Je note ta remarque 1 par contre, ne connaissant pas MYSQL, je ne saurais dire si les index fonctionnent avec cette écriture Citation:
|
|
|
|
00
|
|
|
#3 | |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
Citation:
La seule manière de "simplifier" votre requête actuelle est de passer par une re-modélisation de votre projet. => dégager les fonctions de cette table, faites une table de fonction et une table d'association. Ensuite faites des jointures entre ces 3 tables et faites un jolie "fonction like 'a%'" |
|
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() Etudiant Licence Bioinformatique Inscription : juin 2011 Messages : 16 ![]() |
Créer une table "Elus" ET une table "FonctionO", jusque la pas de problèmes.
(cf image ci dessous) Par contre pour la table d'association je ne vois pas ce qu'il faut mettre. Remarque : La table FonctionO possède une seule colonne, je sais que ça ne correspond pas aux normes, c'est pour l'exemple.
|
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
D'après votre exemple une personne peut avoir jusqu'à 5 fonctions différentes.
donc il vous faut bien une relation entre cette table de fonctions et votre table initiale MCD : personne 0,n---- Possède ----- 0,n Fonction Lors du passage au MPD la relation Possède va se transformer en table. Vous pouvez y rajouter par exemple une colonne de classement si c'est utile pour vous. t_personne_prs (prs_id, ....) R_prs_fun_pfu (prs_id, fun_id, ...) t_fonction_fun (fun_id, fun_desc, ....) Du coup, votre requête devient : Code :
votre LIKE se fera sur une table avec très peu de donnée (T_FONCTION_FUN) et vous évitera un scannage de table de T_PERSONNE_PRS comme vous l'avez surement actuellement. Ensuite les jointures se font uniquement sur des pk => très rapide Bref si vous pensez changer d'avis je vous conseillerais d'aller faire un tour sur le forum conception afin de retravailler proprement tout ceci |
||
|
|
00
|
|
|
#6 | |||
|
Invité régulier
![]() Etudiant Licence Bioinformatique Inscription : juin 2011 Messages : 16 ![]() |
t_personne_prs (prs_id, ....) = elus(Id_e,...)
R_prs_fun_pfu (prs_id, fun_id, ...) = assoce(A_id_elus#,A_id_fonctiono#) t_fonction_fun (fun_id, fun_desc, ....) = lsf(Numero,Fonction) Donc ma requête doit être : Code :
Citation:
Je suis sur du nom de la table et du nom de l'attribut. Id_e est lié à A_id_elus, ils sont de même type et de taille identique. |
|||
|
|
00
|
|
|
#7 | |||||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
Citation:
et une table a été oubliée ! Code :
|
|||||
|
|
00
|
|
|
#8 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
bonjour,
Déjà vous avez une jointure cartésienne en trop, et je pense que ça ne lui plait pas Essayez comme ceci pour voir s'il y a encore une erreur .. Code :
|
||
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() Etudiant Licence Bioinformatique Inscription : juin 2011 Messages : 16 ![]() |
J'ai trouvé une alternative à mon problème pour les index, elle est similaire à celle de punkoff et elle nécessite une requête avec plusieurs conditions mais ça résout mon problème.
Merci de vos réponse. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com