|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre du Club
![]() Jérôme Développeur informatique Inscription : août 2011 Messages : 59 ![]() |
Bonjour,
Je suis actuellement sur un projet en C++ pour lequel j'utilise une base de données MySQL. Je travaille sous Builder C++. Pour integrer MySQL, j'ai utilisé ce tuto. Tout marche correctement, enfin presque...(sinon, je ne serai pas là J'ai une table ainsi : TablePrincipale{ id PNom VARCHAR(50) PTrigramme1 VARCHAR(5) PTrigramme2 VARCHAR(5) PTrigramme3 VARCHAR(5) } Je souhaite effectuer une recherche dans cette table à partir des trois trigrammes, mais sans tenir compte de l'ordre. Si je cherche AAA, BBB, CCC, ca doit me sortir tous les enregistrements pour lesquels le trigramme1, 2 et 3 contiennent (non respectivement) AAA, BBB, CCC (chaque trigramme contient 3 lettres). Donc le resultat d'une recherche pour AAA, BBB, CCC doit être identique au résultat d'une recherche pour BBB, CCC, AAA. A moins que j'ai raté quelque chose, la requête a rédiger est assez complexe. J'ai donc recherché sur le net une solution alternative : créer une table temporaire. Voici donc ma requete : Code :
Code :
Code :
Et même : Code :
INSERT INTO table_temp SELECT PNom, PTrigramme2, PTrigramme3 FROM TablePrincipale; Si vous aviez des idées à me proposer, je suis preneur ! Je vous remercie par avance |
||||||
|
|
00
|
|
|
#2 |
![]() ![]() |
À quoi correspondent ces trois trigrammes ?
Sont-ce les mêmes informations dans 3 colonnes différentes ou trois informations de nature différente ? La recherche que tu veux faire suggère que ce sont les mêmes. Il y aurait alors une erreur de modélisation.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
bonjour,
N'auriez-vous pas un problème de modélisation ? Vous avez une relation du type : TablePrincipale-(0, 3)----POSSEDE-----(0, 1)-trigramme voir : TablePrincipale-(0, 3)----POSSEDE-----(0, n)-trigramme Du coup votre requête aurai été beacoup plus simple à réaliser. Concernant votre problème lié à votre code C++, ça n'est pas le bon forum. (et il faudra fournir votre code C++ d'ailleurs vu que le problème réside là) edit: Grillé ! |
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() Jérôme Développeur informatique Inscription : août 2011 Messages : 59 ![]() |
Erreur de modélisation ? Sûrement... J'ai fait au mieux, mais vraisemblablement, ce n'est pas bon.
J'ai déjà un table qui regroupe tous les trigrammes possibles. Comment faire le lien entre cette table et ma TablePrincipale. En fait, j'ai une TablePrincipale qui, pour chaque enregistrement doit associer 1, 2 ou 3 trigrammes. Comment concevoir ma base de données ainsi ? J'avoue que je me suis torturé la tête sans parvenir à une solution :S Merci d'avance pour votre aide ! A propos du C++, si vraiment le problème se reproduit ultérieurement, j'irai poser ma question sur le forum C (car la bibliothèque est en C). Mais si en changeant la modélisation, et par conséquent la requête, le problème ne se présente plus, je ne vais pas les embêter avec ça |
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
Bonjour,
Si vous possédez une table complète de trigramme vous êtes dans ce cas là : TablePrincipale-(0, 3)----POSSEDE-----(0, n)-trigramme Est-ce bien 3 la limite maximum d'association entre les deux entités ? Une fois que vous allez passer au MPD l'association POSSEDE va se transformer en table, et vous aurez donc : TablePrincipale(id, ...) TableTrigramme(tri_id, tri_nom, ....) A_PRIN_TRI(prin_id, tri_id) avec prin_id qui sera une clef étrangère sur TablePrincipale et tri_id une clef étrangère sur la TableTrigramme Il faudra aussi créer un trigger sur la table A_PRIN_TRI, pour qu'a l'insert vous vérifiez que vous n'avez pas plus de X (3?) trigramme associé à une même ligne de TableTrigramme. Après ça votre requête va se transformer en : Code :
|
||
|
|
10
|
|
|
#6 |
|
Membre du Club
![]() Jérôme Développeur informatique Inscription : août 2011 Messages : 59 ![]() |
Merci à toi punkoff pour ta réponse.
C'est bien ca qui me manquait : une table intermédiaire qui associe ma tablePrincipale avec ma tableTrigramme. J'ai fait la même erreur de modélisation dans d'autres parties de ma base de données. Bon, je vais retourner à ma modélisation. Je ne savais pas ce qu'était un trigger. Je me suis renseigné, et je pense que, dans ce cadre là, il n'est pas utile d'en créer un. En effet, c'est mon application qui insère les données dans ma base, et c'est elle qui les utilise par la suite. Dans ma application, il est impossible d'assigner plus de trois trigrammes. Donc, pas de risques Tant qu'on y est, et pour vérifier que j'ai bien compris, voici un autre cas (pour le même projet). Je renomme les tables et les données en quelques chose de simple. J'ai une table contenant des informations pour une personne : Individu {Nom, Age, Adresse, etc...} Et chaque individu a travaillé une ou plusieurs fois pour des sociétés différentes pour lesquelles il faut mentionner les dates de début et de fin. On a donc une table Date {id, DateDebut, DateFin} La modélisation correspondante est-elle celle ci : Individu-(0, n)----POSSEDE-----(0, n)-Date ou celle là : Individu-(0, n)----POSSEDE-----(1, 1)-Date Si on se fiche que les mêmes dates puissent être communes à deux individus, autant prendre la deuxième solution ? Et concretement, comment cela s'agence dans ma table ? Je propose mon idée et vous me corrigez si j'ai tord Individu(id, nom, adresse, etc...) Date(id, DateDebut, DateFin) A_Individu_Date(idIndividu, idDate) Au fait, pourquoi mettre un "A" devant le nom de ma troisième table ? Y-a-t'il un standard, ou une manière de bien appeler ses tables ? Merci à vous par avance de répondre à mes (multiples) questions ! |
|
|
00
|
|
|
#7 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
Citation:
Par contre ceci n'est pas gérable applicativement, sauf si vous locker totallement la table avant de faire votre vérification + insertion... sinon => accès concurant : vous pouvez vous retrouver avec plsu de 3 trigrammes. Citation:
Concernant votre 2nd problème, les sociétés ne sont pas modélisées ? Je vous laisserai passer par le forum modélisation car là je risque de vous orienter sur une mauvaise solution. |
||
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() Jérôme Développeur informatique Inscription : août 2011 Messages : 59 ![]() |
Je vous remercie !
Je me penche de suite sur les normalisations des noms, et ensuite, j'irai poster un nouveau sujet dans la partie modélisation (qui est la source de mes problèmes). Merci encore. Dois-je mettre ce sujet Résolu (vu que la question de base n'est pas résolu mais que mon problème l'est) ? |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com