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

Requêtes MySQL Discussion :

comment ajouter une contrainte


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 47
    Points : 35
    Points
    35
    Par défaut comment ajouter une contrainte
    Bonjour,
    je suis un débutant en sql je suis bloqué de trouver une solution
    s'il vous plait vous pouvez m'aider à résoudre cette petite question ?
    Merci
    -------------------------------------------------------------------
    Tables:
    employe(id,nom,age,salaire)
    departement(no,dnom,budget,#directeur)
    travaille(#id,#no,heure)
    ------------------------------------------------------------------
    clé primaire souligné
    clé étrangère précédé par #
    ------------------------------------------------------------------
    question:
    ajouter une contrainte avec ALTER TABLE
    contrainte:tous les directeurs de département ont un age >35 et un salaire>200

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Bonjour,

    ce type de contrainte est appelé contrainte CHECK qui n'est pas gérée par MySQL.
    une réponse vous a permis d'avancer ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    oui je sais, je veux comment écrire cette contrainte en sql

  4. #4
    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 : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    1-> L'attribut age n'est pas bon dans le modèle puisque l'age change (à chaque année). Il faut plutôt prendre la date de naissance qui te permet d'avoir l'age à tout moment.
    2-> Ton cas n'est pas gérable avec "ALTER TABLE". Il faut plutôt un trigger ou une vue avec "WITH CHECK OPTION". voir ici
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    j'ai cette question dans un petit exercice qui m'a demandé de faire avec alter table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE employe 
    ADD CONSTRAINT ch1
    CHECK (age>35 AND salaire>200)
    le problème c'est comment attribuer cette contrainte seulement aux directeurs(directeur clé étrangère) ??

  6. #6
    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 : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    La contrainte CHECK (puisque tu insistes!!!) doit être placé au niveau de la table departement. Et, puisque la contrainte fait appel à une autre table, il faut créer une fonction (qui vérifie la contrainte) et l'utiliser dans le CHECK.
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par alassanediakite Voir le message
    Salut
    La contrainte CHECK (puisque tu insistes!!!) doit être placé au niveau de la table departement. Et, puisque la contrainte fait appel à une autre table, il faut créer une fonction (qui vérifie la contrainte) et l'utiliser dans le CHECK.
    @+
    comment on peut créer une fonction qui vérifie la contrainte (je ne connais pas)
    Merci

  8. #8
    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 : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par mohamed11000 Voir le message
    comment on peut créer une fonction qui vérifie la contrainte (je ne connais pas)
    Merci
    On peux t'aider mais on ne doit pas faire le travail à ta place!
    Cherche des tuto sur le SQL procédural de MySQL, commence le travail et là on peut t'aider.
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    j'ai réfléchi au problème j'ai essayé comme ça
    mais il manque quelque chose c'est comment attribuer cette contrainte seulement aux directeurs(directeur clé étrangère) ??
    en plus ce n'est pas un devoir, j'ai trouvé cette exercice dans un livre et je n'ai pas pu le résoudre car je suis un débutant en sql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE employe 
    ADD CONSTRAINT ch1
    CHECK (age>35 AND salaire>200)

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    La contrainte ne devra pas être mise sur la table employé mais sur la table département,

    je pense qu'il faut partir sur ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE departement 
    ADD CONSTRAINT ch1
    CHECK ((SELECT age FROM employe WHERE id = no) > 35 AND (SELECT salaire FROM employe WHERE id = no) > 200)
    Le problème c'est que je ne sais pas si le no sera égale à l'id de la requête, ce qui par exemple dans un trigger serait traduit par : NEW.noÀ toi de tester et de vérifier.
    une réponse vous a permis d'avancer ?

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    Mais le problème , une contrainte CHECK ne peut mettre en jeu que les colonnes de la ligne courante, des constantes éventuellement sous forme de listes, et des fonctions standard déterministes.(Oracle)

    dans ce cas on peut utiliser les vues ?
    s'il vous plait j'ai une autre contrainte est ce qu'elle juste ou non?
    MERCI
    contrainte 2 :le budget de chaque département doit être supérieure a 2 fois le salaire moyen des employés qui ont travaille dans ce département
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE departement 
    ADD CONSTRAINT ch2
    CHECK (budget > 2 *(SELECT AVG(salaire) FROM employe  WHERE id in(SELECT id FROM travaille WHERE departement.no=travaille.no)) )

  12. #12
    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 : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par mohamed11000 Voir le message
    Mais le problème , une contrainte CHECK ne peut mettre en jeu que les colonnes de la ligne courante, des constantes éventuellement sous forme de listes, et des fonctions standard déterministes.
    ...et ne peut avoir de sous requête SELECT.
    Je te suggère d'installer le SGBD support de ton livre enfin de tester tes codes. En cas d'erreur tu peux souvent t'en sortir en lisant les messages d'erreur.
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  13. #13
    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 : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par mohamed11000 Voir le message
    je sais avec oracle on ne peut pas mais avec sql on peut ?
    Je ne comprends pas!
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    oracle n’exécute pas ce type de contrainte mais est ce qu'on peut la faire avec sql ?

  15. #15
    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 : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    Lis le deuxième paragraphe encadré de cette page.
    La bonne formulation serait: "SQL de ORACLE n'accepte pas ce type de contrainte mais est ce que le SQL STANDARD l'accepte?
    La réponse: je pense que non.
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

Discussions similaires

  1. Comment ajouter une contrainte à une colonne
    Par DEV-10 dans le forum Administration
    Réponses: 4
    Dernier message: 21/09/2010, 16h38
  2. Comment ajouter une icone à une JInternalFrame
    Par wassimb dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 12/07/2006, 15h13
  3. Comment ajouter une photo à mon profil ?
    Par ghita269 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 5
    Dernier message: 18/11/2005, 20h36
  4. Réponses: 3
    Dernier message: 07/10/2005, 12h07
  5. [ADO.Net][VB.NET] Comment ajouter une colonne Integer à un DataTable ?
    Par graphicsxp dans le forum Accès aux données
    Réponses: 2
    Dernier message: 20/04/2005, 12h08

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