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

4D Discussion :

Index sur plusieurs champs ?


Sujet :

4D

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Index sur plusieurs champs ?
    Bonjour,

    Est-il possible avec 4D de créer des indexes sur plusieurs colonnes ?
    J'aimerais par exemple créer un index de type unique sur deux (en fait n) colonnes qui m'assure qu'une paire de valeur donnée ne puisse être entrée deux fois (sinon ça génère une erreur).

    Merci d'avance pour toute réponse,
    Marc

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Bon, on m'a donné la réponse sur l'autre forum, et la réponse est... niet.
    Marc

  3. #3
    Membre averti
    Homme Profil pro
    Bientôt retraité
    Inscrit en
    Juillet 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Bientôt retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 312
    Points : 385
    Points
    385
    Par défaut
    Je ne serais pas aussi catégorique. C'est possible par programmation, pas très 'élégant' mais faisable.
    MonIndex:=MonChamp1+MonChamp2.
    Il te faudra bien évidement, contrôler si MonIndex est vide ou pas puis, si non vide remplacer l'ancienne valeur par la nouvelle.
    A +

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 27
    Points : 46
    Points
    46
    Par défaut Trigger ?
    Bonjour,

    Si votre problème concerne uniquement l'unicité de votre paire de valeurs, et non l'exploitation de l'index pour des recherches sur plusieurs colonnes, le mécanisme des triggers peut constituer une solution :

    Sur le principe, il vous faudrait ajouter une colonne définie comme unique, qui recevrait une clef calculée en fonction de vos deux (n) colonnes lors de la sauvegarde de l'enregistrement.

    Pour la réalisation, il vous suffirait de mettre le code de calcul dans le trigger de votre table, sur les évenements moteur "sur sauvegarde enregistrement" et "sur sauvegarde nouvel enregistrement". Lors de l'enregistrement d'une paire en doublon avec une existante, la clef "calculée" entrera en conflit avec l'existante et 4D génèrera une erreur de type "clef d'index existe déjà" (que vous pouvez éventuellement intercepter suivant votre besoin).

    L'algo de calcul de la clef devra être réfléchi pour prendre en compte les types de données de vos colonnes (si vous travaillez sur des entiers par exemple, la simple addition des valeurs ne saurait définir une clef unique), et les valeurs possibles des colonnes (si vous travaillez sur des alphas par exemple, la paire ("Menda", "hor") devra générer une clef différente de la paire ("Mend", "ahor") ). Mathématiquement parlant, il s'agirait d'une fonction bijective de plusieurs ensembles (vos n colonnes) vers un seul ensemble (votre colonne "clef"), c'est-à-dire qu'à un seul couple de valeur correspond une seule clef, et inversement.

    Le fait de mettre le code de calcul de la clef dans le trigger vous assure qu'elle est calculée systématiquement partout dans votre base, dès que vous enregistrez un enregistrement.

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

Discussions similaires

  1. Créer un index sur plusieurs champs ou pas ?
    Par dbejean dans le forum Requêtes
    Réponses: 9
    Dernier message: 26/03/2008, 18h02
  2. index sur plusieurs champs
    Par little666 dans le forum Langage SQL
    Réponses: 16
    Dernier message: 04/02/2008, 13h10
  3. Recherche d'un mot avec LIKE sur plusieurs champs
    Par reynhart dans le forum Langage SQL
    Réponses: 16
    Dernier message: 26/11/2004, 17h41
  4. [CR] Groupement dynamique sur plusieurs champs paramètrés
    Par CDRIK dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 07/06/2004, 17h55
  5. recuperer les id sur plusieurs champs
    Par matN59 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/03/2004, 10h23

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