Как сделать внешний ключ?

В 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. Внешние ключи очень полезны для поддержания целостности данных в базе данных и обеспечения соответствия связанных записей в разных таблицах.