04|Oracle の学習 (外部キー制約)

注: 以下に表示される制約の追加は、制約を追加するように変更する必要があります。 を追加する必要はありません。

1. 外部キー制約の概要

1.1 外部キー制約とは:

ここに画像の説明を挿入
以下の設計に従って、元のテーブルに「クラス番号」、「クラス名」、「クラスの先生」、「クラスの説明」の列名を直接追加するとどうなるでしょうか。
ここに画像の説明を挿入

  • 上で黄色で描いた内容の一部は同じである(つまり、内容が繰り返し格納されている)ことがわかります。データ量が1億を超えると、この繰り返しのデータが複数回保存されることになり、これを「データの冗長性」とも呼びます。
  • 上記の「データの冗長性」は深刻な問題を引き起こします。クラス C01 の校長である王氏が李氏に置き換えられた場合、1 億件を超えるデータのうち、クラス C01 の教師全員を李氏に置き換えなければなりません。李氏:金額が非常に大きいので、操作ミスも起こりやすいです。

よく使う操作:「クラス番号」「クラス名」「クラスの先生」「クラスの説明」を取り出し、別のクラス情報テーブルを作成し、生徒テーブルに「クラス番号」をバインドします
ここに画像の説明を挿入
。 2 つのテーブルがリレーションシップを形成します。
ここに画像の説明を挿入

1.2 概要:

  • 外部キー制約: 外部キー フィールドの値は、他のデータ テーブルの関連フィールドから取得する必要があります。
    ここに画像の説明を挿入

2. 外部キー制約を追加する

2.1 テーブル作成時に追加する

  • カスケード削除: 以下に示すように、主キー C01 が削除されると、C01 を使用している Zhang San と Wang Wu も削除されます。
    ここに画像の説明を挿入
2.1.1 ケース
  • クラス情報テーブルを作成します: クラス番号、クラス名、クラス教師、クラスの説明
create table tb_classes(
    class_id char(3) not null,
    class_name varchar(40) not null,
    class_leader varchar(10) not null,
    class_desc varchar(200),
    primary key(class_id)
);
  • 学生情報フォームを作成します: 学生番号、名前、性別、年齢、電話番号、番号
create table tb_students(
    stu_num char(5) not null,
    stu_name varchar(10) not null,
    stu_sex char(1) not null,
    stu_age number(2) not null,
    stu_tel char(11) not null,
    stu_cid char(3) not null,
    primary key(stu_num),
    constraint fk_students_class foreign key(stu_cid)
    references tb_classes(class_id) on delete cascade
);
  • 最終的な効果を確認できます。
    ここに画像の説明を挿入

2.2 テーブルを作成した後、追加します

注: 以前に相互依存する tb_classes テーブルと tb_students テーブルを作成した場合。次に、最初に外部キーの tb_students を削除し、次に主キーの tb_classes を削除します。(最初にスレーブを削除し、次にマスターを削除します)

drop table tb_students;
drop table tb_classes;

ここに画像の説明を挿入

2.2.1 ケース
  • クラス情報テーブルを作成します: クラス番号、クラス名、クラス教師、クラスの説明
create table tb_classes(
    class_id char(3) not null,
    class_name varchar(40) not null,
    class_leader varchar(10) not null,
    class_desc varchar(200),
    primary key(class_id)
);
  • 学生テーブルを作成します (今回は作成時に外部キー制約を設定しません): 学生番号、名前、性別、年齢、電話番号、番号
create table tb_students(
    stu_num char(5) not null,
    stu_name varchar(10) not null,
    stu_sex char(1) not null,
    stu_age number(2) not null,
    stu_tel char(11) not null,
    stu_cid char(3) not null,
    primary key(stu_num)
);
  • 次に、学生情報テーブル tb_students を変更し、外部キーを追加します。
alter table tb_students 
add constraint fk_student_class foreign key(stu_cid)
references tb_classes(class_id) on delete cascade;

3. 外部キー制約を削除する

ここに画像の説明を挿入

  • 上記の tb_student の制約を削除します。
alter table tb_students
drop constraint fk_student_class;

おすすめ

転載: blog.csdn.net/qq_41714549/article/details/132056405