Nie jestem do końca pewien, co rozumiesz przez „nieprawidłowy identyfikator”, ale zakładam, że masz na myśli nieprawidłowy identyfikator, a nie tylko pomyłkę (jak powiedzenie, że ktoś jest w innym mieście niż to, w którym naprawdę są).
Ograniczenie klucza obcego oznacza, że wartość, którą wprowadzają w person tabela dla city_id ma istnieć jako klucz podstawowy w city stół. Nie mogą umieścić żadnej starej wartości jako city_id , tylko prawidłowe wartości. I odpowiadające mu city wiersz nie może zostać usunięty bez usunięcia/zmiany odniesienia w person tabela (np. aktualizacja do innej prawidłowej wartości) lub - w tym przypadku mało prawdopodobne - kaskadowe usuwanie, tak aby każda person rekordy dla city zostaną usunięte.
Powiedzmy, że tworzysz swoje tabele jako:
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));
Masz trzy rekordy w swoim 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');
Następnie możesz dodać person mieszka w Nowym Jorku, podając identyfikator tego miasta:
insert into person (id, name, last_name, city_id)
values (1, 'Michael', 'Bloomberg', 1);
(Skrzypce SQL )
Nie denormalizujesz danych w pasującym city rekord, więc gdyby Nowy Jork zdecydował się zmienić nazwę z powrotem na Nowy Amsterdam, powiedzmy, byłaby to pojedyncza aktualizacja city nagrywaj i nie musisz dotykać żadnej person rekordy dla osób w tym mieście.
Jeśli próbowałeś usunąć city rekord dla Nowego Jorku, otrzymasz błąd (ORA-02292) mówiący, że istnieje rekord podrzędny. Możesz zaktualizować person rekord, aby mieć city_id 2 lub 3, a następnie będzie w stanie usunąć Nowy Jork. Chodzi o to, że nie możesz tego zrobić przez przypadek i zostawić osierocone dane - person_id wskazując na city które już nie istnieje.
Jeśli próbowałeś utworzyć person rekord z city_id wartość, która nie pasuje do city.id wartość:
insert into person (id, name, last_name, city_id)
values (2, 'Elvis', 'Presley', 4);
... wtedy otrzymasz błąd (ORA-02291), że klucz nadrzędny - czyli pasujący id wartość w city tabele - nie istnieje.
Więcej informacji o kluczach obcych można znaleźć w pojęciach dotyczących baz danych przewodnik .