CONSTRAINT UNIQUE y NULL

ofl666
07 de Junio del 2005
Imaginemos que tengo la tabla que genera la siguiente sentencia:
CREATE TABLE Conductores
(
CodigoConductor NUMBER(4) CONSTRAINT PKConductores PRIMARY KEY,
Nombre CHAR(100) CONSTRAINT NNConductoresNombre NOT NULL,
Apellido1 CHAR(100),
Apellido2 CHAR(100),
UNIQUE (Nombre, Apellido1, Apellido2)
);

Mi intención con la constraint UNIQUE es que no pueda haber 2 registros con el mismo nombre, apellido1 y apellido2. Esto funciona correctamente cuando los registros tienen los 3 campos pero si no tienen apellido1 o apellido2 (solo el nombre es NOT NULL y deseo que siga siendo así) no tiene el funcionamiento que yo esperaba (quizas esperaba demasiado), es decir, ejemlos de registros que entran y que no entran:

INSERT (1,'Pepe','Pepe1','Pepe2') -> Entra
INSERT (2,'Pepe','Pepe1','Pepe2') -> NO entra (correcto, es lo que quiero)

INSERT (3,'Pepe') -> Entra
INSERT (4,'Pepe') -> ¡¡¡¡¡ ENTRA !!!! no lo entiendo

INSERT (5,'Pepe','Pepe1') -> Entra
INSERT (6,'Pepe','Pepe1') -> ¡¡¡¡¡ ENTRA !!!! no lo entiendo

¿Alguien sabe como definir la restricción que yo busco (aparte de con trigers)?

ESTUARDO RIVERA
07 de Junio del 2005
Me parece muy extraño que no funcione. Ejecuté la sentencia para la creación de la tabla y a mi si me funciona. Probablemente es por la version de Oracle.
La versión mia es la
Oracle9i Enterprise Edition Release 9.2.0.5.0

xanton
07 de Junio del 2005
Hola

El "problema" se produce por la lógica de los nulos.
un NULL no es igual ni diferente de nada.
Asi que supongo que los tiros deben ir por ahí.

Para solucionar el problema, no sé, se puede añadir una nueva columna en la tabla que sea una concatenación de las otras 3 y aplicar en ella la constraint.
Dicha columna se puede insertar automáticamente con los valores de las otras 3.

Espero que sea una solución.