Condition sur null de deux attributs

Condition sur null de deux attributs - SQL/NoSQL - Programmation

Marsh Posté le 21-03-2007 à 23:15:04    

Bonjour,
Je souhaite mettre en place une contrainte d'intégrité sur deux attributs pouvant être nuls, mais pas les deux à la fois, ni aucun des deux.
Je m'explique :
 

Code :
  1. create table entity (
  2.   attA  number  null,
  3.   attB  number  null,
  4.   -- others
  5. ) ;


Quand attA est null, attB doit être renseigné. Et inversement. Les deux ne peuvent être null en même temps. Les deux ne peuvent être renseignés en même temps.
En gros, il me faudrait un XOR (ou l'inverse, je confonds), mais comme ça n'existe apparement pas dans la norme SQL, je dois trouver une autre solution, qui peut être implémentée avec une contrainte CHECK ou un trigger.
Si vous avez une idée, toute proposition est la bienvenue :hello:
Merci d'avance.
 
PS : Le SGBD est Oracle 10gr2

Reply

Marsh Posté le 21-03-2007 à 23:15:04   

Reply

Marsh Posté le 22-03-2007 à 17:23:06    

ben un trigger, ça se fait en 10 secondes.
 
"trigger oracle" dans google et à mon avis tu vas vite trouver comment faire.
 
ensuite, pour le CHECK, jamais utilisé, je ne sais pas si tu veux t'en sortir avec. c'est peut-être plus rapide que les triggers, mais c'est vachement plus limité, donc je fais tout habituellement par trigger.


Message édité par MagicBuzz le 22-03-2007 à 17:23:14
Reply

Marsh Posté le 23-03-2007 à 07:59:42    

Trigger +1  
A part ça je vois pas comment niveau BdD on pourrait faire  
autrement ...


---------------
il n'y a pas que le VTT dans la vie, il y a le Snowboard aussi ...
Reply

Marsh Posté le 23-03-2007 à 17:47:51    

Trigger, donc.
 
Mais j'aurai bien vu une contrainte du style

Code :
  1. CHECK((attA is null and attB is not null) or (attA is not null and attB is null))


Après je sais pas si la syntaxe est correcte, je testerai quand même quand j'aurai le temps.


Message édité par Ynnead le 23-03-2007 à 17:48:44
Reply

Marsh Posté le 29-03-2007 à 16:33:31    

Bizarre d'avoir deux colonne dans une table dont une seule des deux doit etre renseignée ?
Il serait plus logique d'avoir une seule colonne att plutot que attA et attb et d'avoir une colonne (un booleen) qui indique si att est de type "A" ou "B", non ?

Reply

Marsh Posté le 31-03-2007 à 12:43:49    

Je me range de l'avis de Bazile, ça n'a pas vraiment de sens d'avoir un champ vide sur chaque tuple.
 
tu es sûr de ton modèle de données ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed