IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Au sujet de la clé étrangère


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 169
    Points : 68
    Points
    68
    Par défaut Au sujet de la clé étrangère
    Bonjours à tous !

    Pouvez vous m'expliquer ce qu'une clé étrangère car je n'arrive pas à me faire une idée bien prècise mais surtout comment en s'en sert !

    Je sais qu'elle permet de relier une table vers une autre table dite "étrangère" mais pas comment je pourrai l'utiliser.

    Par exemple, puis-je connaitre toutes les valeurs de la lignes (table 1)correspondant à la valeur de la clé étrangère (table 2) alors que celle-ci ne désigne qu'un seul critère (par exemple: "id_livre" --> smallint).

    Puis-je donc à partir de cette clé, consulté autre chose que "id_livre", par exemple, le titre --> varchar(20) via la FK, ou autre chose parce que je ne sais pas comment faire. (sans ouvrir la table livre sachant que la clé étrangère se trouve dans une autre table).

    Tout en vous remerciant, j'espère avoir été aussi clair que possible pour poser ma qt.

    Merci.

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Une clé étrangère sert à dire au moteur de base de données que les valeurs prises par un champ doivent être contrôlées en fonction de l'existence de cette même valeur en tant que primary key dans une autre table, et ce aussi bien lors des insert, update dans la table portant la clé étrangère que lors des update, delete dans la table portant la primary key.
    C'est un problème d'intégrité des données.

  3. #3
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut Re: Au sujet de la clé étrangère
    Citation Envoyé par savoir
    Pouvez vous m'expliquer ce qu'une clé étrangère car je n'arrive pas à me faire une idée bien prècise mais surtout comment en s'en sert !
    As-tu déjà fait de l'analyse fonctionnelle ? As-tu déjà utilisé une méthode d'analyse (tel que Merise, UML,...) ?
    Ta réponse sera là. C'est notion est une des bases d'un modèle de données issu d'une analyse.

    Une clé étrangère est une information issue d'une autre entité de ton modèle. C'est celle qui va permettre le lien entre tes différentes entités. Une table est la représentation de ton entité avec les liens qui lui sont intégrés.
    De plus, une clé étrangère est un information qui, obligatoirement, est une clé primaire sur une entité de ton modèle.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 169
    Points : 68
    Points
    68
    Par défaut
    Merci de vous interresser à ma qt.

    Effectivement, j'ai déjà étudier le mcd de la méthode de Merise (1er année) ma question serai plutot :

    "Puis-je à partir de la clé étrangère (car je sais que celle-ci ne peut avoir que la valeur de la clé primaire) me balader dans la table référencé pas uniquement dans le champs référencé mais à travers tous les champs de cette table à travers la clé étrangère.

    emprunt livre

    id_emprunt id_livre
    nom_Emp Titre_li
    ... ...
    emp_fk_livre ISBN_li
    _________________________________________________

    voici deux tables "emprunt" et "livre". Puis-je à partir de la clé étrangère "emp_fk_livre" qui pointe "id_livre", naviguer dans "livre".

    Donc, "emp_fk_livre" prend la valeur de "id_livre", mais peut il prendre la valeur de ISBN_li, sachant que la FK est un smallint !

    Cette question me perturbe, sinon, je ne vois vraiment pas à quoi ça peut servir !

    Encore une fois, merci de l'aide que vous m'accorder ![/url]

  5. #5
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Je ne vois pas comment elle peut prendre la valeur d'une des deux. Soit elle prend la valeur d'une, soit la valeur de l'autre.
    Auquel cas, ce n'est pas une clé étrangère.

    Pourrais-tu être un peu plus précis car j'avoue ne pas très bien te suivre.

  6. #6
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Points : 641
    Points
    641
    Par défaut
    Bonjour,
    je crois que tu te mélanges un peu les pinceaux...
    La clé étrangère permet de te lier sur la table de référence par la valeur attribuée à cette clé. Tu pointes donc sur le record entier (=toutes les colonnes) de la table de référence.

  7. #7
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    La clé étrangère dans une table est par définition la clé primaire d'une autre table, elle identifie donc parfaitement 1 et 1 seul enregistrement de cette table si elle est non nulle. A l'aide d'une jointure il est donc possible de récupérer (je n'aime pas beaucoup le verbe naviguer pour une base relationnelle) toutes les colonnes de la table de référence par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Livre.*
    FROM Livre INNER JOIN Emprunt ON Livre.IdLivre = Emprunt.IdLivre
    WHERE ....
    Comme l'a dit Mashimaro si ta FK référence la colonne IdLivre, elle ne peut pas référencer une autre.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 169
    Points : 68
    Points
    68
    Par défaut
    Merci à vous tous !

    Vous m'avez éclairé d'une lumière incroyable !

    Mes hypothèses sont confirmés !


    Encore une fois, Merci infiniment !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débat] Expériences au sujet de .NET
    Par DevX dans le forum Débats sur le développement - Le Best Of
    Réponses: 46
    Dernier message: 25/05/2014, 11h16
  2. [PhpMyAdmin] Question au sujet des clés étrangères
    Par Malik610 dans le forum Requêtes
    Réponses: 2
    Dernier message: 23/06/2013, 22h21
  3. Au sujet des mots de passe
    Par FranT dans le forum Langage
    Réponses: 6
    Dernier message: 17/09/2002, 22h16
  4. [DB2] Au sujet de...
    Par Eric Denné dans le forum DB2
    Réponses: 2
    Dernier message: 16/09/2002, 19h21
  5. Au sujet des constantes
    Par FranT dans le forum Langage
    Réponses: 8
    Dernier message: 09/08/2002, 11h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo