1

インターネットで完成した回答を検索する前に、関係を理解PRIMARYし​​、重要な関係があることを確認したいだけです。FOREIGN

これを言いましょう:

私たちはテーブルを持っています、私たちはテーブルCITY(ID-PK,CODE,NAME)を持っていますPERSON(ID-PK,NAME,LASTNAME,CITY_ID-FK)

この場合、ユーザーがテーブル person に外部キーを入力する必要がある場合、私は混乱していますか? そうでない場合、ユーザーに適用する必要がある都市をどのように知ることができますか? ユーザーが外部キーを入力する必要がある場合、その理由は、ユーザー側からの操作のために多くのスペースを残しているためです (間違った ID 入力など...)。

これらの 2 つのテーブルを接続するにはどうすればよいですか? 接続するための認識可能な参照は何ですか? または、この例では、ユーザーは外部キーを入力する必要がありますか?

ORACLE データベースを使用しています。説明と例をいただければ幸いです。

4

3 に答える 3

3

「間違った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_idcity.id

insert into person (id, name, last_name, city_id)
values (2, 'Elvis', 'Presley', 4);

id...すると、親キー、つまりテーブル内の一致する値がcity存在しないというエラー (ORA-02291) が発生します。

外部キーの詳細については、データベース コンセプト ガイドを参照してください。

于 2013-06-16T21:35:45.477 に答える
1

Whis コードを使用すると、Person テーブルに制約を追加して、City テーブルの外部キーを持つことができます。

alter table PERSON
add constraint CONSTR_PERSON_CITY
foreign key (CITY_ID-FK)
references CITY (ID-PK);
于 2013-06-16T21:41:34.717 に答える
0

Person テーブル City_ID に City テーブルに存在しない値がある場合、制約を作成しようとするとエラーが発生することに注意してください。理由を理解するのにしばらく時間がかかりました。

于 2015-06-03T17:22:54.487 に答える