Claves Unicas me permiten duplicidad de Datos en Oracle
Publicado por Isaac López (1 intervención) el 20/08/2014 10:32:27
Que tal colegas los vengo a molestar en esta oportunidad con el siguiente problema:
en un proyecto de la Universidad me piden una restricción para que el mismo día un usuario no pueda hacer 2 solicitudes de un mismo curso mas si en otra fecha solicitar de nuevo algo del mismo curso y se me ocurrio hacerla por medio de una clave única, la tabla me queda así
CREATE TABLE "Solicitud"
( "IDSolicitud" NUMBER(*,0) NOT NULL ENABLE,
"PaginaIni" NUMBER(*,0) NOT NULL ENABLE,
"PaginaFin" NUMBER(*,0) NOT NULL ENABLE,
"CostoUnit" NUMBER(10,2) NOT NULL ENABLE,
"NombrePropieetario" VARCHAR2(30) NOT NULL ENABLE,
"IDCurso" NUMBER(*,0),
"IDUsuario" NUMBER(*,0),
"IDTipoFotocopia" NUMBER(*,0),
"IDEmpresa" NUMBER(*,0),
"CANTIDAD" NUMBER(10,0) NOT NULL ENABLE,
"FECHA" DATE NOT NULL ENABLE,
CONSTRAINT "Key11" PRIMARY KEY ("IDSolicitud") ENABLE,
CONSTRAINT "UQ_FECHA_CURSO_USUARIO" UNIQUE ("FECHA", "IDUsuario", "IDCurso") ENABLE
) ;ALTER TABLE "Solicitud" ADD CONSTRAINT "Relationship26" FOREIGN KEY ("IDCurso")
REFERENCES "Cursos" ("IDCurso") ENABLE;ALTER TABLE "Solicitud" ADD CONSTRAINT "Relationship27" FOREIGN KEY ("IDUsuario")
REFERENCES "Usuario" ("IDUsuario") ENABLE;ALTER TABLE "Solicitud" ADD CONSTRAINT "Relationship28" FOREIGN KEY ("IDTipoFotocopia")
REFERENCES "TipoFotocopia" ("IDTipoFotocopia") ENABLE;ALTER TABLE "Solicitud" ADD CONSTRAINT "Relationship37" FOREIGN KEY ("IDEmpresa")
REFERENCES "Empresa" ("IDEmpresa") ENABLE;
esta es la restricción que ya esta en la tabla:
CONSTRAINT "UQ_FECHA_CURSO_USUARIO" UNIQUE ("FECHA", "IDUsuario", "IDCurso") ENABLE
Pero me vengo a topar con la bromita de oracle que siempre me deja meter los tres campos iguales (yo esperaba que al validar que en una fecha un mismo usuario solicito mas de 1 vez el mismo curso me lo impidiera) pero ya intenté por consola, por query y por modo gráfico y de todas maneras me deja insertar los datos
cabe resaltar que la fecha en la tabla se inserta automáticamente por medio de un trigger y se la asigne de la siguiente manera :NEW.FECHA= SYSDATE;
Estoy en Oracle 11g
El Campo FECHA es DATE y según yo DATE solo maneja año, mes y día sin horas, tendrán ustedes alguna solicíon?
en un proyecto de la Universidad me piden una restricción para que el mismo día un usuario no pueda hacer 2 solicitudes de un mismo curso mas si en otra fecha solicitar de nuevo algo del mismo curso y se me ocurrio hacerla por medio de una clave única, la tabla me queda así
CREATE TABLE "Solicitud"
( "IDSolicitud" NUMBER(*,0) NOT NULL ENABLE,
"PaginaIni" NUMBER(*,0) NOT NULL ENABLE,
"PaginaFin" NUMBER(*,0) NOT NULL ENABLE,
"CostoUnit" NUMBER(10,2) NOT NULL ENABLE,
"NombrePropieetario" VARCHAR2(30) NOT NULL ENABLE,
"IDCurso" NUMBER(*,0),
"IDUsuario" NUMBER(*,0),
"IDTipoFotocopia" NUMBER(*,0),
"IDEmpresa" NUMBER(*,0),
"CANTIDAD" NUMBER(10,0) NOT NULL ENABLE,
"FECHA" DATE NOT NULL ENABLE,
CONSTRAINT "Key11" PRIMARY KEY ("IDSolicitud") ENABLE,
CONSTRAINT "UQ_FECHA_CURSO_USUARIO" UNIQUE ("FECHA", "IDUsuario", "IDCurso") ENABLE
) ;ALTER TABLE "Solicitud" ADD CONSTRAINT "Relationship26" FOREIGN KEY ("IDCurso")
REFERENCES "Cursos" ("IDCurso") ENABLE;ALTER TABLE "Solicitud" ADD CONSTRAINT "Relationship27" FOREIGN KEY ("IDUsuario")
REFERENCES "Usuario" ("IDUsuario") ENABLE;ALTER TABLE "Solicitud" ADD CONSTRAINT "Relationship28" FOREIGN KEY ("IDTipoFotocopia")
REFERENCES "TipoFotocopia" ("IDTipoFotocopia") ENABLE;ALTER TABLE "Solicitud" ADD CONSTRAINT "Relationship37" FOREIGN KEY ("IDEmpresa")
REFERENCES "Empresa" ("IDEmpresa") ENABLE;
esta es la restricción que ya esta en la tabla:
CONSTRAINT "UQ_FECHA_CURSO_USUARIO" UNIQUE ("FECHA", "IDUsuario", "IDCurso") ENABLE
Pero me vengo a topar con la bromita de oracle que siempre me deja meter los tres campos iguales (yo esperaba que al validar que en una fecha un mismo usuario solicito mas de 1 vez el mismo curso me lo impidiera) pero ya intenté por consola, por query y por modo gráfico y de todas maneras me deja insertar los datos
cabe resaltar que la fecha en la tabla se inserta automáticamente por medio de un trigger y se la asigne de la siguiente manera :NEW.FECHA= SYSDATE;
Estoy en Oracle 11g
El Campo FECHA es DATE y según yo DATE solo maneja año, mes y día sin horas, tendrán ustedes alguna solicíon?
Valora esta pregunta


0