61 - Restricciones foreign key deshabilitar y validar


Primer problema:

Una empresa tiene registrados sus clientes en una tabla llamada "clientes", también tiene una tabla "provincias" donde registra los nombres de las provincias.

1- Elimine las tablas "clientes" y "provincias":

 drop table clientes;
 drop table provincias;

2- Créelas con las siguientes estructuras:

 create table clientes (
  codigo number(5),
  nombre varchar2(30),
  domicilio varchar2(30),
  ciudad varchar2(20),
  codigoprovincia number(2),
  primary key(codigo)
 );

 create table provincias(
  codigo number(2),
  nombre varchar2(20),
  primary key (codigo)
 );

3- Ingrese algunos registros para ambas tablas:

 insert into provincias values(1,'Cordoba');
 insert into provincias values(2,'Santa Fe');
 insert into provincias values(3,'Misiones');
 insert into provincias values(4,'Rio Negro');

 insert into clientes values(100,'Perez Juan','San Martin 123','Carlos Paz',1);
 insert into clientes values(101,'Moreno Marcos','Colon 234','Rosario',2);
 insert into clientes values(102,'Garcia Juan','Sucre 345','Cordoba',1);
 insert into clientes values(103,'Lopez Susana','Caseros 998','Posadas',3);
 insert into clientes values(104,'Marcelo Moreno','Peru 876','Viedma',4);
 insert into clientes values(105,'Lopez Sergio','Avellaneda 333','La Plata',5);

4- Intente agregar una restricción "foreign key" para que los códigos de provincia de "clientes" existan en "provincias" sin especificar la opción de comprobación de datos
No se puede porque al no especificar opción para la comprobación de datos, por defecto es "validate" y hay un registro que no cumple con la restricción.

5- Agregue la restricción anterior pero deshabilitando la comprobación de datos existentes

6- Vea las restricciones de "clientes"

7- Deshabilite la restricción "foreign key" de "clientes"

8- Vea las restricciones de "clientes"

9- Agregue un registro que no cumpla la restricción "foreign key"
Se permite porque la restricción está deshabilitada.

10- Modifique el código de provincia del cliente código 104 por 9
Oracle lo permite porque la restricción está deshabilitada.

11-Habilite la restricción "foreign key"

12- Intente modificar un código de provincia existente por uno inexistente.

13- Intente alterar la restricción "foreign key" para que valide los datos existentes

14- Elimine los registros que no cumplen la restricción y modifique la restricción a "enable" y "validate"

15- Obtenga información sobre la restricción "foreign key" de "clientes"

Ver solución

 drop table clientes;
 drop table provincias;

 create table clientes (
  codigo number(5),
  nombre varchar2(30),
  domicilio varchar2(30),
  ciudad varchar2(20),
  codigoprovincia number(2),
  primary key(codigo)
 );

 create table provincias(
  codigo number(2),
  nombre varchar2(20),
  primary key (codigo)
 );

 insert into provincias values(1,'Cordoba');
 insert into provincias values(2,'Santa Fe');
 insert into provincias values(3,'Misiones');
 insert into provincias values(4,'Rio Negro');

 insert into clientes values(100,'Perez Juan','San Martin 123','Carlos Paz',1);
 insert into clientes values(101,'Moreno Marcos','Colon 234','Rosario',2);
 insert into clientes values(102,'Garcia Juan','Sucre 345','Cordoba',1);
 insert into clientes values(103,'Lopez Susana','Caseros 998','Posadas',3);
 insert into clientes values(104,'Marcelo Moreno','Peru 876','Viedma',4);
 insert into clientes values(105,'Lopez Sergio','Avellaneda 333','La Plata',5);

 alter table clientes
  add constraint FK_clientes_codigoprovincia
  foreign key (codigoprovincia)
  references provincias(codigo);

 alter table clientes
  add constraint FK_clientes_codigoprovincia
  foreign key (codigoprovincia)
  references provincias(codigo) novalidate;

 select constraint_name,status,validated
  from user_constraints
  where table_name='CLIENTES';

 alter table clientes
  disable novalidate
  constraint FK_clientes_codigoprovincia;

 select constraint_name,status,validated
  from user_constraints
  where table_name='CLIENTES';

 insert into clientes values(110,'Garcia Omar','San Martin 100','La Pampa',6);

 update clientes set codigoprovincia=9 where codigo=104;

 alter table clientes
  enable novalidate
 constraint FK_clientes_codigoprovincia;

 update clientes set codigoprovincia=9 where codigoprovincia=1;

  alter table clientes
   enable validate
   constraint FK_clientes_codigoprovincia;

 delete from clientes where codigoprovincia not in (1,2,3,4);

 alter table clientes
  enable validate
  constraint FK_clientes_codigoprovincia;

 select status,validated
  from user_constraints
  where constraint_name='FK_CLIENTES_CODIGOPROVINCIA';

 


Retornar