Não tenho certeza do que você quer dizer com 'introdução de ID incorreta', mas suponho que você queira dizer uma ID que não é válida, em vez de apenas um erro (como dizer que alguém está em uma cidade diferente de onde realmente são).
A restrição de chave estrangeira significa que o valor inserido no
person tabela para city_id tem existir como chave primária na city tabela. Eles não podem colocar nenhum valor antigo como um city_id , apenas valores válidos. E a city correspondente a linha não pode ser excluída sem remover/alterar a referência na person tabela (por exemplo, atualizando para um valor válido diferente), ou - improvável neste caso - cascateando a exclusão para que qualquer person registros para a city são deletados. Então, digamos que você crie suas tabelas 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));
Você tem três registros em sua
city tabela: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');
Então você pode adicionar uma
person que mora em Nova York, incluindo o ID dessa cidade:insert into person (id, name, last_name, city_id)
values (1, 'Michael', 'Bloomberg', 1);
(SQL Fiddle )
Você não está desnormalizando os dados na
city correspondente registro, então se Nova York decidisse mudar seu nome de volta para Nova Amsterdã, digamos, isso seria uma única atualização para a city gravar e você não teria que tocar em nenhuma person registros de pessoas naquela cidade. Se você tentou excluir a
city registro para Nova York, você obteria um erro (ORA-02292) dizendo que existia um registro filho. Você pode atualizar a person registro para ter um city_id de 2 ou 3, e então poderia deletar Nova York. A ideia é que você não pode fazer isso por acidente e deixar dados órfãos para trás - um person_id apontando para uma city que não existe mais. Se você tentou criar uma
person registro com um city_id valor que não corresponde a um city.id valor:insert into person (id, name, last_name, city_id)
values (2, 'Elvis', 'Presley', 4);
... então você obteria um erro (ORA-02291) que a chave pai - ou seja, um
id correspondente valor na city tabelas - não existe. Você pode ler mais sobre chaves estrangeiras em os conceitos de banco de dados guia .