1. Les différents types de doublons▲
Nous devons distinguer les doublons absolus, les doublons relatifs et les quasi-doublons.
Les doublons absolus sont des tuples strictement identiques. Toutes les colonnes des lignes doublonnées doivent contenir les mêmes données. Compte tenu de la possibilité de présence d'une clef dans la plupart des tables, ces types de doublons ne se trouvent que dans les tables dépourvues de clef.
Exemple de doublons absolu :
NUM NOM PRENOM
----------- ---------------- --------
33 DUPONT marc
33 DUPONT marc
33 DUPONT marc
Les doublons relatifs sont des tuples identiques sauf pour les valeurs composant la clef. À l'exception des colonnes formant la clef, les autres colonnes des lignes doublonnées doivent contenir les mêmes données. C'est le type de doublons le plus courant puisque la majorité des tables sont pourvues de clefs.
Exemple de doublons relatifs :
NUM NOM PRENOM
----------- ---------------- --------
47 DUPOND alain
59 DUPOND alain
Les quasi-doublons sont constitués par des tuples dont le contenu sémantique et logique est le même, avec des petites différences comme une différentiation majuscules/minuscules ou des fautes de frappe dues à des erreurs de saisie.
Exemple de quasi-doublons :
NUM NOM PRENOM
----------- ---------------- --------
65 Dupond Frédéric
78 DUPOND frédéric
81 DUPOND fréd
99 DUPON éric
Nous allons maintenant voir comment détecter puis éradiquer chacun de ces types de doublons. Mais avant cela, voici notre jeu d'essais :
Sélectionnez
|
Sélectionnez
|
2. Doublons absolus▲
Le principe de détection des doublons absolu est simple. Il s'agit de compter les lignes avec un groupage de toutes les colonnes et d'introduire un filtre sur les résultats du comptage en détectant les valeurs supérieures à 1 :
Sélectionnez
|
Sélectionnez
|
Si ce type de doublon est d'une simplicité enfantine à détecter, il n'en va pas de même pour le supprimer… En effet, il convient de conserver au moins une ligne et de supprimer le surplus. Or comme toute l'information est semblable, toutes les lignes seront supprimées, à moins, et ce sera notre solution, d'introduire un discriminant…
2-1. Suppression par ajout d'une colonne discriminante▲
La technique consiste à rajouter une colonne, alimenter cette colonne avec des valeurs toutes différentes, des valeurs uniques pouvant servir de clef. Pour alimenter cette colonne, on peut utiliser un curseur pour numéroter ou si votre SGBDR en dispose, en utilisant une fonction de ranking ou de génération d'identifiant.
2-1-1. Utilisation d'un curseur▲
Voici un exemple pour SQL Server :
Sélectionnez
|
|
Sélectionnez
|
Sélectionnez
|
Dès lors, pour supprimer les doublons « 33 DUPONT marc » il suffit d'une simple requête basique :
Sélectionnez
|
Sélectionnez
|
Bien entendu on peut maintenant supprimer la colonne COLID introduite pour nos besoins de suppression…
2-1-2. Utilisation d'une fonction de ranking▲
Une fonction de ranking, permet de donner un numéro de rang à des lignes d'une table. Certains SGBDR permettent l'utilisation d'une telle fonction comme rowid. Le principe est alors le suivant :
- ajouter la nouvelle colonne ;
- alimenter cette colonne avec la fonction de ranking ;
- supprimer les données par requête ;
- supprimer la colonne de ranking.
Voici un exemple qui utilise une fonction générant un unique identifier ou GUID, (SQL Server) :
Sélectionnez
|
Sélectionnez
|
Sélectionnez
|
Sélectionnez
|
Sélectionnez
|
Sélectionnez
|
Sélectionnez
|
Sélectionnez
|
Cette élégante solution est préférable dans le cas ou votre SGBDR est doté d'une telle fonctionnalité.
2-1-3. Suppression à l'aide d'une table temporaire▲
Une autre formule pour éliminer des doublons, consiste à utiliser une table temporaire de même structure que l'on alimente avec les doublons rendus uniques par le mot clef DISTINCT. On élimine alors tous les doublons de la table d'origine, puis on réinjecte le contenu de la table temporaire dans la table d'origine.
Voici un exemple en SQL Server :
Sélectionnez
|
|
Sélectionnez
|
Sélectionnez
|
Sélectionnez
|
Sélectionnez
|
Sélectionnez
|
2-1-4. Suppression sans modification du schéma▲
Il arrive que les utilisateurs n'aient pas les droits nécessaires sur la base pour modifier le schéma et en particulier ajouter ou supprimer une colonne à une table ou encore créer et détruire une table, même temporaire.
Une solution utile dans ce cas consiste à ajouter de l'information dans une des colonnes déjà constituées de la table.
Le choix de la colonne dans laquelle nous allons rajouter de l'information doit être dicté par les éléments suivants :
- colonne peu sollicitée en recherche et pas liée à une autre table (clef étrangère) ;
- colonne contenant encore assez d'espace libre pour ajouter au moins un chiffre.
Dans notre exemple, c'est à l'évidence la colonne NOM qui comporte le maximum d'espace libre. Mais il y a fort à parier que c'est aussi la plus sollicitée en recherche. En revanche, la colonne PRENOM est probablement la moins sollicitée. La taille de la colonne est de 16 caractères et elle est remplie au maximum à 8. Il nous reste donc 8 caractères, ce qui permet en théorie d'aller de 0 à 99 999 999 soit jusqu'à la numérotation de 100 millions de lignes… Largement suffisant évidemment dans notre cas.
Mais pour faciliter le « retour en arrière » et donc nettoyer plus facilement cette colonne, nous allons utiliser un caractère de marquage… Voyons comment faire, à l'aide d'un exemple pour SQL Server :
Sélectionnez
|
Sélectionnez
|
Sélectionnez
|
Sélectionnez
|
Sélectionnez
|
Sélectionnez
|
On voit immédiatement l'intérêt d'avoir ajouté le marqueur « # » afin de nettoyer au plus vite la colonne polluée par notre discriminant…
CONSEIL : avant de choisir votre discriminant, assurez-vous qu'il n'est pas présent dans la colonne en cherchant par requête les colonnes contenant un tel caractère. Pour cela, utilisez le LIKE de SQL ou mieux, une fonction de recherche de caractère.
3. Doublons relatifs▲
Le traitement et la détection des doublons relatifs sont bien plus simples puisque le discriminant, en général la clef, est déjà présent dans la table.
Voici un exemple de détection de tels doublons :
Sélectionnez
|
Sélectionnez
|
Et voici comment les éradiquer :
Sélectionnez
|
Sélectionnez
|
4. Quasi-doublons▲
Le cas des quasi-doublons est bien plus délicat. En effet il faut s'entendre sur la valeur de l'information. Néanmoins une technique classique pour en débusquer la plupart est de combiner une recherche partielle et le nivellement de la casse.
Exemple :
Sélectionnez
|
Sélectionnez
|
Bien entendu leur éradication répond à la même problématique et appelle les mêmes réponses que celles vues précédemment.