「間違ったID入力」とはどういう意味か完全にはわかりませんが、単なる間違いではなく、有効でないIDを意味していると思います(誰かが実際の場所とは別の都市にいると言うようなものです)それは)。
外部キー制約は、person
テーブルに入力する値がテーブルの主キーとして存在する必要city_id
がcity
あることを意味します。古い値を として入れることはできずcity_id
、有効な値のみを入れます。そして、対応するcity
行は、テーブル内の参照を削除/変更するperson
(たとえば、別の有効な値に更新する) か、この場合はほとんどありませんが、削除をカスケードして のperson
レコードcity
が削除されるまで削除できません。
したがって、テーブルを次のように作成するとします。
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));
city
テーブルには 3 つのレコードがあります。
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');
person
次に、その都市の ID を含めることで、ニューヨークに住んでいる人を追加できます。
insert into person (id, name, last_name, city_id)
values (1, 'Michael', 'Bloomberg', 1);
( SQL フィドル)
一致するcity
レコードのデータを非正規化していないため、ニューヨークがその名前をニューアムステルダムに戻すことを決定した場合、それはレコードへの単一の更新であり、人のレコードcity
に触れる必要はありません。person
その街で。
New Yorkのレコードを削除しようとするcity
と、子レコードが存在するというエラー (ORA-02292) が発生します。person
レコードを更新して acity_id
を 2 または 3 にすると、ニューヨークを削除できます。これは、誤ってこれを行うことができず、孤立したデータ (もはや存在しないperson_id
を指している) を残すことができないという考え方です。city
値と一致しない値でperson
レコードを作成しようとした場合:city_id
city.id
insert into person (id, name, last_name, city_id)
values (2, 'Elvis', 'Presley', 4);
id
...すると、親キー、つまりテーブル内の一致する値がcity
存在しないというエラー (ORA-02291) が発生します。
外部キーの詳細については、データベース コンセプト ガイドを参照してください。