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

Langage SQL Discussion :

Méthode anti doublons - logique de programmation / langage SQL ?


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut Méthode anti doublons - logique de programmation / langage SQL ?
    Bonjour,

    Peut-on effectuer une commande INSERT INTO sur le même modèle que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Employees.Name, Orders.Product
    FROM Employees, Orders
    WHERE Employees.Employee_ID=Orders.Employee_ID
    Autrement dit, INSERT des données dans plusieurs tables en même temps ?


    Je souhaiterais avoir votre avi sur la méthode la plus pertinente pour éviter les doublons lors de l'introduction de données dans la BDD. En théorie, si la vérification est efficace avant chaque insertion, il n'y aura aucun doublon dans la base (et donc pas de nécessité de faire des GROUP BY pour une recherche dans la base).

    Actuellement, je fais :

    - SELECT COUNT(*) des données (sensées être uniques) dans une table
    - SELECT des données
    - boucle for en PHP avec un if(données extraites == donnée à rentrer) alors break; sinon INSERT de la donnée

    Je trouve ça un peu lourd, surtout si on considère le cas d'une table contenant plus de 500 lignes !!!!!

    Merci d'avance pour toutes les propositions que vous allez me faire !!

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Mettre une contrainte d'unicité sur une colonne, c'est pas mal non plus.

    Si vous voulez être plus pointu, vous pouvez définir une collation particulière qui ne tiennent pas compte de la casse ou des accents pour rendre l'unicité plus stricte. Voir cet article à ce sujet : http://sqlpro.developpez.com/cours/s...er/collations/ . Et voir l'implémentation dans votre SGBD.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    Ok pour la contrainte d'unicité de la colonne ! Autrement dit, si je fais une commande INSERT INTO et que ma donnée existe déjà dans la colonne, il ne l'écrira pas et continuera à lire le code comme si de rien n'était !

    Pour effectuer des tests, saurais-tu me dire comment récupérer l'information comme quoi les données n'ont pas été enregistrées.

    Merci pour ton aide !

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    La requête échoue dans ce cas. Vous récupérez un code erreur. A voir avec votre langage de programmation et la couche d'accès aux données.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    La contrainte d'unicité fonctionne vraiment très bien... j'apprécie beaucoup le fait qu'elle ne fasse pas la distinction entre les minuscules et les majuscules.

    Pour mes tables de "transition", je cherche donc à indexer 2 champs pour qu'une paire similaire ne puisse être inséré. J'ai trouvé un POST Developpez.com sur le sujet mais je ne comprend pas vraiment comment il met en place sont index sur 2 champs. (Pour info, je travaille sous Access...)

    Je tiens à préciser que mes champs en question sont des clés primaires... est-ce donc possible?

    Merci

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Une clé primaire est forcément unique. Une clé primaire (au même titre qu'un index) peut porter sur plusieurs colonnes à la fois, cas typique des tables d'association pour représenter les cardinalités n-m.

    Mais vous vous éloignez du sujet initial. Pour voir comment mettre en place une clé primaire composée sous Access, vous pouvez demander dans le forum approprié.

    Bonne continuation

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    239
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 239
    Points : 84
    Points
    84
    Par défaut
    Ok ! Merci pous tous ces bons conseils !


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

Discussions similaires

  1. Utilisation de REPLACE() dans un programme PL/SQL
    Par Djene dans le forum PL/SQL
    Réponses: 8
    Dernier message: 10/12/2009, 11h30
  2. [Event][JTabbedPane] Logique de programmation
    Par mouloude dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 07/11/2004, 16h42
  3. Langage SQL propore à chaque SGBD
    Par Pascal Jankowski dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/03/2004, 09h16
  4. Cours, tutoriels, logiciels, F.A.Q,... pour le langage SQL
    Par Marc Lussac dans le forum Langage SQL
    Réponses: 0
    Dernier message: 04/04/2002, 10h21

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