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

PHP & Base de données Discussion :

A quoi servent les réferences entre les tables?? [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 189
    Points : 57
    Points
    57
    Par défaut A quoi servent les réferences entre les tables??
    Bonjour,

    A quoi servent les réferences entre les tables?? ca peut jouer dans les requetes par la suite??

    enfaite ce que je comprends pas, c'est par exemple:

    j'ai une table membres avec:

    id
    nom
    prenom
    etc...

    une table information avec

    numin
    ...
    ...

    j'ai fais une contrainte constraint fk_ foreign key(numin) references membres

    ce que je comprends pa c comment il peut savoir que je fais references vers le numéro id de la table membre

    je vous remercie

  2. #2
    Membre actif
    Inscrit en
    Septembre 2005
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 185
    Points : 220
    Points
    220
    Par défaut
    slt alain, t'es pas dans le bon forum.ceci c'est l'analyse .mais bon je vais tout de meme te répondre. en fait il fait reference id parce aue les deux tables ont respectivement pour cle primaire id et numin.
    compris?
    la succession d'évènement que nous subissons toute notre vie n'est qu'un phénomène de compensation dont la nature en est l'arbitre.[Inéluctabilité de la nature ] Polace

  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Il y a un petit détail à prendre en compte lorsqu'il s'agit de MySQL : les formats de tables (MyIsam, InnoDB, Merge, etc.) ne supportent pas tous ce concept de contraintes.
    Si tu souhaites les utiliser (ce qui est recommandé car cela simplifie grandement le code PHP qui gère le tout), il faut prendre garde à utiliser un format de table comme InnoDB, qui comprend cette syntaxe et qui l'utilise. MyIsam (le format de table par défaut) comprend cette syntaxe mais ne l'utilise pas.

    Tu peux remarquer l'intérêt des FOREIGN KEYs par exemple si tu as plusieurs tables dont les tuples dépendent de ceux d'une table mère. Lorsque tu supprimes un tuple de la table mère, ceux qui y correspondent dans les autres tables n'ont plus de raison d'exister : habituellement, les limitations de MySQL t'obligent à programmer la suppression via PHP. Si tu ne le fais pas, tu te retrouves avec des incohérences dans ta BDD : les identifiants utilisés dans les tables mènent à des entrées qui n'existent plus dans la table mère.
    FOREIGN KEY te permet d'utiliser ensuite une CONSTRAINT comme ON DELETE CASCADE. Ce n'est ici qu'un exemple, d'autres solutions sont possibles, mais l'idée est toujours d'aller effectuer un traitement dans les autres tables lorsqu'un tuple de la table mère est modifié (ici, une suppression).

    Voyons un exemple concret.
    Mettons que nous fassions l'étude d'un magasin. Nous aurions des clients, des produits et des factures. Les factures sont composées de lignes décrivant le numéro de la facture, le produit acheté et en quelle quantité.
    client (id, nom, prenom, adresse, telephone)
    produit (id, nom, prix)
    facture (id, date, montant, #id_client)
    ligne_facture (#id_facture, #id_produit, quantité)
    • Lorsque tu supprimes un produit, tu ne veux pas qu'il disparaisse des factures qui existent déjà, tu peux donc faire un CONSTRAINT FOREIGN KEY ON DELETE SET NULL
    • Lorsques tu supprimes une facture, en revanche, les lignes correspondant à cette facture n'ont plus lieu d'être. ON DELETE CASCADE s'occupera de supprimer les lignes des autres tables qui ont une référence à notre identifiant supprimé : ici, il s'agit de ligne_facture
    • Lorsque tu supprimes un client, à toi de savoir si tu souhaites supprimer les factures qui le concernent (ON DELETE CASCADE) ou si tu veux les anonymer (ON DELETE SET NULL). Si tu les supprimes, le changement sera répercuté en cascade dans ligne_commande.


    Plus de détails dans le manuel MySQL, chapitre 15.2.6.4 FOREIGN KEY Constraints.

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

Discussions similaires

  1. les methodes et les associations entre les classes
    Par zin_rbt dans le forum Diagrammes de Classes
    Réponses: 1
    Dernier message: 24/05/2010, 14h41
  2. Pourquoi les relations entre les tables
    Par ghita269 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/12/2005, 11h54
  3. [Relations] afficher les relations entre 2 tables
    Par dzincou dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 14/01/2004, 17h07

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