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

Langage SQL Discussion :

Contrainte Check en SQL


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 218
    Points : 72
    Points
    72
    Par défaut Contrainte Check en SQL
    Bonjour,

    Je veux creer la table Sejour avec la condition suivante:

    ** Pour une date de début donnée, le nombre total de places réservées dans une station doit être inférieur à la capacité de la station.

    • STATION (nomStation, capacité, lieu, région, tarif)
    • SEJOUR (id, station, début , nbPlaces)

    Comment ecrire la contrainte ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT stat_total_ck CHECK (nbPlaces < capacite) ???

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 735
    Points
    52 735
    Billets dans le blog
    5
    Par défaut
    A supposer que votre SGBDR soit capable de supporter des contraintes de table avec des appels externes (ce qui est rarement le cas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ALTER TABLE SEJOUR 
    ADD CONSTRAINT CK_PLC_CPC 
    CHECK (nbPlaces < (SELECT capacité, 
                       FROM   STATION S 
                       WHERE  S.nomStation = station) )
    Sinon il faudra faire cela dans une assertion SQL si votre SGBDR les supporte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE ASSERTION A_CK_PLC_CPC
    CHECK NOT EXISTS ( SELECT *
                       FROM   SEJOUR SJ
                              INNER JOIN STATION ST
                                    ON SJ.station = ST.nomStation
                       WHERE  nbPlaces >= capacité)
    Lisez l'article que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/s...age=partie2#L6

    Sinon, dernier recours un jeu de triggers INSERT / UPDATE dans les tables SEJOUR et STATION.

    J'en profite pour vous signaler au passage des horreurs dans votre conception de tables :
    1) jamais d'accents ni de caractères diacritiques dans les nom des objets (colonnes, tables...)
    2) clefs primaire et clefs étrangères doivent porter le même nom puisque c'est le même contenu (nomstation et station)
    3) éviter les noms de colonnes qui ne veulent rien dire (id ?)

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [SQL SERVER 2008 R2] Contrainte CHECK
    Par nadjibnet dans le forum MS SQL Server
    Réponses: 15
    Dernier message: 05/01/2011, 00h05
  2. [AC-2007] sql INSERT contre contrainte CHECK
    Par alassanediakite dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/11/2009, 15h50
  3. [SQL Server 2000] Contrainte Check et exception générée
    Par Greldinard dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 01/09/2006, 12h36
  4. [SQL Server 2000] Contrainte check
    Par batosai dans le forum Langage SQL
    Réponses: 3
    Dernier message: 24/04/2006, 16h16
  5. [Debutant] Contrainte CHECK
    Par TeQ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/01/2004, 11h18

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