Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/07/2011, 12h46   #1
Nouveau Membre du Club
 
jalal zaime
Inscription : novembre 2010
Messages : 141
Détails du profil
Informations personnelles :
Nom : jalal zaime

Informations forums :
Inscription : novembre 2010
Messages : 141
Points : 37
Points : 37
Par défaut interdire le doublon pour 2 colone (2 table différent)

bonjour wolrd,
j'aimerai savoir comment interdire le double pour 2 colonne dans 2 table relationnelle


EX:
table1------------- table2
colonne x ---------- colonne x
a ----------------- b
s ----------------- e


donc interdire l 'ajout de b et e dans la table1 + interdire l 'ajout de a et s dans la table2
et aussi interdire le doublon de a et s dans la table1 + interdire le doublon de b et e dans la table2
jalalnet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 17h33   #2
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Bonjour,

Pour l’interdiction d'ajout, une contrainte de domaine suffit :

Code :
1
2
3
4
5
6
7
-- Interdire l 'ajout de b et e dans la table1
ALTER TABLE dbo.table1
ADD CONSTRAINT CHKtable1_colonneX CHECK (colonneX NOT IN ('b', 'e'))
 
-- Interdire l 'ajout de a et s dans la table2 
ALTER TABLE dbo.table2
ADD CONSTRAINT CHKtable2_colonneX CHECK (colonneX NOT IN ('a', 's'))
Pour les doublons, il suffit d'ajouter une contrainte d'unicité :

Code :
1
2
3
4
5
6
7
-- Interdire le doublon de a et s dans la table1 
ALTER TABLE dbo.table1
ADD CONSTRAINT UQtable1 UNIQUE (colonneX)
 
-- Interdire le doublon de b et e dans la table2 
ALTER TABLE dbo.table2
ADD CONSTRAINT UQtable2 UNIQUE (colonneX)
J'ai donné quelques exemples d'ajouts de contraintes à des tables existantes ici

Les deux colonnes ne pourront dont recevoir qu'une seule fois n'importe quelle valeur.
Notez que SQL Server a le défaut, pour les contraintes d'unicité, de considérer NULL comme une valeur, ce qui est faux, et que l'on peut contourner par un index unique filtré, ce qui n'est possible qu'avec SQL Server 2008.

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 21h31   #3
Nouveau Membre du Club
 
jalal zaime
Inscription : novembre 2010
Messages : 141
Détails du profil
Informations personnelles :
Nom : jalal zaime

Informations forums :
Inscription : novembre 2010
Messages : 141
Points : 37
Points : 37
mais non !
a b e c sont que des exemples
je parle d'une maniere generale
interdire les doublon dans les deux colonne
comme s il s'agit d un seul colonne
jalalnet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 08h54   #4
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 954
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 954
Points : 17 774
Points : 17 774
Pourquoi faire 2 tables dans ce cas ??? C'est stupide. N'en faites qu'une !

Donnez votre cas concret et non pas des exemples scolaires....

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/07/2011, 09h01   #5
Membre éclairé
 
Avatar de jmjmjm
 
Homme Jérémy
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 751
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Service public

Informations forums :
Inscription : avril 2005
Messages : 751
Points : 381
Points : 381
Je suis d'accord avec SQLPro, néanmoins, si tu as réellement besoin de deux tables, tu peux passer par des triggers afin de vérifier à l'insertion que les données ne sont pas présentes dans l'autre table et inversement. Si la donnée n'est pas présente tu inserts, sinon tu lèves une exception personnalisée.

En espérant t'avoir aidé.
jmjmjm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 11h01   #6
Nouveau Membre du Club
 
jalal zaime
Inscription : novembre 2010
Messages : 141
Détails du profil
Informations personnelles :
Nom : jalal zaime

Informations forums :
Inscription : novembre 2010
Messages : 141
Points : 37
Points : 37
l'application est déjà faite ! et je n'ai pas l'intention de recoder
jalalnet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2011, 10h35   #7
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Ça c'est votre problème : elle a été mal conçue, c'est de votre faute ou de vos collègues.
Si vous voulez faire quelque chose de souple et de performant, il va falloir re-coder en prenant en compte le remarque de SQLPro.
Comme le cas concret n'est pas décrit, on est dans le flou et on ne peut pas vous aider.

Citation:
interdire les doublon dans les deux colonne
comme s il s'agit d un seul colonne
Je ne sais pas si vous vous rendez compte que ceci est une horreur et un non-sens.

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/10/2011, 18h10   #8
Invité régulier
 
Inscription : novembre 2010
Messages : 66
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 66
Points : 5
Points : 5
Citation:
Envoyé par elsuket Voir le message
Bonjour,

Pour l’interdiction d'ajout, une contrainte de domaine suffit :

Code :
1
2
3
-- Interdire l 'ajout de b et e dans la table1
ALTER TABLE dbo.table1
ADD CONSTRAINT CHKtable1_colonneX CHECK (colonneX NOT IN ('b', 'e'))


Bonjour,

Ou mettre ce code ?

Merci a+
Gorane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 18h50   #9
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Qui êtes vous Gorane? l'initiateur du post avec un autre pseudo?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 22h49   #10
Invité régulier
 
Inscription : novembre 2010
Messages : 66
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 66
Points : 5
Points : 5
Heu ... Non pas du tout...

je comprend la question. Vu comment il répond ...

C'est en cherchant sur le forum que je suis tombé sur ce post.

Donc voila ...

Merci d'avance
a+
Gorane est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h04.


 
 
 
 
Partenaires

Hébergement Web