Précédent   Forum des professionnels en informatique > Bases de données > Firebird
Firebird Forum d'entraide sur le SGBD Firebird. Avant de poster -> F.A.Q Firebird, Tutoriels
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 07/10/2007, 17h43   #1
Membre confirmé
 
Avatar de DAB.cz
 
Inscription : octobre 2006
Messages : 221
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 221
Points : 214
Points : 214
Par défaut unique et null - FB2

J'ai une table avec colonnes A (not null) et B (null). Je veux créér unique contraint qui permets:

A (not null) B (null)
----------
1 null
1 null
1 5
1 6
2 null
2 1
2 5

mais pas ceci:

A (not null) B (null)
----------
2 1
2 1

Vous connaissez meilleur solution que:

create unique index <nomdeindex>
on <table>
computed by (A ||'x'|| coalesce (B, '__'|| <colonne PK> ||'__'));

DAB
DAB.cz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 11h33   #2
Membre régulier
 
Inscription : février 2005
Messages : 100
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 100
Points : 88
Points : 88
Selon ton exemple c'est impossible car la contrainte d'unicité va retourner une erreur pour
Citation:
1 null
1 null
à moins que cela soit une erreur de saisie je pense et que tu voulais plutôt dire pour ton exemple :

1 null
1 5
1 6
2 null
2 1
2 5

Sinon tu n'as pas le choix
A not null et
ALTER TABLE <table> ADD CONSTRAINT <nomdeindex> UNIQUE (A, B)
USING INDEX IX_UNIQUE
sillycoder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 15h43   #3
Membre confirmé
 
Avatar de DAB.cz
 
Inscription : octobre 2006
Messages : 221
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 221
Points : 214
Points : 214
Citation:
Envoyé par sillycoder Voir le message
Selon ton exemple c'est impossible car la contrainte d'unicité va retourner une erreur pour
1 null
1 null
Mon example est correct et ma solution (index computed by ...) marche (bien?).
Je pourrais aussi utiliser TRIGGER, mais est-ce mieux?

Pour être plus precise:

TAB1
PK (not null) A (not null) B (null)
----------
1 1 null
2 1 null
3 1 5
4 1 6
5 2 null
6 2 1
7 2 5

create unique index UIXXX
on TAB1
computed by (A ||'x'|| coalesce (B, '__'|| PK ||'__'));

insert into TAB1 (PK, A, B) values (8, 1, 5);
est alors interdite

mais
insert into TAB1 (PK, A, B) values (8, 1, null);
est OK

DAB
DAB.cz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 17h45   #4
Membre régulier
 
Inscription : février 2005
Messages : 100
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 100
Points : 88
Points : 88
Il fallait préciser dès le départ car je ne pouvais pas deviner que ta table contenait trois champs. Dans ton exemple, tu n'avais mis que deux et dans ce cas là, cela n'aurait pas marché.

Citation:
1 null
1 null
ce n'est pas du tout la même chose que

Citation:
1 1 null
2 1 null
Néanmoins je ne vois pas pourquoi tu ne veux pas utiliser la contrainte d'unicité autrement. Cette solution ne me parait pas mal.
sillycoder 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 21h56.


 
 
 
 
Partenaires

Hébergement Web