Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/09/2011, 23h00   #1
Nouveau Membre du Club
 
Femme
Inscription : février 2008
Messages : 50
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 23

Informations forums :
Inscription : février 2008
Messages : 50
Points : 26
Points : 26
Par défaut clé étrangère qui pointe vers un champ (n'est pas clé primaire)

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
rokirakat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 02h42   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 09h27   #3
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Chef de projets Générix
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
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.
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 04h15   #4
Nouveau Membre du Club
 
Femme
Inscription : février 2008
Messages : 50
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 23

Informations forums :
Inscription : février 2008
Messages : 50
Points : 26
Points : 26
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:
Est-ce qu'une même image peut être référencée par deux articles ?
pour l'instant non mais je dois mettre en place cette possibilité afin d’éviter des soucis au cas ou je voudrais avoir une image sur un article ou plusieurs articles!
Citation:
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"
la , je comprends pas moi aussi pourquoi mon encadrant a refusé cette idée puisqu'elle étais ma première suggestion ... si j'adopte cette idée il me faut la table tb_image avec des clés étrangères qui référencent tous les autres tables tb_article tb_vehicule... sans utliser des tables 'intermédiaires' "GroupeImageArticle" et "GroupeImageVehicule"... non ?

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é
rokirakat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 09h45   #5
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Chef de projets Générix
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
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.
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 10h44   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 17h51   #7
Nouveau Membre du Club
 
Femme
Inscription : février 2008
Messages : 50
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 23

Informations forums :
Inscription : février 2008
Messages : 50
Points : 26
Points : 26
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
rokirakat est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h23.


 
 
 
 
Partenaires

Hébergement Web