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 :

avis sur des clés secondaires croisées [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué Avatar de Giantrick
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    300
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 300
    Points : 195
    Points
    195
    Par défaut avis sur des clés secondaires croisées
    Bonjour,

    Dans un souci de rapidité dans mes requêtes, je voudrais savoir si c'est "prudent" et "pas trop lourd" d'inclure la clé primaire d'une table A dans la table B (comme une clé_secondaire et vice-versa) dans ma base de donnée MYSQL.

    exemple :
    Table (A) : contact
    id_contact est ma clé primaire pour cette table

    Table (B) : contact_etat_civil
    id_contact_etat_civil est ma clé primaire pour cette table

    une fois crée ces deux tables je voudrais aporter les modifications suivantes :
    Table (A) : contact
    id_contact est ma clé primaire pour cette table
    id_contact_etat_civil est une clé secondaire pour cette table

    Table (B) : contact_etat_civil
    id_contact_etat_civil est ma clé primaire pour cette table
    id_contact est une clé secondaire pour cette table

    Voici plus de précision : ma table contact possède des informations fixes alors que ma table contact_etat_civil contient des informations qui peuvent évoluer dans le temps.

    Lorsque j'affiche les résultats via PHP, je voudrais éviter les requêtes imbriqués grâce à cette méthode.
    Mon objectif étant d'alléger le code et de rendre plus rapide les requêtes SQL.

    Est-ce une bonne idée ? ou est-elle totalement fafelue... ?
    Autres suggestions ?

    Merci d'avance.
    -----------------------------------------------------
    - Etre clair dans sa demande, facilite les réponses.
    - Organiser son travail et sa programmation est indispensable à une rapide évolution.
    - Remercier ceux qui vous ont aider favorise le contact et augmente votre crédibilité.

    Le géant du sud-ouest...

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    Franchement je te dirai que non ce n'est pas une bonne idée. Tu vas certas gagner un temps infime pour certains types de requetes mais tu vas en perdre sur d'autres (par exemple, tu vas devoir inserer un champ de plus dans contact et etat civil)/

    Mais le plus important reste que tu vas dénormaliser ta base et ce n'est pas sans conséquence. Exemple, que se passe-t-il si le contact n'a pas d'état civil? Tu vas te retrouver avec une table contact qui aura un champ "etat civil" fantôme.

    En plus, concernant le cas précis de l'etat civil, une personne ne peut avoir qu'un état civil "a priori" donc tu ne devrais meme pas avoir de tables de jointures mais juste une clé secondaire etatcivil dans contact et une table etat civil avec la liste des etats civils disponibles. (mais bon aussi bien ton systeme précise qu'un contact peut avoir plusieurs etats civils et dans ce cas la faut vois cette derniere remarque d'une facon plus générale).

    Pour résumé, ce n'est jamais une bonne idée de dénormaliser un modèle. Un des rares cas ou j'ai pu constater qu'il etait nécessaire de biaiser le modele est d'enregistrer des données calculables à tout instant pour des raisons de performance dans la base de données au lieu de les recalculer a la demande. (et encore , ce n'est meme pas une dénormalisation).

  3. #3
    Membre habitué Avatar de Giantrick
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    300
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 300
    Points : 195
    Points
    195
    Par défaut
    Merci pour cette réponse Raideman

    Comme tu dois t'en douter, je n'ai jamais pris de cours en base de donnée, donc comme j'apprend sur le tas, je complique parfois les choses...

    Pour l'etat civil, il peut s'avérer qu'une personne change de nom ou de prénom pour x raison (même si les probabilité sont faibles pour la majorité des personnes, je dois en tenir compte pour des utilisations plus spécifiques que je projète)

    De plus, j'ai donné cet exemple d'etat civil mais je souhaitais généraliser l'idée à toutes mes tables.

    Selon ce que tu viens d'évoquer, je vais faire classiquement et faire des requêtes imbriquées en PHP et en ajoutant juste une clé secondaire des tables liés à ma table principale CONTACT.

    Merci encore pour cette analyse et réponse.
    -----------------------------------------------------
    - Etre clair dans sa demande, facilite les réponses.
    - Organiser son travail et sa programmation est indispensable à une rapide évolution.
    - Remercier ceux qui vous ont aider favorise le contact et augmente votre crédibilité.

    Le géant du sud-ouest...

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

Discussions similaires

  1. Réponses: 32
    Dernier message: 07/11/2007, 12h19
  2. Avis sur des livres
    Par Davidbrcz dans le forum C++
    Réponses: 21
    Dernier message: 01/07/2007, 11h35
  3. faire une jointure sur des clés différentes
    Par phpaide dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/09/2006, 10h16
  4. [Oracle 9.2.0.7] Comment updater sur des clés de partition ?
    Par le_nullos_des_nullos dans le forum Oracle
    Réponses: 3
    Dernier message: 05/02/2006, 00h26
  5. Votre avis sur des morceaux de resumes
    Par Asarnil dans le forum C++
    Réponses: 5
    Dernier message: 03/01/2005, 15h22

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