В PostgreSQL внешний ключ используется для создания связей между двумя таблицами. Он гарантирует целостность данных, позволяя таблице ссылаться на записи в другой таблице.
Для создания внешнего ключа необходимо выполнить несколько шагов.
1. Создание таблицы, на которую будет ссылаться внешний ключ.
Для примера, допустим, что у нас есть таблица "orders" с полями "order_id" (первичный ключ) и "customer_id".
CREATE TABLE orders ( order_id SERIAL PRIMARY KEY, customer_id INTEGER );
2. Создание второй таблицы, которая будет содержать внешний ключ.
Для примера, давайте создадим таблицу "customers" с полем "customer_id" как первичным ключом и полем "name".
CREATE TABLE customers ( customer_id SERIAL PRIMARY KEY, name VARCHAR(100) );
3. Добавление внешнего ключа во вторую таблицу.
Внешний ключ может быть добавлен при создании таблицы или позже с использованием оператора ALTER TABLE.
a) При создании таблицы:
CREATE TABLE customers ( customer_id SERIAL PRIMARY KEY, name VARCHAR(100), FOREIGN KEY (customer_id) REFERENCES orders (customer_id) );
b) После создания таблицы:
ALTER TABLE customers ADD CONSTRAINT fk_customer_orders FOREIGN KEY (customer_id) REFERENCES orders (customer_id);
4. Теперь, если вы попытаетесь добавить запись в таблицу "customers" со значением "customer_id", которого нет в таблице "orders", будет сгенерировано сообщение об ошибке.
Например:
INSERT INTO customers (customer_id, name) VALUES (1, 'John'); -- ERROR: insert or update on table "customers" violates foreign key constraint "fk_customer_orders" -- Детали: Ключ (customer_id)=(1) отсутствует в таблице "orders".
5. Также можно добавить опцию ON DELETE и ON UPDATE к внешнему ключу, чтобы определить, что произойдет с записями в таблице "customers", когда связанная запись в таблице "orders" будет обновлена или удалена. Значениями для этих опций могут быть RESTRICT, CASCADE, SET NULL или SET DEFAULT.
Например, для добавления ON DELETE CASCADE:
ALTER TABLE customers ADD CONSTRAINT fk_customer_orders FOREIGN KEY (customer_id) REFERENCES orders (customer_id) ON DELETE CASCADE;
Это основные шаги по созданию внешнего ключа в PostgreSQL. Внешние ключи очень полезны для поддержания целостности данных в базе данных и обеспечения соответствия связанных записей в разных таблицах.