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

Développement SQL Server Discussion :

Contraint sur attribut [2008]


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2008
    Messages : 102
    Points : 78
    Points
    78
    Par défaut Contraint sur attribut
    Bonjour,

    Voila je suis en pleine conception d'un base de donnée. j'ai du crée une table de jointure pour une liaison n-n mais cependant a l’intérieur de cette table les remplissage des champs de l'enregistrement sont conditionné.
    Je m'explique

    Ma table de jointure est de la forme

    ID de type int null non autorisé (PK auto incrément)
    CH1 type nvarchar(13) null autorisé
    CH2 type nvarchar(13) null autorisé
    CH3 type nvarchar(13) null non autorisé

    J'aimerai crée les contrainte suivant
    CH1 = value si CH2 = null et CH2 = value si CH1 = null.
    en gros on ne peut remplir mette une valeur que dans CH1 ou CH2 mais pas les 2 en même temps

    est ce que cela est possible dans la conception de la base ou suis-je obligé de programmé ça dans l'IHM
    Je vois pas pas du tout comment crée ces contrainte sur ma table dans sql management studio 2008

    si quelqu'un a une idée merci d'avance.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Oui c'est possible avec une contrainte de domaine (CHECK)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TABLE MaTable(
    	ID	INT NOT NULL PRIMARY KEY CLUSTERED IDENTITY,
    	CH1 NVARCHAR(13) NULL,
    	CH2 NVARCHAR(13) NULL,
    	CH3 NVARCHAR(13) NOT NULL,
     
    	CONSTRAINT CHK_CH1_CH2 CHECK(CH1 IS NULL OR CH2 IS NULL)
    )

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2008
    Messages : 102
    Points : 78
    Points
    78
    Par défaut
    Merci bien, je vais essayé ça de suite

  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 : 42
    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,

    Plus exactement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    CREATE TABLE dbo.MaTable
    (
    	ID int IDENTITY(-2147483648, 1) NOT NULL PRIMARY KEY
    	, CH1 nvarchar(13) NULL
    	, CH2 nvarchar(13) NULL 
    	CONSTRAINT CHK_MaTable__CH1__CH2
    		CHECK
    		(
    			(
    				CH1 IS NULL
    				AND CH2 IS NOT NULL
    			)
    			OR
    			(
    				CH1 IS NOT NULL
    				AND CH2 IS NULL
    			)
    		)
    )
    Veillez bien à mettre la colonne auto-incrémentée à -2 milliards, ce qui vous permet de stocker presque 5 milliards de lignes, étant donné que vous utiliserez alors les entiers négatifs aussi

    @++

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Salut ElSuket,

    Citation Envoyé par elsuket Voir le message
    Plus exactement [...]

    Oui, en fait Nephi n'a pas précisé s'il voulait forcer la saisie d'au moins une des deux valeurs.

    Mais maintenant, il a le choix !

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    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 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    ça ressemble beaucoup à un héritage exclusif... Vous gagneriez beaucoup en remodélisant de la sorte...

    A lire : http://sqlpro.developpez.com/cours/m...tion/heritage/

    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/ * * * * *

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2008
    Messages : 102
    Points : 78
    Points
    78
    Par défaut
    merci beaucoup, c'est bien plus que je n'en espérait.
    je vais lire l'article sur l’héritage, cela a l'air très intéressant.
    Pour répondre a la précision non apporté, il y a une sorte de forçage en effet, car il y a l'obligation de remplir un champs mais c'est l'un ou l'autre.
    cela se comporte comme un ou exclusif, soit l'un soit l'autre mais pas les deux avec obligation de remplissage.
    voila merci encore

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 10/08/2011, 14h05
  2. Contrainte sur les attributs des tables référencées
    Par prgasp77 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/12/2010, 18h00
  3. Contrainte check sur attribut
    Par oneagaindoguys dans le forum MySQL
    Réponses: 15
    Dernier message: 29/03/2010, 08h40
  4. [XSD] grouper une contrainte sur 2 attributs
    Par MathiasM dans le forum Valider
    Réponses: 3
    Dernier message: 19/04/2006, 12h01
  5. contrainte sur deux champs d'une table
    Par bdkiller dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 17/09/2004, 18h26

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