Base de données

Fermé
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 - 31 août 2009 à 11:38
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 - 31 août 2009 à 14:32
Bonjour,

J'ai lu tous les cours php/sql sur CCM et je m'en sors en faisant des exercices d'entrainement. Rien de tel pour retenir et apprendre correctement les bases.

Je m'apprête à utiliser une base de données un peu plus complexe, utilisant des références de tables en tables (clés étrangères).

Pour cela j'ai deux tables (je fais simple) :

FOURNISSEURS (id, nom, site, email);
PRODUITS (ref, produit, observations, categorie);
CATEGORIE (id_categorie, categorie);

Un produit figure dans 1 seule catégorie.
Une catégorie contient

// Pour l'histoire des catégories, pas de table de jointure mais je sais pas si mon approche est bonne.

Un fournisseur propose 1 ou N produit(s).
Un produit est vendu par 1 ou N fournisseur(s).

Il y a donc contrainte d'intégrité fusionnel... Création d'une table de jointure ?

Mais là en sql, je bloque un peu. Comment cela peut-il fonctionner et quelle est cette table de jointure ?

4 réponses

M@dien Messages postés 437 Date d'inscription mercredi 29 juillet 2009 Statut Membre Dernière intervention 23 septembre 2010 74
31 août 2009 à 12:26
Bonjour,

Tu es sur la bonne voie de la sagesse pour sql =)

Une table de jointure est une table permettant de faire le lien 0..* dans un sens mais aussi dans l'autre (Un fournisseur propose 1 ou N produit(s) et Un produit est vendu par 1 ou N fournisseur(s))

Cette table se composerait dans ton cas de 2 colonnes ou plus:
FOURNISSEURS (id, nom, site, email);
PRODUITS (ref, produit, observations, categorie);
LIEN_PRODUITS_FOURNISSEURS (id_fournisseur,ref_produit)

Une telle table permet de lier facilement les fournisseurs avec les produits:
si on a des fournisseurs
(1,'fournisseur 1','site 1','email 1')
(2,'fournisseur 2','site 2','email 2')
(3,'fournisseur 3','site 3','email 3')
et des produits
(1001,'produit 1','','cat 1')
(1002,'produit 2','','cat 1')
(1003,'produit 3','','cat 2')
(1004,'produit 4','','cat 2')

Dans la table LIEN_PRODUITS_FOURNISSEURS
Si on veut lier le fournisseur 1 aux produits 1002 et 1003:
(1,1002)
(1,1003)
On a ainsi plusieurs produits pour un fournisseur
Et si le produit 1004 est founit par les 3 fournisseurs:
(1,1004)
(2,1004)
(3,1004)
On a ainsi plusieurs fournisseurs pour un produit
0
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 32
31 août 2009 à 13:52
Encore toi M@dien... Tu es sur tous les fronts et toujours là quand on a besoin de toi.

Ceci explique donc qua la table de jointure n'a pas besoin d'ID... On n'aura jamais deux fois une même entrée...

Mais maintenant, Si je rentre des données dans la table produits et dans la table fournisseurs, la table LIEN_PRODUITS_FOURNISSEURS n'est pas mise à jour automatiquement. Mais bon, je pense que ce n'est pas trop dure à faire depuis une page PHP.

J'ai pourtant bien désigné mes clés étrangères.

Parce que faut que ce soit le cas, sinon il y a un risque d'erreur et ça y'a pas moyen... Même pour les exercices, faut que ça marche ! Sur des BDD plus importantes, attention les dégâts !

Merci en tout cas.
0
M@dien Messages postés 437 Date d'inscription mercredi 29 juillet 2009 Statut Membre Dernière intervention 23 septembre 2010 74
31 août 2009 à 14:04
Oui, il faut mettre à jour manuellement la table de liens. C'est contraignant mais c'est comme ça.

Bon courage à toi!
0
Fetide68 Messages postés 737 Date d'inscription dimanche 4 janvier 2009 Statut Membre Dernière intervention 14 avril 2023 32
31 août 2009 à 14:32
Merci beaucoup.
0