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

Requêtes MySQL Discussion :

utilisation d'une clé étrangère


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut utilisation d'une clé étrangère
    Bonjour

    Voici des avantages aux contraintes de clés étrangères :

    *

    En supposant que les relations soient proprement con¸ues, les clés étrangères rendent plus difficile pour un programmeur d'insérer des valeurs incohérentes dans la base.
    *

    La vérification centralisée de contraintes par le serveur de base de données rend inutiles l'application de ces vérifications du coté de l'application. Cela élimine la possibilité que d'autres applications ne fassent pas les vérifications de la même fa¸on que les autres.
    *

    L'utilisation des modifications et effacement en cascade simplifie le code du client.
    *

    Les règles de clés étrangères proprement con¸ues aident à la documentation des relations entre les tables.

    J'ai 4 tables innoDB dans une même base de données.

    La table principale à un nombre incrémenté automatiquement comme clé et un champ 'accession'.

    Mes trois autres tables contiennent des informations complémentaires pour certaines entrées de la table principale et on pour clé primaire l'accession.

    Je vais devoir faire des requêtes de jointure pour récupérer des informations croisées. Est-ce utile dans mon cas d'utiliser une clé étrangère? Quand j'essaie de mettre un index sur le champ 'accession' de ma table principale, j'obtiens un message d'erreur me disant que le type BLOB nécessite une valeur numérique.


    Merci pour votre aide,

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    salut,

    pourquoi tu n'utilises pas comme clé ta valeur numérique sur tes autres tables?
    ca serait beaucoup moins lourd

    Pour en revenir sur l'index sur le champ blob, un peu de lecture : http://dev.mysql.com/doc/refman/5.0/...ate-index.html

  3. #3
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Merci beaucoup pour ton aide. Je viens de rajouter l'id comme clé primaire. Maintenant que mes 4 tables ont la même clé primaire que dois-je faire? Est-il possible de créer un lien entre 2 clé primaires?

  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 : 74
    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 Jasmine80 Voir le message
    J'ai 4 tables innoDB dans une même base de données.

    La table principale à un nombre incrémenté automatiquement comme clé et un champ 'accession'.

    Mes trois autres tables contiennent des informations complémentaires pour certaines entrées de la table principale et on pour clé primaire l'accession.
    Saluton, Jasmine,
    Une chose me chiffonne dans tout ça, quel type de relations y-a-t'il entre la table mère et ses fillles.
    Sont-ce des relation 1-n ou 1-1, je veux dire est-ce qu'à tout élément mère il peut correspondre au plus une fille dans chacune des tables ou n filles dans chacune des tables (il peut aussi n'y avoir aucune fille dans aucune des tables ou certaines d'entre elles).
    C'est important pour gérer l'export de la clé mère (FK pour les filles) car si une mère peut avoir plusieurs filles dans une même table fille, il ne faut pas que la FK soit PK dans la table fille.
    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 éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    C'est une relation 1-1 entre la mère et les filles et les trois filles n'ont aucune entrée commune. J'ai bien compris que la relation mère fille ne pourrait pas être 1-n car j'aurais une duplication de ma clé primaire ce qui aurait d'ailleurs généré plein de messages d'erreur au remplissage des filles.

    La question reste donc à quoi bon faire 4 tables ... c'est plus léger à gérer. J'ai des dizaines de milliers (si pas des centaines) d'entrées chez la mère et 202, 153, 19 entrées chez les filles. De plus je n'aurai pas souvent besoin des données complémentaires de la mère (sauf peut-être un champ que je pourrai importer de la mère vers les filles). J'avais hésité à récupérer tous les champs de la mère absents de chez les filles mais ça aurait crée de la redondance qui me semble inutile. Contredis moi si je me trompe mais il est préférable d'utiliser des jointures entre mes tables que de dupliquer mes champs entre la mère et ses filles.



    Merci pour votre aide.

  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 : 74
    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 Jasmine80 Voir le message
    C'est une relation 1-1 entre la mère et les filles et les trois filles n'ont aucune entrée commune.
    Veux-tu dire qu'une mère ne peux avoir au plus qu'une fille (donc éventuellement 0 fille) ?
    Citation Envoyé par Jasmine80 Voir le message
    La question reste donc à quoi bon faire 4 tables ... c'est plus léger à gérer. J'ai des dizaines de milliers (si pas des centaines) d'entrées chez la mère et 202, 153, 19 entrées chez les filles.
    Mais quelles différences de structures y-a-t'il vraiment entre ces types de filles ?
    Citation Envoyé par Jasmine80 Voir le message
    Contredis moi si je me trompe mais il est préférable d'utiliser des jointures entre mes tables que de dupliquer mes champs entre la mère et ses filles.
    Ça, bien sûr.
    Mais je n'ai qu'une vision très incomplète de ton domaine de gestion.
    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 éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Citation Envoyé par Maljuna Kris Voir le message
    Veux-tu dire qu'une mère ne peux avoir au plus qu'une fille (donc éventuellement 0 fille) ? Mais quelles différences de structures y-a-t'il vraiment entre ces types de filles ?Ça, bien sûr.
    Mais je n'ai qu'une vision très incomplète de ton domaine de gestion.
    Oui exactement, une entrée mère possède au plus une entrée fille dans une des trois tables filles.

    Les trois filles ont exactement la même structure, la différence est l'origine biologique de leur contenu. Si je veux ne créer qu'une seule table fille, je dois rajouter un champ contenant cette origine (le nom des tables filles en fait). Pour mes jointures ultérieures peut-être cela serait-il plus simple de ne créer qu'une seule fille et d'ajouter un champ quoique qu'à priori je ne dois traiter ces filles qu'une seule à la fois, elles sont indépendantes.

  8. #8
    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 : 74
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Ouais, je pense aussi que tu ferais mieux de n'avoir qu'une seule table fille en typant les lignes.
    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)

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

Discussions similaires

  1. [Foreign Key] Un champ est-il une clé étrangère ?
    Par starch dans le forum Bases de données
    Réponses: 5
    Dernier message: 27/02/2004, 14h01
  2. utilisation d'une variable globale
    Par ZZ dans le forum ASP
    Réponses: 3
    Dernier message: 03/12/2003, 20h11
  3. Utilisation d'une variable sur plusieurs unités
    Par Yamaneko dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 12h23
  4. Utilisation d'une dll écrite en delphi 5 dans VB6
    Par Jean-Louis dans le forum Langage
    Réponses: 4
    Dernier message: 05/08/2002, 10h19
  5. Réponses: 4
    Dernier message: 05/06/2002, 15h35

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