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 :

Création d'index sur 3 colonnes (unique)


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2008
    Messages : 59
    Par défaut Création d'index sur 3 colonnes (unique)
    Bonsoir!

    Une petite question rapide, j'ai une table de la forme suivante:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    id_table, id_objet, valeur1, valeur2
     
    id_table: INT AUTOINCREMENT...
    id_objet: INT (FOREIGN KEY sur autre table)
    valeur1: INT
    valeur2: INT
    Je n'arrive pas à configurer mes clés pour que valeur1 et valeur2 soient uniques pour un id_objet donné, et que, toujours pour un id_objet donnée, valeur1 soit différents de valeur2...


    J'ai essayer en créant une clé primaire/une clé unique, sur id_objet, valeur1, valeur2 en vain... j'arrive à avoir soit ma première condition de valide mais pas la seconde...

    Des idées?

    Par avance merci!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    J'ai essayer en créant une clé primaire/une clé unique, sur id_objet, valeur1, valeur2 en vain...
    Peut-on connaître la requête qui a été utilisée pour créer cette clé ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2008
    Messages : 59
    Par défaut
    Bonjour! Voici le code de création de ma table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE `atm` (
    	`id_atm` INT(10) NOT NULL AUTO_INCREMENT,
    	`id_brasseur_atm` INT(10) NOT NULL DEFAULT '0',
    	`port_working` INT(10) NOT NULL DEFAULT '0',
    	`port_protected` INT(10) NOT NULL DEFAULT '0',
    	`stm_working` INT(10) NULL DEFAULT '0',
    	`stm_protected` INT(10) NULL DEFAULT '0',
    	`aps_group` INT(10) NULL DEFAULT '0',
    	PRIMARY KEY (`id_atm`, `port_working`, `port_protected`),
    	UNIQUE INDEX `ports_protected` (`port_protected`, `id_brasseur_atm`),
    	UNIQUE INDEX `ports_working` (`port_working`, `id_brasseur_atm`),
    	INDEX `FK_atm_brasseurs_atm` (`id_brasseur_atm`),

  4. #4
    Membre expérimenté

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Par défaut
    Bonjour,
    Je dis peut être des bêtises mais cela me semble normal que ça ne fonctionne pas.
    Dans votre cas, j'aurai tendance à dire qu'il faut trois index uniques pour contraindre l'unicité des données comme vous le souhaitez. Cependant, si vous regardez votre code vous verrez que la clé primaire utilise la colonne "id_atm" alors que les deux index uniques suivants utilisent la colonne "id_brasseur_atm". Il faudrait mieux connaitre vos données pour le dire mais ne serait il pas plus judicieux d'avoir une clé primaire sur une colonne unique "id_atm" et d'avoir un index unique sur l'ensemble des trois colonnes avec "id_brasseur_atm" ...
    Bon courage

  5. #5
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    Salut,

    Une clé primaire est par définition un index unique automatique donc les 3 colonnes ne peuvent former que des triplets uniques

    Les 2 autres index uniques rajoutent donc des contraintes donc le moteur devrait rejeter certaines insertions en te disant que ça viole telle ou telle obligation d'unicité (comme quand tu insères plusieurs id identique sur une primary key classique).

    Le problème est que tu donnes pas d'exemples de soit disant non respect de tes contraintes ni de ce que ça fait en réaction donc dur de t'aider...

Discussions similaires

  1. Création d'index sur une colonne TEXT
    Par AyManoVic dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/08/2010, 00h12
  2. Création d'index sur tables avec 400000 rows
    Par Poisson59 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/07/2007, 13h53
  3. Index sur plusieurs colonnes
    Par JojoLaFripouille dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 20/07/2006, 15h32
  4. Index sur une colonne Date
    Par sjaeger dans le forum Oracle
    Réponses: 11
    Dernier message: 10/11/2005, 14h55
  5. Création d'index sur un TTable
    Par bencot dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/03/2005, 13h23

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