Ich bin mir nicht ganz sicher, was Sie mit "falscher ID-Eingabe" meinen, aber ich nehme an, Sie meinen eine ID, die nicht gültig ist, und nicht nur einen Fehler (wie zu sagen, dass sich jemand in einer anderen Stadt befindet als in Wirklichkeit sind).
Die Fremdschlüsselbeschränkung bedeutet, dass der Wert, den sie in person
eingeben Tabelle für city_id
hat als Primärschlüssel in city
existieren Tisch. Sie können keinen alten Wert als city_id
einfügen , nur gültige Werte. Und die dazugehörige city
Zeile kann dann nicht gelöscht werden, ohne entweder den Verweis in person
zu entfernen/zu ändern Tabelle (z. B. Aktualisieren auf einen anderen gültigen Wert) oder - in diesem Fall unwahrscheinlich - Kaskadieren des Löschvorgangs, sodass jeder person
Aufzeichnungen für die city
werden gelöscht.
Nehmen wir also an, Sie erstellen Ihre Tabellen wie folgt:
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));
Du hast drei Rekorde in deiner city
Tabelle:
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');
Dann können Sie eine person
hinzufügen der in New York lebt, indem Sie die ID dieser Stadt angeben:
insert into person (id, name, last_name, city_id)
values (1, 'Michael', 'Bloomberg', 1);
(SQL-Fiddle )
Sie denormalisieren die Daten in der übereinstimmenden city
nicht Wenn also New York beschließt, seinen Namen wieder in New Amsterdam zu ändern, wäre das eine einzige Aktualisierung der city
aufnehmen und Sie müssten keine person
berühren Rekorde für Menschen in dieser Stadt.
Wenn Sie versucht haben, die city
zu löschen Datensatz für New York erhalten Sie eine Fehlermeldung (ORA-02292), die besagt, dass ein untergeordneter Datensatz existiert. Sie könnten die person
aktualisieren Datensatz eine city_id
haben von 2 oder 3, und wäre dann in der Lage, New York zu löschen. Die Idee ist, dass Sie dies nicht aus Versehen tun und verwaiste Daten zurücklassen können – eine person_id
zeigt auf eine city
die nicht mehr existiert.
Wenn Sie versucht haben, eine person
zu erstellen Eintrag mit einer city_id
Wert, der nicht mit einer city.id
übereinstimmt Wert:
insert into person (id, name, last_name, city_id)
values (2, 'Elvis', 'Presley', 4);
... dann erhalten Sie eine Fehlermeldung (ORA-02291), dass der übergeordnete Schlüssel - also eine passende id
Wert in der city
Tabellen - existiert nicht.
Weitere Informationen zu Fremdschlüsseln finden Sie in den Datenbankkonzepten Anleitung .