No estoy del todo seguro de lo que quiere decir con "ingreso de identificación incorrecto", pero supondré que se refiere a una identificación que no es válida, en lugar de simplemente un error (como decir que alguien está en una ciudad diferente a donde realmente son).
La restricción de clave externa significa que el valor que ingresan en person
tabla para city_id
tiene existir como clave principal en la city
mesa. No pueden poner ningún valor antiguo como city_id
, solo valores válidos. Y la correspondiente city
la fila no se puede eliminar sin eliminar/cambiar la referencia en person
tabla (por ejemplo, actualizar a un valor válido diferente) o, poco probable en este caso, eliminar en cascada para que cualquier person
registros para la city
se eliminan.
Así que digamos que creas tus tablas como:
create table city (id number primary key, code varchar2(2), name varchar2(30));
create table person (id number, name varchar2(30), last_name varchar2(30),
city_id number not null references city(id));
Tienes tres registros en tu city
tabla:
insert into city (id, name) values (1, 'New York');
insert into city (id, name) values (2, 'London');
insert into city (id, name) values (3, 'Paris');
Luego puedes agregar una person
que vive en Nueva York incluyendo el DNI de esa ciudad:
insert into person (id, name, last_name, city_id)
values (1, 'Michael', 'Bloomberg', 1);
(SQL Fiddle )
No está desnormalizando los datos en la city
coincidente registro, por lo que si Nueva York decidiera volver a cambiar su nombre a Nueva Ámsterdam, por ejemplo, sería una sola actualización de la city
grabar y no tendrías que tocar a ninguna person
registros de personas en esa ciudad.
Si intentaste eliminar la city
para Nueva York, obtendrá un error (ORA-02292) que indica que existe un registro secundario. Podrías actualizar la person
registro para tener un city_id
de 2 o 3, y luego podría eliminar Nueva York. La idea es que no puede hacer esto por accidente y dejar datos huérfanos:un person_id
apuntando a una city
que ya no existe.
Si intentaste crear una person
registro con un city_id
valor que no coincide con un city.id
valor:
insert into person (id, name, last_name, city_id)
values (2, 'Elvis', 'Presley', 4);
... entonces obtendría un error (ORA-02291) de que la clave principal, es decir, un id
coincidente valor en la city
tablas - no existe.
Puede leer más sobre claves externas en los conceptos de la base de datos guía .