Jointures externe? comment?

Fermé
Signaler
-
 jerome -
Bonjour.


Mon application possède toute une liste de prospects.
Chaque prospect peux souscrire à plusieurs produits différents.
Il peux par exemple avoir souscrit à 3 assurance santé (ses enfants), 2 assurances auto moto.

Les tables secondaires sont en fait les tables concernant les produits souscrits, elles sont donc toutes différentes dans leur structure.

Et moi ce que j'aimerai faire avec ma requête c'est pouvoir récupérer tout les produits de chaque prospect en fait.

La structure de ma BDD est celle ci (dans chaque table de produit il y a bien entendu une référence à l'ID du prospect).

* assanim (table d'un produit)
* automoto (table d'un produit)
* budgetor (table contenant les infos prospects)
* depend (table d'un produit)
* dotation (table d'un produit)
* finance (table d'un produit)
* grev (table d'un produit)
* habitprinc (table d'un produit)
* habitsc (table d'un produit)
* immeub (table d'un produit)
* lowimp (table d'un produit)
* mapad (table d'un produit)
* obseque (table d'un produit)
* pjfisc (table d'un produit)
* pnoccup (table d'un produit)
* prevdc (table d'un produit)
* rccansf (table d'un produit)
* retraite (table d'un produit)
* sante (table d'un produit)

Merci à vous.

17 réponses

J'ai oublié de préciser qu'il s'agit d'une bdd mysql.
0
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
129
Bonjour,

Une question se pose, pourquoi ne pas concevoir une seule table des produits ? Toutes les requêtes de ce type rrisquent d'être figées c'est-à-dire triibutaires du nombre de tables et de l'ajout ou de la suppression de produits nouveaux ou devenus obsolètes.
Cordialement.

Cchristian.
0
Bonjour Cchristian et tout d'abord merci.

Cependant je ne vois pas très bien en quoi le fait de créer une table de produit me permettrait plus facilement de pouvoir récupérer tout les produits de chaque prospect en fait.

Pourrais tu expliciter s'il te plait?
Merci
0
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
147
J'aurais peut-être pensé à si j'ai bien compris :

Une table prospect qui contient tes prospects (idProspect + infos),
Une table produit qui contient un id et un labae (assanim etc..)
Ainsi qu'une table link qui les lies.. contenant idProspect et idProduit comme clé primaires qui sont aussi étrangères.

La jointure est faite :)
0
Maintenant je vois bien ou est la finesse, cependant la structure de la BDD est déjà figé en suivant l'architecture énoncé ci dessus, il est pas possible de faire ce que je veux du coup?
0
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
129
Bonjour,

Un problème qui semble similaire a fait l'objet d'une discussion sur ce site, je pense que cela pourra t'être utile.

http://www.commentcamarche.net/forum/affich 5232813 access relation
0
Mouais, ca sent encore le problème sans solution.
On dirait que je suis bloqué sniff, me manquait plus que l'export dans mon application!!!!
0
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
129
Bonjour,

Si cette demande (cette requête) est peu fréquente tu peux écrire une commande SQL qui intègre toutes les tables produits, il suffira de l'actualiser si nécessaire.
.
Si tu penses que cette requête ou tout autres de même type (mettant en oeuvre une relation prospect/produits ou inversement) est (ou deviendra) fréquente il faut :

- soit créer une table (on va l'appeler index intermédiaire) telle que Chico200987 et moi-même l'avons définie,

- soit refondre ton appli au niveau des tables, ce qui entraînerait des modifs plus ou moins conséquentes suivant l'état d'avancement de cette appli (finalisée, début, milieu ou fin).

Car il est vraisemblable que le problème de regroupement des produits sous une même entité fonctionnelle se posera à nouveau sous quelque forme que ce soit.
0
Ok, merci Cchristian.

Tu me confirmes donc bien qu'en l'état actuel de la structure de ma BDD cela est impossible de faire ce que je veux?

Si c'est le cas je serais obligé de modifier l'architecture de ma BDD!!!

Merci encore.
0
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
129
Bonjour,

Dans ce genre de problème, rien n'est impossible, ce qu'il faut se demander plutôt c'est dans quelles conditions et à quel prix ?
0
Ma bdd deviendrait comme ceci ?

* budgetor (id_budgetor, nom, prenom ....)
* link_produit (id_produit, id_budgetor)
* depend (id_produit,champ1,champ2)
* dotation (id_produit,champ1,champ2)

La requête permettant de selectionner tout les produits d'un prospect deviendrait?

Merci bien.
0
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
147
Dépend et Dotation sont bien deux produits ?

Si oui, tu dois faire une table produit qui les rassemble.

Donc :

* budgetor (id_budgetor, nom, prenom ....)
* link_produit (id_produit, id_budgetor)
* produit (id_produit, champ1, champ2, idTypeProduit)
* typeProduit (id_TypeProduit, nomProduit) (où nomProduit est depend ou dotation..)

un prospect = un budgetor ?

Si oui la requête serait :

SELECT *
...FROM produit P, link_produit L
......WHERE P.id_produit = L.id_produit
..........AND L.id_budgetor = 5

Si tu veux les produits du prospect n° 5

P.S : Si tu veux simplement les id tu peux tout simplement faire :

SELECT id_produit FROM link_produit WHERE id_budgetor = 5
0
Merci.

[quote]un prospect = un budgetor ? [/quote]
Je confirme.

Interessant tout ca.
Merci bien.

Mais ça va engendrer dans grandes modifications :)
0
Par contre j'ai oublié de dire quelque chose.

Cette requête me sert pour un export XML, en effet cet export devra être réimporté dans un back office.
La requête en question permettra de selectionner tout les champs des tables des produits ainsi que celle de la table budgetor?

Merci bien.
0
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
147
La derniere requete ne te renverra que les id_produit de la table link_produit.

Si tu veux tout les champs il faut faire :


SELECT *
...FROM produit P, link_produit L, budgetor B
......WHERE P.id_produit = L.id_produit
..........AND B.id_budgetor = L.id_budgetor
..........AND L.id_budgetor = 5
0
Ok merci, par contre je viens de bien y réfléchir au calme.

Un petit problème se pose en effet, mes produits n'ont pas tous la même structure de BDD, les champs ne sont pas les mêmes; du coup je sature et je n'arrive plus à être lucide.

* budgetor (id_budgetor, nom, prenom ....)
* link_produit (id_produit, id_budgetor)
* produit (id_produit, idTypeProduit)
* typeProduit (id_TypeProduit, nomProduit) (où nomProduit est depend ou dotation..)
* depend (id_TypeProduit,champ1, champ2)
* dotation (id_TypeProduit,champ1,champ2,champ3,champ4)

Cette structure irait non?
0
Messages postés
791
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
30 juillet 2018
147
Sache que tu peux mettre des champs vides ;)

A moins que ce que tu veux faire ce sont des 'Sous-Types' de ta table Produit, dans ce cas, ta base est bonne :)

0
En fait je ne m'en sors toujours pas.

Déjà qu'est que sous entends "sous type"?

Ensuite je ne m'en sors pas car ma requête va devoir exporter toutes les produits auquel il a souscrit ainsi que le infos sur le prospect lui même afin d'être stocké dans un fichier XML.

Je ne possède pas de table produit unique mais plusieurs tables de produits toutes différentes et du coup je ne sais pas comment m'y prendre pour ma requête!!!

Merci
0