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 :

Création de contrainte de valeur


Sujet :

MS SQL Server

  1. #1
    Membre chevronné Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut Création de contrainte de valeur
    Bonjour,
    Dans une table utilisée en décisionnelle, je souhaite ajouter une contrainte sur les valeurs d'une colonne en fonction d'une valeur d'une autre.
    Plus précisément, j'ai une colonne Col1 et une autre PoidsCol1.
    Pour une valeur de Col1, la valeur des PoidsCol1 est unique.
    Autrement dit, lorsque la première valeur est spécifiée pour 1 ligne de PoidsCol1, toutes les autres Col1 auront la même valeur de PoidsCol1.

    Il serait possible de déporter cela dans une autre table ou encore de vérifier cela avec des trigger également, mais je souhaiterai éviter ces 2 méthodes.
    Une "simple" contrainte peut-elle être appliquée ?

    Merci pour vos idées.

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Avez-vous pensé à une colonne calculée, éventuellement à l'aide d'une fonction ?

    @++

  3. #3
    Membre chevronné Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    Le problème est que la valeur de poids n'est pas définie de manière absolue.
    A la rigueur, la valeur en elle-même n'a pas vraiment d'importance, mais elle ne peut distinguer pour la valeur d'une même Col1.

    Je pensais à une valeur par défaut qui serait celle qui existe déjà, si rien n'existe, alors 0.

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Entre :

    Pour une valeur de Col1, la valeur des PoidsCol1 est unique.
    Et :

    Le problème est que la valeur de poids n'est pas définie de manière absolue.
    Je suis un peu perdu

    @++

  5. #5
    J1
    J1 est déconnecté
    Membre averti Avatar de J1
    Inscrit en
    Mai 2004
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 321
    Points : 335
    Points
    335
    Par défaut
    Citation Envoyé par Jinroh77 Voir le message
    Bonjour,
    Dans une table utilisée en décisionnelle, je souhaite ajouter une contrainte sur les valeurs d'une colonne en fonction d'une valeur d'une autre.
    Plus précisément, j'ai une colonne Col1 et une autre PoidsCol1.
    Pour une valeur de Col1, la valeur des PoidsCol1 est unique.
    Autrement dit, lorsque la première valeur est spécifiée pour 1 ligne de PoidsCol1, toutes les autres Col1 auront la même valeur de PoidsCol1.

    Il serait possible de déporter cela dans une autre table ou encore de vérifier cela avec des trigger également, mais je souhaiterai éviter ces 2 méthodes.
    Une "simple" contrainte peut-elle être appliquée ?

    Merci pour vos idées.
    Il faut avouer que l'idée d'avoir une colonne (Col1) dont la valeur conditionne la valeur d'une autre colonne (PoidsCol1) va à l'encontre des principes de normalisation.
    Enfin, passons, je pense que tu as tes raisons. Voici donc une solution que tu peux tester...

    Créons d'abord la fonction qui va permettre de valider ou non la contrainte de table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE FUNCTION fblnErreur()
    RETURNS int
    AS 
    BEGIN
       DECLARE @retval int
     
    	SELECT @retval = 1
    	FROM (SELECT DISTINCT Col1, PoidsCol1 FROM TEST20100618) T
    	GROUP BY Col1
    	HAVING COUNT(*)>1
     
    	RETURN COALESCE(@retval,0)  
     
    END
    Appliquons ensuite la contrainte à notre table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE TEST20100618
    ADD CONSTRAINT chk1 CHECK (dbo.fblnErreur() = 0 )
    Remarque : dans mon exemple, la table se nomme TEST20100618

  6. #6
    Membre chevronné Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Points : 2 145
    Points
    2 145
    Par défaut
    Merci pour la fonction
    Je vais tester cela puis la rendre utilisable sur tous les couples de colonnes que je possède dans plusieurs tables

    Merci.

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

Discussions similaires

  1. Création de contrainte de clé étrangère
    Par abedissi dans le forum Débuter
    Réponses: 5
    Dernier message: 13/06/2009, 10h45
  2. [Mysql] contrainte sur valeur par defaut
    Par remond dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/11/2008, 19h13
  3. Réponses: 2
    Dernier message: 21/09/2008, 15h18
  4. [SBI JR] création de contraintes
    Par Benoit_Durand dans le forum SpagoBI
    Réponses: 4
    Dernier message: 27/08/2007, 16h16
  5. Création de char depuis valeur decimal
    Par kivan666 dans le forum Langage
    Réponses: 2
    Dernier message: 27/03/2006, 12h06

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