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

SQL Procédural MySQL Discussion :

ensemble de clé étrangères uniques table intermédiaire


Sujet :

SQL Procédural MySQL

  1. #1
    Membre du Club
    Homme Profil pro
    etuidiant
    Inscrit en
    Octobre 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : etuidiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 64
    Points : 50
    Points
    50
    Par défaut ensemble de clé étrangères uniques table intermédiaire
    Salut à tous, je suis devant une certaine contrainte qui doit paraitre facile pour certain mais étant débutant je bloque :p

    J'ai comme schéma relationnel :



    La relation va donc devenir une table intermédiaire et j'aurais comme champs :

    ID (primary)
    userAsker (clé etrangère)
    userAsked (clé etrangère)
    ((( accept (int) on s en fou)))

    Ce que j'aimerais c'est qu'il n'y ait pas 2 fois une entité avec les meme clé etrangère comme ca :

    ID : 1
    userAsker :1
    userAsked : 2


    ID : 2
    userAsker :1
    userAsked : 2

    Sinon un utilisateur pourrait faire pleins de demandes ... Je sais comment faire un Index unique dans phpmyadmin mais je sais pas comment faire un groupe d'index unique... Est ce que quelqu'un saurait m'aider

  2. #2
    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
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    c'est la même chose mais tu mets les noms des 2 colonnes séparés par une virgule

    mais là ça ne marchera pas

    exemple: (2,5) et (5,2) représente la même amitié mais sont des tuple différents pour l'index sur tes 2 colonnes

    un trigger tu pourras en construire un dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    drop trigger if exists amis;
    delimiter $$
    create trigger before insert on asktobefriends 
    for each row
    BEGIN
    	declare c,d bool;
    	select count(id)>0 into c from asktobefriends where user=new.user and user1=new.user1;
    	select count(id)>0 into d from asktobefriends where user=new.user1 and user1=new.user;
    	if c or d then
    		signal sqlstate '45000';
    	end if;
    END$$
    delimiter ;
    une autre solution simple est de faire une procédure stockée qui teste la présence des 2 combinaisons et n’insère que si aucune n'est présente...

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/08/2006, 10h25
  2. Index ou table intermédiaire ?
    Par n00bi dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 02/06/2006, 11h07
  3. [D-7][PostGres]Récuperer l'ensemble des colonnes d'une table
    Par Escandil dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/10/2005, 09h17
  4. Parcourir l'ensemble des enregistrements d'une table
    Par Aurèl90 dans le forum Access
    Réponses: 17
    Dernier message: 22/09/2005, 14h51
  5. Réponses: 13
    Dernier message: 14/09/2005, 16h21

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