В этом учебном материале вы узнаете, как использовать в Oracle/PLSQL Foreign Keys (внешний ключи) с синтаксисом и примерами.
Что такое Foreign Keys в Oracle?
Foreign Keys является способом обеспечить целостность данных в вашей базе данных Oracle. Внешний ключ означает, что значения в одной таблице должны также появиться в другой таблице.
Ссылающаяся таблица называется parent table (родительской таблицей), а таблица с foreign key (внешним ключом) называется child table (дочерней таблицей). Foreign key в дочерней таблице, как правило, ссылаются на primary key (первичный ключ) в родительской таблице.
Foreign key может быть определен либо в операторе CREATE TABLE или в операторе ALTER TABLE.
Использование CREATE TABLE
Синтаксис
Синтаксис для создания внешнего ключа с помощью оператора CREATE TABLE:
(
column1 datatype null/not null,
column2 datatype null/not null,
...
CONSTRAINT fk_column
FOREIGN KEY (column1, column2, ... column_n)
REFERENCES parent_table (column1, column2, ... column_n)
);
Пример
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
CREATE TABLE supplier ( supplier_id numeric(10) not null, supplier_name varchar2(50) not null, contact_name varchar2(50), CONSTRAINT supplier_pk PRIMARY KEY (supplier_id) ); CREATE TABLE products ( product_id numeric(10) not null, supplier_id numeric(10) not null, CONSTRAINT fk_supplier FOREIGN KEY (supplier_id) REFERENCES supplier(supplier_id) ); |
В этом примере мы создали primary key таблицы supplier под названием supplier_pk. Она состоит только из одного поля - supplier_id. Затем мы создали foreign key с именем fk_supplier в таблице products, который ссылается на таблицу supplier на основании поля supplier_id.
Мы могли бы также создать foreign key с более чем одним полем, как в примере ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
CREATE TABLE supplier ( supplier_id numeric(10) not null, supplier_name varchar2(50) not null, contact_name varchar2(50), CONSTRAINT supplier_pk PRIMARY KEY (supplier_id, supplier_name) ); CREATE TABLE products ( product_id numeric(10) not null, supplier_id numeric(10) not null, supplier_name varchar2(50) not null, CONSTRAINT fk_supplier_comp FOREIGN KEY (supplier_id, supplier_name) REFERENCES supplier(supplier_id, supplier_name) ); |
В этом примере, наш foreign key называется fk_foreign_comp ссылается на таблицу supplier на основании двух полей - supplier_id и supplier_name.
Использование ALTER TABLE
Синтаксис
Синтаксис для создания внешнего ключа в операторе ALTER TABLE:
ADD CONSTRAINT constraint_name
FOREIGN KEY (column1, column2, ... column_n)
REFERENCES parent_table (column1, column2, ... column_n);
Пример
1 2 3 4 |
ALTER TABLE products ADD CONSTRAINT fk_supplier FOREIGN KEY (supplier_id) REFERENCES supplier(supplier_id); |
В этом примере мы создали foreign key с именем fk_supplier, который ссылается на таблицу supplier, на основании поля supplier_id.
Еще один пример создания foreign key с более чем одним полем в примере ниже:
1 2 3 4 |
ALTER TABLE products ADD CONSTRAINT fk_supplier FOREIGN KEY (supplier_id, supplier_name) REFERENCES supplier(supplier_id, supplier_name); |