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

MVC PHP Discussion :

clé étrangère dans une table


Sujet :

MVC PHP

  1. #1
    Membre à l'essai
    clé étrangère dans une table
    Salut

    j'ai besoin de votre aide au niveau de ce que je les cite maintenant (je suis débutant)
    j'ai deux table : boite et instrument
    je veux faire une liaison entre les deux bien sur à travers une clé étrangère id_boite de la table boite dans la table instrument pour l'utiliser après dans le jointure
    s'il vous plait comment on peut le faire vraiment je suis bloqué .. j'ai vu beaucoup d'exemple dans l'internet mais j'ai rien compris
    merci d'avance

  2. #2
    Membre éprouvé
    supposons une table "boites" contenant 2 colonnes
    "id_boit" et "nomdeboite"
    une table "instruments" contenant aussi 2 colonnes
    "id_inst" et "nominstrument"

    "id_boit" et "id_inst" sont les clefs PRIMAIRE, donc UNIQUE, il ne peut pas y avoir deux boites,n'y deux instruments avec le même numéro
    on aura par exemple

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    "boites"
    "id_boit" "nomdeboite"
    1            Boite numero 1
    2            Boite numero 2
    ...
    "instruments"
    "id_inst" "nominstrument"
    1           Instrument n°1
    2           Instrument n°2
    3           Instrument n°3
    4           Instrument n°4
    ...


    pour "Lier les instruments à des boites tu crée une table de liaison "link_inst_boit" avec deux colonnes on l'on inscrit les id des intruments et les id des boites
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    "link_id_inst" "link_id_boit" (normalement on réutilise les mêmes nom "id_inst" et "id_boit" mais pour l'explication j'ai ajouté "link_")
    1                  1                 (l'instrument 1 est dans la boite 1)
    2                  1                 (l'instrument 2 est dans la boite 1)
    3                  2                 (l'instrument 3 est dans la boite 2)
    4                  2                 (l'instrument 4 est dans la boite 2)
    1                  2                 (l'instrument 1 est aussi dans la boite 2)
    ...


    donc pour trouver les noms des instruments qui sont dans la boite n°2 tu fait un select avec une jointure
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT 
    *
    FROM link_inst_boit                       -- (on cherche dans la table link_inst_boit)
    join instruments on link_id_inst = id_inst -- (on ajoute les informations de la table instrument avec une correspondance entre link_id_inst et id_inst) 
    where link_id_boit = 2  -- (on ne prend que les liens concernant la boite 2)


    ce qui donne
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    link_id_inst	link_id_boit	id_inst	nominstrument
    3	        2	        3	        instr3
    4	        2	        4	        instr4
    1	        2	        1	        instr1




    oui mais les clefs étrangères dans tout cela !?

    a ce stade rien ne t'empêche d'introduire dans "link_inst_boit" un lien entre un instrument n° 1456(qui n'existe pas) et une boite n°17562(qui n'est même pas encore fabriquée)

    les clefs étrangéres sont là pour éviter ce genre d'erreur

    si tu crée une clef etrangére qui lie "link_id_inst" de la table "link_inst_boit" a la colonne "id_inst" de la table "instruments"
    et la valeur que tu introduit dans "link_id_inst" doit se trouver dans les valeurs de la colonne "id_inst" de la table "instruments"
    tu fait la même chose pour "link_id_boit" et la colonne "id_boit" de la table "boites"

    et il devient impossible d'inserer un numero d'intrument ou un numero de boite qui n'existent pas dans leur table respective, dans la table des liaisons
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  3. #3
    Membre à l'essai
    merci bien je comprends maintenant

  4. #4
    Membre éprouvé
    Content de t'avoir aidé, n'oublie pas de marquer le sujet comme "résolu"
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds