|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : février 2008 Messages : 50 ![]() |
Bonsoir,
je n'arrive pas à créer une relation entre deux tables par une clé étrangère qui pointe pas vers une clé primaire : tb_image -ImgId -GroupImgId -UrlImg ... tb_article -ArticleId -GroupImgId# ... ça marche dans le cas ou le champ GroupImgId a une contrainte UNIQUE mais je veux qu'il accepte les valeurs répétées afin d’attribuer aux images de même article un GroupImgId identique . si y on a d'autre solutions au niveau conceptuel je suis preneur sinon comment puis je résoudre mon problème ça fait deux jours que je galère la dessus je vous remercie pour votre coud de main |
|
|
00
|
|
|
#2 |
![]() ![]() |
Il vous faut une table supplémentaire GroupeImage, avec une clef primaire que vous pourrez référencer.
Le principe des clefs étrangères est bien de pointer sur une colonne ayant au moins une contrainte d'unicité.
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#3 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Une solution pour garantir la contrainte, mais qui ne sera pas une clé étrangère (et d'un point de vue performances, assez moyen) est de faire une contrainte "check" vérifiant la présence de "GroupImgId" dans la table tb_image.
Mais sinon, Waldar a raison, conceptuellement, il semble de toute façon plus judicieux de créer une table "groupeimage" qui sera référencée à la fois par tb_image et tb_article. Sinon, je n'arrive pas bien à comprendre "dans quel sens" fonctionne votre lien entre article et image ? De ce que je comprends, plusieurs images peuvent se retrouver dans un même article. => Je serais donc tenté de mettre une clé "article_id" dans la table "tb_image", et donc abandonnée cette notion de "groupe d'images" Est-ce qu'une même image peut être référencée par deux articles ? Si oui, alors il faut une table de correspondance "imagearticle" faisant référence à la fois à image_id et article_id (et tb_article et tb_image) ne font plus référence à une table externe. Selon tes besoins, quelle est cette nécessité de regrouper les images d'un même article ensemble ? J'ai l'impression que la table "imagearticle" répond à ton problème. |
|
|
00
|
|
|
#4 | ||
|
Nouveau Membre du Club
![]() Inscription : février 2008 Messages : 50 ![]() |
Un grand MERCI à Waldar & StringBuilder
alors pour cette partie de ma BD , l'ajout d'une autre table GroupeImage( avec un identfiant et 2 clés étrangères : ImgId et ArticleId ) est la solution -comme vous m'avez expliqué -. mais pour le reste de la BD y a d'autre tables qui font référence à la table tb_image ex : la table tb_vehicule , tb_promo ... qui nécessite pour chaque enregistrement une image ou plus donc je dois pas créer une table de groupement d'images pour chaque liaison avec la table tb_image !! Citation:
Citation:
je sais pas si c'est claire ou non et désolée pour mon français je vous remercie encore une fois pour le temps que vous m'avez accordé
|
||
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Pour reprendre les grandes lignes de la modélisation de base de données :
Si une et une seule image peut être présente dans un ou plusieurs articles, alors il faut une clé étrangère image_id dans la table des articles. Si une ou plusieurs images peuvent être présentes dans un et un seul article, alors il faut une clé étrangère article_id dans la table des images. Si une ou plusieurs images peuvent être présentes dans un ou plusieurs articles, alors il faut une table de correspondance faisant référence à la fois à la table image à et la table article. Si une et une seule image peut être présente dans un et un seul article, alors il faut une unique table regroupant à la fois les images et les articles. |
|
|
00
|
|
|
#6 |
![]() ![]() |
Tous les cas de cardinalités pour une association binaire sont étudiés dans un billet de mon blog consacré aux tables associatives.
Si la table des images peut être associée à plusieurs autres tables, alors il te faudra forcément des tables associatives car la clé étrangère ne devra pas être dans la table des images, même si une image ne peut par exemple être associée au maximum qu'à un article et qu'un article ne peut avoir au maximum qu'une image. article -0,1----associer----0,1- image vehicule -0,n----associer----0,1--| promo -0,n----associer----0,n-----| Dans ces trois cas, il faut une table associative.
__________________
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
|
|
|
#7 |
|
Nouveau Membre du Club
![]() Inscription : février 2008 Messages : 50 ![]() |
merci StringBuilder & CinePhil pour votre cours , le blog a résumé tous les cas possibles , je le garderai dans mes favoris
je voulais éviter d'avoir plusieurs tables associatives mais si c'était la solution logique de mon cas je procéderais comme vous avez indiquer. la seule chose à modifier est : article -0,1----associer----0,n- image à la place de article -0,1----associer----0,1- image puisqu'un article peut avoir plusieurs images. je vous remercie encore une fois pour votre aide , vous êtes vraiment généreux |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com