39 - Restricción unique


Primer problema:

Una empresa de remises tiene registrada la información de sus vehículos en una tabla llamada "remis".

1- Elimine la tabla:

  drop table remis;

2- Cree la tabla con la siguiente estructura:

 create table remis(
  numero number(5),
  patente char(6),
  marca varchar2(15),
  modelo char(4)
 );

3- Ingrese algunos registros, 2 de ellos con patente repetida y alguno con patente nula.

4- Agregue una restricción "primary key" para el campo "numero".

5- Intente agregar una restricción "unique" para asegurarse que la patente del remis no tomará valores repetidos.

No se puede porque hay valores duplicados, un mensaje indica que se encontraron claves duplicadas.

6- Elimine el registro con patente duplicada y establezca la restricción.

Note que hay 1 registro con valor nulo en "patente".

7- Intente ingresar un registro con patente repetida (no lo permite)

8- Ingrese un registro con valor nulo para el campo "patente".

9- Muestre la información de las restricciones consultando "user_constraints" y "user_cons_columns" y analice la información retornada (2 filas en cada consulta)

Ver solución

  drop table remis;

 create table remis(
  numero number(5),
  patente char(6),
  marca varchar2(15),
  modelo char(4)
 );

  insert into remis values(1,'ABC123','Renault clio','1990');
  insert into remis values(2,'DEF456','Peugeot 504','1995');
  insert into remis values(3,'DEF456','Fiat Duna','1998');
  insert into remis values(4,'GHI789','Fiat Duna','1995');
  insert into remis values(5,null,'Fiat Duna','1995');

 alter table remis
 add constraint PK_remis_numero
 primary key(numero); 

 alter table remis
 add constraint UQ_remis_patente
 unique(patente); 

 delete from remis where numero=3;

 alter table remis
 add constraint UQ_remis_patente
 unique(patente); 

  insert into remis values(6,'ABC123','Renault 11','1995');

  insert into remis values(7,null,'Renault 11','1995');

 select *from user_constraints where table_name='REMIS';

 select *from user_cons_columns where table_name='REMIS';

 


Retornar