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

 MySQL Discussion :

Les clefs étrangères dans sa BDD


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dafpp
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 345
    Par défaut Les clefs étrangères dans sa BDD
    Bonjour, je voudrai simplement savoir si déclarer sa donnée en tant que clef étrangère était vraiment utile?

    bah oui:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select *
    from a, b
    where a.id = b.id;
    marche très bien.

    Quel est le réelle intérêt de déclarer une donnée en clef étrangère ou j'ai mal compris qqchose ?

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Aucun, c'est totalement cosmétique. Si on met des clefs étrangères c'est pour le fun !
    D'ailleurs beaucoup milite pour les retirer puisque ça sert à rien !!!































    et si vous lisiez un peu avant de poser des questions ????

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Caustique comme réponse, mais ça se comprend
    Aller dafpp un début de réponse dans :
    Intégrité référentielle (FOREIGN KEY / REFERENCES)

    Sinon fait aussi des recherche sur CASCADE, un mot clé très important et extrèmement pratique des contraintes d'intégrités référentielles.

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Citation Envoyé par dafpp Voir le message
    Bonjour, je voudrai simplement savoir si déclarer sa donnée en tant que clé étrangère était vraiment utile?

    bah oui:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select *
    from a, b
    where a.id = b.id;
    marche très bien.

    Quel est le réelle intérêt de déclarer une donnée en clé étrangère ou j'ai mal compris qqchose ?
    Saluton,
    Dura lex sed lex, serait-elle la devise de ce bon SQLpro.

    En cette fin de soirée je trouvais pourtant la candeur de ce post....rafraîchissante.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre éclairé Avatar de dafpp
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 345
    Par défaut
    je sais très bien ce que c'est une clef étrangère (désolé pour les clé et pas clef, on voit de tout sur le net, donc après on sait plus l’orthographe - même si ça paraissait plus logique pour clef... bref).

    je voulais savoir ce qu'apportait vraiment d'indiquer foreign key, puisque un lien reste un lien, et si qu'on sait que a.id c'est la même chose que b.id, on a juste à sélectionner donc tout ce qui est égale. Je pensais par là en posant ma question s'il n'y avait pas quelque chose d'automatique, mais c'est pas le cas, donc résolu !
    merci

  6. #6
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Au passage, évitons de raviver la guerre des étoiles et, depuis 1982 (bientôt 20 ans ma doué!) la syntaxe normalisée pour les jointures est plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT les_noms_de_colonne_qui_vont_bien_plutôt_qu_étoile
    FROM a
    INNER JOIN b USING (id)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT les_noms_de_colonne_qui_vont_bien_plutôt_qu_étoile
    FROM a
    INNER JOIN b 
    ON a.id=b.id
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  7. #7
    Membre éclairé Avatar de dafpp
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 345
    Par défaut
    merci, j'en tiendrai bien compte

    INNER JOIN ? je connaissais pas, je vais revoir tout ça.
    C'est plus rapide que WHERE ? ça permet de joindre 2 tables par rapport à leur clef étrangère directement ?

    edit: en effet, ,je viens de lire le cours de cyberzoide, qui est très bien expliqué, et qui indique que pour faire une jointure, il y a plus rapide:
    - ce que tu as dis juste au dessus.

    Merci à tous

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 : 16 818
    Billets dans le blog
    14
    Par défaut
    Ce n'est, en principe, ni plus rapide ni plus lent mais c'est surtout plus lisbile et évite des erreurs dans les requêtes car avec l'ancienne syntaxe il est très facile d'oublier une condition de jointure. Je ne compte plus le nombre de requêtes en erreur postées ici, écrites avec l'ancienne syntaxe, que j'ai résolues simplement en récrivant les jointures correctement. Dans 90% des cas, il manquait une condition de jointure !

    Pour tout savoir sur les jointures : c'est encore chez SQLPro.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  9. #9
    Membre éclairé Avatar de dafpp
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 345
    Par défaut
    d'accord merci

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/11/2008, 14h28
  2. Réponses: 1
    Dernier message: 06/02/2008, 19h17
  3. [SQL] Pb Mysql n'insert pas les bonnes valeur dans la bdd
    Par potao dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 11/02/2007, 03h12
  4. Comment d'afficher automatiquement les macro présentes dans une BDD?
    Par Stéphane Olivier BERNARD dans le forum Access
    Réponses: 3
    Dernier message: 03/07/2006, 14h49
  5. [MySQL] Script pour modifier les caracteres speciaux dans la bdd
    Par isa150183 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/09/2005, 13h07

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