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 :

Containte de type XOR


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Feres_agent1116
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Février 2013
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Back-End
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 121
    Par défaut Containte de type XOR
    bonjour tout le monde

    pendant la préparation de mon modèle relationnel ,je suis bloquer au niveau de la traduction d'une contrainte de type {XOR}.
    voici l'exemple :
    j'ai un dossier d’équivalence qui est créer par un demandeur(un user)
    et il est aussi valider par un valideur (un autre user) mais il existe une contrainte d'exclusion le demandeur ne peut pas être le valideur pour le même dossier .
    comment je peut traduire ça au niveau de ma table
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Dossier_Equi(num_dosier,#demandeur,#valideur,......)

    Quelqu'un aurait-il des proposition ???
    Merci d'avance
    Images attachées Images attachées  

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Normalement, ce genre de contrainte dans le modèle se traduit par une contrainte CHECK en SQL : CHECK valideur <> demandeurMais comme le mauvais MySQL ne connaît toujours pas les contraintes CHECK alors qu'il en accepte la syntaxe, il faut passer par un trigger.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre confirmé Avatar de Feres_agent1116
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Février 2013
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Back-End
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 121
    Par défaut
    merci bien pour votre aide ...J'en suis trés reconnaissant
    donc Mysql ne connait pas les contraintes de type check et je dois faire le triger

  4. #4
    Membre confirmé Avatar de Feres_agent1116
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Février 2013
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Back-End
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 121
    Par défaut
    Jai essaye de faire ca mais il y un problem:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TRIGGER check_my_constraint BEFORE UPDATE ON Dosier_Equi
         FOR EACH ROW 
         BEGIN
         DECLARE msg varchar(255);
         IF (NEW.demandeur<>NEW.Valideur)
         THEN
            SET msg = 'Constraint my_constraint violated: demandeur must not be valideur ';
            SIGNAL sqlstate '45000' SET message_text = msg;
     
         END IF; 
         END
    Images attachées Images attachées  

  5. #5
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut
    Citation Envoyé par CinePhil Voir le message
    Normalement, ce genre de contrainte dans le modèle se traduit par une contrainte CHECK en SQL : CHECK valideur <> demandeurMais comme le mauvais MySQL ne connaît toujours pas les contraintes CHECK alors qu'il en accepte la syntaxe, il faut passer par un trigger.
    N'est-il pas possible de simuler le CHECK par une vue ayant l'option 'WITH CHECK OPTION'?
    @+

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Je ne pense pas non parce que, si j'en crois la doc, cette clause ne s'applique qu'aux vues "updatable" - qui autorisent la mise à jour des tables - or celles-ci sont rares.

    Le rôle d'une contrainte CHECk est d'abord de vérifier que la valeur que l'on tente d'insérer est acceptable. La contrainte WITH CHECK OPTION de MySQL ne fonctionne, si j'ai bien compris, que sur les mises à jour, donc quelque part éjà un peu trop tard !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut
    Je viens de vérifier (version 5.6), l'insertion et la mise à jour sont bien rejetées si la condition du WHERE n'est pas respectée sinon les actions (insertion et mise à jour) passent.
    La table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    create table essaick
    (id int auto_increment primary key,
    c1 int, c2 int)
    la vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    create view vessaick
    as select id ,c1 , c2 from essaick
    where c1<>c2 with check option
    l'insertion qui passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into vessaick (c1,c2) values (1,2)
    l'insertion bloquée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into vessaick (c1,c2) values (3,3);
    err: 12:45:55	insert into vessaick (c1,c2) values (3,3)	Error Code: 1369. CHECK OPTION failed 'world.vessaick'	0.000 sec
    la mise à jour qui passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update vessaick set c1=1, c2=6 where id=1;
    celle qui est bloquée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update vessaick set c1=1, c2=1 where id=1;
    @+

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    C'est tordu comme manière de faire chez MySQL mais si ça fonctionne, c'est une solution pour Feres_agent1116.

    S'ils savent faire ça, pourquoi n'ont-ils pas encore implémenté la contrainte CHECk depuis le temps ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. programmation corba: le type "sequence"
    Par Kali dans le forum CORBA
    Réponses: 4
    Dernier message: 28/08/2005, 16h09
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. Réponses: 2
    Dernier message: 05/06/2002, 12h29
  4. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36

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