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 :

Deux champs uniques


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Octobre 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1
    Par défaut Deux champs uniques
    Bonjour,
    Je débute avec Mysql je sais à peu près m'en servir mais là je voudrais faire les choses bien. J'ai une table comme cela:

    ID_utilisateur | ID_propriete | Valeur

    Voilà, cette table peut éventuellement contenir de nombreuses entrées et je cherche le moyen de rendre un couple ID_utilisateur - ID_propriete unique, que Mysql me renvoie une erreur si j'essaye de rentrer une entrée avec un couple déjà existant. J'aimerais par la même occasion rendre performant (rapide) la recherche par couple. Y a-t-il quelque chose à faire ? J'ai entendu parler d'index mais je ne sais pas à quoi ça sert.

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    hum j'ai entendu parlé de la notion de tutoriel mais j'ai jamais osé lire, on sait jamais.

    ce que tu dois faire c'est déclarer une clé unique sur la concaténation des deux colonnes (id1+id2). Mysql ne parle pas de clé, il parle d'index unique, pour qu'on fasse bien le rapprochement entre l'organisation des données et la logique.

    Pour que ce soit performant en général il faut:
    • enlever les redondances le plus possible (pour commencer il ne faut pas avoir de redondance)
    • utiliser des clés artificielles
    • mettre des contraintes d'unicité chaque fois que c'est possible
    • ajouter des indexes non unique sur les clés étrangères (d'ailleurs avec innodb, pour déclarer une clée étrangère il faut mettre un index dessus avant)
    • enfin une fois que l'appli est faite, consulter le log des requetes lentes de mysql et éventuellement ajouter des indexes pour les requetes qui sont devenues lentes.

  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Salut.

    Tu peut exécuter cette requête pour faire du couple ID_utilisateur-ID_propriete une clef primaire (il me semble que MySQL ne permet pas de dupliquer une clef primaire) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE nom_table ADD PRIMARY KEY (ID_utilisateur, ID_propriete);
    Sachant qu'il est aussi important que ID_utilisateur et ID_propriete soient respectivement des clefs étrangères vers les tables utilisateur et propriete (en admettant qu'elles se nomment bien comme cela) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE nom_table ADD FOREIGN KEY (ID_utilisateur) REFERENCES utilisateur(ID_utilisateur);
     
    ALTER TABLE nom_table ADD FOREIGN KEY (ID_propriete) REFERENCES propriete(ID_propriete);
    Même si MySQL avec des données en MyISAM ne tient pas compte des contraintes d'intégrités référentielles, c'est quand même une bonne habitude à prendre AMHA ...

    Cordialement,
    Idriss

Discussions similaires

  1. inverser deux valeur sur un champ UNIQUE
    Par gotcha5832 dans le forum Requêtes
    Réponses: 3
    Dernier message: 23/05/2011, 04h23
  2. Créer un champ unique sous Entreprise Manager
    Par Kokito dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/11/2004, 09h54
  3. contrainte sur deux champs d'une table
    Par bdkiller dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 17/09/2004, 18h26
  4. concatener deux champs ?
    Par Nadaa dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 03/08/2004, 11h57
  5. deux champs ont le même nom
    Par mamouna dans le forum ASP
    Réponses: 5
    Dernier message: 01/07/2004, 13h55

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