61 - Restricciones foreign key deshabilitar y validar |
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óndrop 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';