Clés - SQL/NoSQL - Programmation
Marsh Posté le 17-04-2003 à 16:26:29
Proposition ...
produit
id_prod prod
------------
11 pomme
12 poire
conditionnement
id_cond cond
------------
1 Bac
2 Plateau
3 Sachet
config_dispo
-------------
id_prod id_cond qté
11 1 20
11 2 100
11 3 10
12 2 90
Marsh Posté le 17-04-2003 à 16:48:17
@vttman2
Ton idée est pas mal, mais pas tout a fais juste pour mon cas. J'explique un peu plus precisement.
C'est une base de donnée qui contient des produits chimiques.
Je dois faire deux tables (pour l'instant), une premiere contenant les données specifiques au produit (Cas_number (reference internationnale du produit), formule_chimique, masse_moleculaire...) et une autre contenant tous les conditionnements fournisseurs (Cas_number, fournisseur, quantité_pack1, prix_pack1...), en fait ce qu'on appelle conditionnements, c'est les differentes quantités et prix pour un même produit. Donc je ne peux pas faire comme tu dit, car les conditionnements ne sont pas les mêmes chaque produit.
Apres, par je dois faire une application. Quand je rentrerai un nom de produit, il va me chercher ce produit dans la table produit. Puis en clickant dessus, on obtient tous les conditionnements des differents fournisseurs.
Donc je me demande comment construire ces table, qu'elle clé primaire et clé secondaire (index)?
Marsh Posté le 17-04-2003 à 16:52:54
produit
id_prod prod
------------
11 ethanol
12 soude
founisseur
id_fou fou
------------
1 ELF
2 AZF
3 Petrochimie Int.
prix
-------------
id_prod id_fou qté prix
11 1 20 50
11 1 5 75
11 2 100 100
11 3 10 2500
12 2 90 5
Marsh Posté le 17-04-2003 à 16:56:49
@MagicBuzz
C'est pas mal ton truc. Encore une question:
Pour faire une recherche plus rapidement avec mysql, je dois les indexé comment les tables, en sachant que ma recherche de depart se fera toujours sur le nom, ou la formule_moleculaire du produit?
Marsh Posté le 17-04-2003 à 16:58:27
de 2 choses l une
- soit le type de conditionnement donne tous les autres attributs auquel cas ca devient le type de conditionnement qui est la clé primaire (ce sera l 'attribut qui est sensé relier tes 2 tables)
- soit le type de conditionnement ne donne rien du tout et alors il faut le laisser dans la table des produits paske ca ne generera pas de redondances
ca marche comme ca?
Marsh Posté le 17-04-2003 à 21:38:08
toutoun88 > écrit ta requête, une fois qu'elle sera écrite, les champs à indexer sauteront au yeux. tant qu'elle sera pas écrite, on peut débattre des heures dessus, on n'aura pas de réponse absolue.
Marsh Posté le 18-04-2003 à 09:00:48
Ouai, mais le probleme c'est que je debute dans la creation de table. Ce que je veux faire, c'est simple:
select * from conditionnement, produit
where (select * from produit where "nom" = produit.nom)
and produit.cas_number = conditionnement.casnumber;
La synthaxe est elle juste?
Et les index, c'est quoi dans ce cas la?
Quelle est la synthaxe en mysql pour les créer?
Merci.
Marsh Posté le 18-04-2003 à 09:19:00
toutoun88 a écrit : |
tu peux rappeler ce que ta requete est censee faire?
a mon avis la requete devrait etre :
select * from conditionnement , produit
where produit.nom like "nom"
and produit.cas_number = conditionnement.casnumber;
Marsh Posté le 18-04-2003 à 09:47:04
En fait j'ai oublier de preciser que "nom" etait une variable d'une application java.
ce que je veux, c'est que l'utilisateur entre un nom, et ce nom est utilisé dans la requete pour touver tous les produits ayant ce nom dans la table produit. Une fois que ça c'est fait, grace au cas_number retourné, il refait une requete dans la table conditionnement où ce cas_number doit etre egale au cas_number de la table conditionnement.
Mais je ne sai pas du tout comment indexer mes champs. Comme je debute en mysql, je ne fais pas trop la difference entre key,foreign key, index, reference...et tout et tout. Moi ce que je veux, c'est que ça aille trés vite, parce que j'ai forcément deux parcours a faire, un dans la table produit, et l'autre dans la table conditionnement qui contiennent chacune environ 100000 lignes!
Merci pour vos conseils
Marsh Posté le 18-04-2003 à 09:54:41
la question a se poser est : quel est le champ unique de ta table?
Si c'esl le nom, il devient ta cle primaire
mais je suis pas trop fort pour ca
Marsh Posté le 18-04-2003 à 10:04:58
ma clé primaire est deja definie, c'est le cas_number car il est unique pour chaque produit. Mais, mais recherche s'effectue sur le nom.
Marsh Posté le 18-04-2003 à 10:18:56
si tu as une version de mysql qui accepte les sous requetes, celle que je t'ai donne devrait etre bonne sinon tu la decompose.
J'arrive pas a saisir ton probleme
Marsh Posté le 17-04-2003 à 15:10:27
Bonjour a tous,
voila, ça va certainement vous paraitre une question bete, mais j'ai besoin d'une reponse:
Voila, j'ai deux table, une produit, et l'autre conditionnements. La premiere repertorie plusieurs produits, et l'autre repertorie les differents conditionnement(quantité...) de ces produits. Mes dans ce cas, les clés primaires de mes tables sont les mêmes, le numero du produit. Ai-je le droit d'utiliser la même clé primaire pour deux tables differents ou dois-je en mettre une en clé secondaire?
Merci de votre reponse.