Votre question

[PHP/MySQL]Eviter les Doublons[resolu]

Tags :
  • Éxécution automatique
  • Programmation
Dernière réponse : dans Programmation
30 Août 2007 00:39:52

Bonjour à tous,

Je vous expose mon (douloureux) problème:
J'ai 3 tables:
  • Une tables 'objets', dont les champs sont id, foo.
  • Une table 'users' dont les champs sont id, bar
  • Une table de lien l_objet_user dont les champs sont id_user,id_objet (et éventuellement un 3°champ id)

    Je souhaite éviter les doublons dans la table l_objet_user.

    Apres réflexion, je vois deux facons de procéder:

    1)Verifier et supprimer les doublons apres l'insertion, soit automatiquement,soit ponctuellement (au travers d'un script PHP qu'on appelle manuellement par exemple).
    2)Prévenir la formation des doublons
    2a)En PHP, on récupere les éléments de la base l_objet_user, et on vérifie que l'élément quon veut insérer ne s'y trouve pas déja.
    2b)Avec MySQL, en utilisant un systeme de cle primaire,cle unique, ... Les doublons sont detecté par le SGDB a l'insertion, on ne les insere donc pas.

    Mais voila les problemes que je rencontre:
    1)C'est pas super. L'execution automatique du script de 'purge' doit ralentir l'execution globale. D'autre part, l'execution ponctuelle laisse les doublons trop longtemps dans la base, et ca peut poser des problemes.

    2a)Ca fait une requete en plus, a laquelle on ajoute le traitement en PHP. Si j'étais tout seul, c'est ce que je ferais,car c'est dans mes cordes en matiere de programmation, et ca me parait mieux que 1).
    2b)A mon avis,c'est l'idéal. Le probleme, c'est que je ne connais/comprends pas grand chose aux clés primaires/composées/uniques/étrangeres. De plus, je ne sais meme pas si c'est effectivement possible avec mySQL.

    Voila, en espérant que quelqu'un puisse me dépetrer un peu.

    Merci :) .
  • Autres pages sur : php mysql eviter doublons resolu

    30 Août 2007 04:01:31

    Solution 2b, bien sur. Le reste, c'est des bricolages. Des méthodes comme Merise peuvent t'aider à concevoir ta base de données correctement dès le départ , le problème c'est qu'il faut les apprendre... Et si y'a juste ça, c'est pas vraiement nécessaire.
    Certains logiciels, une fois le modèle créé, permettent de générer directement le code pour créer les tables et tout.

    Donc ce que tu peux faire, c'est mettre en clé primaire id pour objets, id pour users, et ou bien id_user et id_objet comme clé primaire (si y'a qu'un lien possible entre un objet et un utilisateur), sinon utilise ton champ id, ou autre chose...
    (Je n'ai pas testé et je ne garantis rien! :)  )
    a c 232 L Programmation
    30 Août 2007 12:53:13

    Ce que je ferai, c'est de mettre un UNIQUE sur les deux colonnes.
    UNIQUE(id_user, id_object);
    Et donc, il ne peut y avoir un même couple qu'une seule fois.

    30 Août 2007 14:45:45

    Merci à vous deux,c'est exactement le type d'information que je recherchais.
    J'ai donc utilisé une clé unique sur lesdeux colonnes:
    1. ALTER TABLE `l_objet_user` ADD UNIQUE ( `id_user` , `id_objet` )

    Et ca produit l'efet désiré.

    Sinon, Rakipu,si tu as des liens instructifs sur Merise et tout ca, je suis preneur: ca ne peut pas faire de mal d'apprendre des trucs utiles.

    Bonne journée :) 
    Tom's guide dans le monde
    • Allemagne
    • Italie
    • Irlande
    • Royaume Uni
    • Etats Unis
    Suivre Tom's Guide
    Inscrivez-vous à la Newsletter
    • ajouter à twitter
    • ajouter à facebook
    • ajouter un flux RSS