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

MS SQL Server Discussion :

Contrainte SQL CHECK -


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Par défaut Contrainte SQL CHECK -
    Bonjour,

    J'ai lu :Bases de données relationnelles
    et contraintes SQL par Frédéric Brouard, alias SQLpro

    Dans ma base de données j'ai une tache qui est soit typé soit appartient à une machine mais pas les deux.

    Donc dans ma table j'ai la clé étrangère de type et machine.
    Pour executer la contrainte évoqué plus, je pense à la contrainte check.

    cependant, je ne sais pas comment la formuler.

    Dans ma table tache j'aurais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MACHINE_ID  INTEGER FOREIGN KEY REFERENCES T_MACHINE (MACHINE_ID),
     TYPE_ID  INTEGER FOREIGN KEY REFERENCES T_TYPE (TYPE_ID)
    Il faudrait que je mette quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MACHINE_ID  INTEGER FOREIGN KEY REFERENCES T_MACHINE (MACHINE_ID) CHECK SI NOT NULL ALORS REGARDER SI TYPE_ID EST NULL,
     TYPE_ID  INTEGER FOREIGN KEY REFERENCES T_TYPE (TYPE_ID) CHECK SI NOT NULL ALORS REGARDER SI MACHINE_ID EST NULL
    Est ce possible avec un type de contrainte CHECK ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Par défaut
    Est ce la bonne façon de coder ma contrainte ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MACHINE_ID  INTEGER FOREIGN KEY REFERENCES T_MACHINE (MACHINE_ID),
    TYPE_ID  INTEGER FOREIGN KEY REFERENCES T_TYPE (TYPE_ID),
    CONSTRAINT CHK_TYPE_MACHINE CHECK(((MACHINE_ID IS NOT NULL AND TYPE_ID IS NULL) or (MACHINE_ID IS NULL AND TYPE_ID IS NOT NULL)))
    Ou serait il mieux un trigger ?

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Non, c'est la bonne manière, car une contrainte à l'avantage de procéder AVANT la mise à jour tandis que le déclencheur s'exécute après, ce qui est bien plus couteux !
    Je rajouterais cependant la possibilité du double NULL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE ...
    (
    ...
    MACHINE_ID     INTEGER FOREIGN KEY REFERENCES T_MACHINE (MACHINE_ID),
    TYPE_ID        INTEGER FOREIGN KEY REFERENCES T_TYPE (TYPE_ID),
    CONSTRAINT CHK_TYPE_MACHINE 
       CHECK(    (MACHINE_ID IS NOT NULL AND TYPE_ID IS     NULL) 
              OR (MACHINE_ID IS     NULL AND TYPE_ID IS NOT NULL)
              OR (MACHINE_ID IS     NULL AND TYPE_ID IS     NULL) );
    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/ * * * * *

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/10/2009, 16h09
  2. Add contraint sql
    Par Thesum dans le forum Langage SQL
    Réponses: 6
    Dernier message: 03/12/2008, 15h01
  3. PL SQL check syntax
    Par miniseb dans le forum Oracle
    Réponses: 1
    Dernier message: 21/08/2006, 11h24
  4. [SQL] check in et access
    Par kleenex dans le forum Access
    Réponses: 1
    Dernier message: 11/10/2005, 09h52
  5. Contrainte SQL Server
    Par Sky_Valmont dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 28/04/2005, 21h33

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