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

Administration MySQL Discussion :

Est-il possible de contrôler la saisie dans champ...


Sujet :

Administration MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Est-il possible de contrôler la saisie dans champ...
    Est-il possible de contrôler la saisie dans un champ avec les données d'un autre champ ?

    Je m'explique. Existe-t-il une fonction qui permettrait de n'utiliser que les valeurs enregistrées dans un champ PERSONNE_MORALE.nom par exemple pour alimenter certains autres champs de la base comme PERSONNE_PHYSIQUE.organisme ou ADRESSE.organisme ?

    Je ne sais pas si je suis claire ?

    Merci d'avance.

  2. #2
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Si, ça s'appelle les clés étrangères, ou foreign key en anglais.
    Fais une recherche là dessus dans une doc SQL, et tu auras toutes les explications.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut clé étrangère / contrôle de saisie
    Merci pour ta réponse.
    D'après ce que je comprends en lisant la doc, la clé étrangère ne permet pas de contrôler la saisie d'une chaine de caractère mais permet de faire un lien entre deux tables avec un identifiant unique (info stockée à un seul endroit). Dans ma question, il s'agissait plutôt d'info stockée à deux endroits différents...
    Par ailleurs, il semble qu'il y ait pas mal de contraintes liées aux clés étrangères. Quelqu'un parmi vous les utilisent-ils souvent et peut donner son opinion.
    Si je reprends l'exemple du manuel MySQL avec les animaux, est-il préférable de stocker le nom de l'animal dans plusieurs tables (comme dans l'exemple) ou d'utiliser des clés étrangères ?
    Enfin, dans le cas de clés étrangères, il me semble difficile de gérer l'ajout d'infos dans le sens où il nécessaire de connaître l'identifiant de référence. Quelles sont vos expériences sur la question ?

  4. #4
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Si les valeurs d'un champ sont obligatoirement celles d'un autre, et que tu stockes ces deux champs à deux endroits différents, tu stocke 2 fois la même information alors qu'une suffirait. Quel est l'intérêt ?

    Je ne comprends pas non plus ton dernier problème. Tu veux imposer que certains champs soient alimentés par un champ de référence, donc forcément tu connais ce champ de référence, non ?

    J'avoue ne pas trop comprendre tes questions. Aurais-tu un exemple simple et précis d'utilisation qui mette en valeur tes problèmes ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bon, je vais essayer d'être claire...

    Prenons l'exemple suivant.
    - Une table PERSONNE_MORALE qui stocke les infos générales, non géographiques, relatives à toute forme d'organisation (société, administration, association, famille etc...) dans laquelle on trouve bien sûr un champ PERSONNE_MORALE.nom.
    - Une table LOCALISATION qui contient les adresses (il peut y en avoir plusieurs par organisme ou par personne physique).
    - Une table PERSONNE_PHYSIQUE qui contient des noms d'individus et leurs infos personnelles et qui peut avoir un lien avec l'un ET/OU l'autre des deux tables précédentes.

    J'ai donc envisagé deux solutions :
    1) Soit la création d'un champ LOCALISATION.personne_morale et PERSONNE_PHYSIQUE.personne_morale qui vont contenir l'info PERSONNE_MORALE.nom mais qui pose peut-être un problème de redondance et, surtout, un problème de rigueur de saisie (d'où ma question : comment contrôler la saisie pour que nom soit toujours orthographié pareil).
    2) Soit la solution de la clé secondaire avec la création d'un champ LOCALISATION.id_personne_morale et d'un champ PERSONNE_PHYSIQUE.id_personne_morale qui vont contenir PERSONNE_MORALE.id. Mais j'ai cru comprendre que c'était assez contraignant en lisant la doc. Et de plus, je trouve a priori plus compliqué d'avoir à saisir un identifiant (qu'il faut rechercher au préalable) qu'un nom. Mais comme je ne suis pas experte, il se peut que je ne connaisse pas une fonctionnalité qui permet de faire ça simplement.

    Donc, que peut-on conseiller ?

  6. #6
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Les deux cas sont envidageables en utilisant les clés étrangères. Tout dépend de la clé de PERSONNE_MORALE. Si cette clé est le nom, autrement dit si le nom d'une personne morale est unique dans la table PERSONNE_MORALE, alors tu peux faire des champs LOCALISATION.nom_personne_morale et PERSONNE_PHYSIQUE.nom_personne_morale et forcer les valeurs de ces champs à appartenir à PERSONNE_MORALE.nom en utilisant une clé étrangère.

    Dans le cas contraire, si deux personnes morales peuvent avoir le même nom, alors tu dois utiliser une clé de PERSONNE_MORALE qui permettent d'identifier toute personne morale sans ambigüité, comme par exemple un id. Alors dans ce cas, LOCALISATION.id_personne_morale et PERSONNE_PHYSIQUE.id_personne_morale référenceront PERSONNE_MORALE.id.


    En résumé, dans tous les cas, LOCALISATION et PERSONNE_PHYSIQUE doivent contenir un ou plusieurs champs de PERSONNE_MORALE permettant d'identifier sans ambigüité une personne morale. En utilisant une clé étrangère, tu imposes à ces champs de référencer ceux de PERSONNE_MORALE, et en plus l'information n'est stockée qu'une fois.


    Si tu utilises un id entier comme clé de PERSONNE_MORALE, tu peux résoudre le problème de la saisie pas très pratique de la manièe suivante : L'utilisateur saisi un nom, et avec une requête tu détermines dans un premier temps quelle(s) personne(s) morale(s) correspondent à ce nom. L'utilisateur choisi alors celui qu'il veut, et toi tu insères l'id correspondant dans LOCALISATION ou PERSONNE_PHYSIQUE.

    Ai-je été compréhensible ?

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci, c'est très compréhensible ! ... Et en plus, j'ai compris à quel niveau je raisonnais de travers.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/10/2009, 23h31
  2. Réponses: 0
    Dernier message: 16/11/2007, 11h04
  3. [MySQL] Est-ce possible de retourner une matrice dans une fonction PHP?
    Par zouzino dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 12/11/2007, 16h53
  4. Réponses: 11
    Dernier message: 06/11/2006, 22h51
  5. Contrôler la saisie dans un formulaire
    Par beegees dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/03/2006, 17h41

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