В базах данных PostgreSQL FOREIGN KEY (внешний ключ) — это механизм, который позволяет создавать связи между таблицами. Он обеспечивает целостность данных и облегчает выполнение операций JOIN. Если вы новичок в PostgreSQL и хотите научиться создавать FOREIGN KEY, этот пошаговый гид поможет вам разобраться в этом процессе.
Первым шагом к созданию FOREIGN KEY в PostgreSQL является наличие двух таблиц, между которыми вы хотите создать связь. Обычно одна из таблиц содержит внешний ключ, который ссылается на первичный ключ(или уникальный индекс) другой таблицы. К примеру, у вас может быть таблица «Заказы» с полем «Клиент_ID», которое ссылается на поле «ID» в таблице «Клиенты».
Чтобы создать FOREIGN KEY, вы можете использовать оператор ALTER TABLE с ключевым словом ADD CONSTRAINT. Здесь важно указать название ограничения, таблицу, на которую ссылается ваш FOREIGN KEY, и соответствующие поля. Например, чтобы создать FOREIGN KEY «FK_Заказы_Клиент_ID» в таблице «Заказы», которое ссылается на поле «ID» в таблице «Клиенты», вы можете использовать следующий запрос:
- Что такое FOREIGN KEY в PostgreSQL
- Шаг 1: Создание таблицы родительского ключа
- Создание таблицы в PostgreSQL
- Шаг 2: Определите таблицу родительского ключа
- Создание FOREIGN KEY ограничения
- Шаг 3: Создание FOREIGN KEY
- Пример использования FOREIGN KEY
- Шаг 4: Создание ключа FOREIGN KEY
- Изменение или удаление FOREIGN KEY
Что такое FOREIGN KEY в PostgreSQL
Внешний ключ устанавливается между столбцами двух таблиц. Он определяет связь между этими столбцами, где один столбец — столбец «родительской» таблицы (ссылка) и другой столбец — «дочерней» таблицы (внешний ключ).
FOREIGN KEY обеспечивает целостность данных, позволяя проверять ссылочные значения и автоматически выполнять действия при обновлении или удалении этих значений.
Основное предназначение внешнего ключа в PostgreSQL — обеспечение связности данных между различными таблицами и поддержка условной целостности. Он позволяет контролировать ссылочные значения между таблицами и предотвращать ситуации, когда ссылка указывает на несуществующую запись в другой таблице.
Шаг 1: Создание таблицы родительского ключа
Перед тем, как создавать FOREIGN KEY, необходимо создать таблицу, которая будет являться родительской для FOREIGN KEY. Таблица родительского ключа должна иметь столбец, значение которого будет использоваться как основа для FOREIGN KEY.
Пример создания таблицы родительского ключа:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL UNIQUE
);
В данном примере мы создали таблицу «users» с полями «id», «name» и «email».
Столбец «id» имеет тип SERIAL и является первичным ключом.
Столбец «name» имеет тип VARCHAR(50) и не может быть пустым.
Столбец «email» имеет тип VARCHAR(50) и уникален (UNIQUE).
Здесь столбец «id» является основой для FOREIGN KEY в дочерней таблице, которую мы создадим на следующем шаге.
Создание таблицы в PostgreSQL
Чтобы создать таблицу в PostgreSQL, необходимо выполнить следующие шаги:
- Открыть командную строку или клиентское приложение, подключенное к базе данных PostgreSQL.
- Введите команду
CREATE TABLE
за которой следует имя таблицы в виде идентификатора. - Укажите столбцы таблицы и их типы данных используя синтаксис
имя_столбца тип_данных
. Можно указывать несколько столбцов, разделяя их запятой. - Для каждого столбца можно указать ограничения с помощью ключевых слов
PRIMARY KEY
,UNIQUE
,NOT NULL
и других. - После указания столбцов и ограничений, закончите команду точкой с запятой.
Пример создания таблицы «users» с двумя столбцами:
CREATE TABLE users( id serial PRIMARY KEY, name varchar(50) NOT NULL );
В данном примере таблица «users» содержит два столбца — «id» и «name». Столбец «id» имеет тип данных serial
и является первичным ключом. Столбец «name» имеет тип данных varchar(50)
и не может содержать пустые значения.
После выполнения команды создания таблицы, новая таблица будет доступна для вставки, обновления или удаления данных.
Шаг 2: Определите таблицу родительского ключа
Прежде чем создать внешний ключ, необходимо определить таблицу и столбец родительского ключа, на которые будет ссылаться внешний ключ. Родительский ключ должен быть уникальным и иметь значения, на которые будут ссылаться другие строки.
В примере для создания таблицы родительского ключа мы будем использовать следующий код:
CREATE TABLE parent (
parent_id SERIAL PRIMARY KEY,
parent_name VARCHAR(50),
parent_value INT UNIQUE
);
В этом примере мы создаем таблицу с именем «parent», у которой есть три столбца. Первый столбец «parent_id» является SERIAL PRIMARY KEY, что означает, что он будет автоматически увеличиваться с каждой новой записью и будет использоваться в качестве первичного ключа таблицы. Второй столбец «parent_name» имеет тип VARCHAR(50) и предназначен для хранения имени родителя. Третий столбец «parent_value» имеет тип INT и уникален для каждой записи в таблице.
Теперь у нас есть таблица родительского ключа, на которую мы сможем ссылаться при создании внешнего ключа.
Создание FOREIGN KEY ограничения
Ограничение FOREIGN KEY в PostgreSQL используется для установления связи между двумя таблицами на основе значения столбца. Это позволяет обеспечить целостность данных и поддержку связей между таблицами.
Чтобы создать FOREIGN KEY ограничение, необходимо выполнить следующие шаги:
- Определите столбец, который будет использоваться для связи во внешней таблице.
- Укажите столбец, который будет использоваться в качестве ключа внешней таблицы.
- Установите ограничение FOREIGN KEY с использованием команды
ALTER TABLE
.
Пример создания FOREIGN KEY ограничения:
ALTER TABLE orders
ADD CONSTRAINT fk_customer
FOREIGN KEY (customer_id)
REFERENCES customers(id);
В этом примере мы создаем FOREIGN KEY ограничение с именем «fk_customer» для таблицы «orders». Ограничение связывает столбец «customer_id» в таблице «orders» с ключевым полем «id» в таблице «customers».
После создания FOREIGN KEY ограничения, PostgreSQL будет автоматически проверять целостность данных при добавлении, обновлении или удалении строк в связанной таблице. Если значение столбца не соответствует значениям в ключевом поле, будут выданы ошибки.
Создание FOREIGN KEY ограничения является важным шагом при проектировании базы данных, и позволяет обеспечить корректные взаимосвязи между таблицами. Это помогает предотвратить ошибки, связанные с целостностью данных и обеспечивает правильное функционирование системы.
Шаг 3: Создание FOREIGN KEY
После успешного создания родительской таблицы и колонки, ссылка на которую будет использоваться в качестве FOREIGN KEY, вы можете приступить к созданию самого FOREIGN KEY.
Чтобы создать FOREIGN KEY, необходимо выполнить следующую команду:
ALTER TABLE child_table ADD CONSTRAINT constraint_name FOREIGN KEY (referencing_column) REFERENCES parent_table (referenced_column);
Где:
- child_table — это название таблицы, в которой будет создан FOREIGN KEY;
- constraint_name — это название ограничения FOREIGN KEY, которое нужно задать (можно указать любое уникальное имя);
- referencing_column — это название колонки в таблице, которая будет ссылаться на родительскую таблицу;
- parent_table — это название родительской таблицы, на которую будет ссылаться FOREIGN KEY;
- referenced_column — это название колонки в родительской таблице, на которую будет ссылаться FOREIGN KEY.
Теперь давайте рассмотрим пример:
ALTER TABLE orders ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers (id);
В этом примере мы добавляем FOREIGN KEY с именем «fk_customer» в таблицу «orders». FOREIGN KEY ссылается на колонку «customer_id» в таблице «orders» и связан с колонкой «id» в таблице «customers».
Операция создания FOREIGN KEY должна завершиться без ошибок, и после этого вы сможете использовать FOREIGN KEY для устанавливания связей между таблицами.
Пример использования FOREIGN KEY
Рассмотрим простой пример, чтобы лучше понять, как использовать FOREIGN KEY в PostgreSQL.
Предположим, у нас есть две таблицы: «orders» и «customers». У каждого заказа есть свой идентификатор (order_id) и идентификатор покупателя (customer_id). Чтобы установить связь между этими таблицами, мы можем использовать FOREIGN KEY.
Сначала создадим таблицу «customers» с помощью следующего SQL-запроса:
CREATE TABLE customers (
customer_id SERIAL PRIMARY KEY,
customer_name VARCHAR(255) NOT NULL,
customer_email VARCHAR(255) NOT NULL UNIQUE
);
Далее создадим таблицу «orders». В этой таблице мы будем использовать FOREIGN KEY для связи заказов с покупателями:
CREATE TABLE orders (
order_id SERIAL PRIMARY KEY,
order_name VARCHAR(255) NOT NULL,
customer_id INTEGER NOT NULL REFERENCES customers (customer_id)
);
В SQL-запросе выше мы указываем, что поле «customer_id» в таблице «orders» является FOREIGN KEY, который ссылается на поле «customer_id» в таблице «customers». Таким образом, мы устанавливаем связь между этими двумя таблицами.
Теперь, при вставке данных в таблицу «orders», мы должны убедиться, что идентификатор покупателя (customer_id) существует в таблице «customers». Если он не существует, PostgreSQL автоматически выбросит ошибку.
Вот пример SQL-запроса для вставки данных в таблицу «orders»:
INSERT INTO orders (order_name, customer_id)
VALUES ('Заказ 1', 1);
В этом примере мы вставляем новую запись в таблицу «orders» с именем заказа «Заказ 1» и идентификатором покупателя 1. Предполагается, что покупатель с идентификатором 1 уже существует в таблице «customers». Если этого покупателя не существует, PostgreSQL вернет ошибку FOREIGN KEY violation.
Таким образом, использование FOREIGN KEY позволяет нам создавать связи и обеспечивать целостность данных в наших таблицах.
Шаг 4: Создание ключа FOREIGN KEY
Теперь, когда мы создали наши таблицы, мы можем создать ключ FOREIGN KEY для связи между ними.
Синтаксис для создания FOREIGN KEY выглядит следующим образом:
Оператор | Описание |
---|---|
ALTER TABLE | Ключевое слово, используемое для изменения существующей таблицы |
ADD CONSTRAINT | Ключевое слово, используемое для добавления ограничения |
FOREIGN KEY | Ключевое слово, указывающее, что ограничение является FOREIGN KEY |
(column1, column2, ...) | Список столбцов, для которых мы хотим создать FOREIGN KEY |
REFERENCES | Ключевое слово, указывающее на таблицу и столбец, на который мы хотим ссылаться |
(ref_column1, ref_column2, ...) | Столбцы в таблице, на которые мы хотим ссылаться |
Вот пример того, как мы можем создать FOREIGN KEY между нашими таблицами «orders» и «customers»:
ALTER TABLE orders
ADD CONSTRAINT fk_customer
FOREIGN KEY (customer_id)
REFERENCES customers (id);
В этом примере мы создаем FOREIGN KEY для столбца «customer_id» в таблице «orders», который ссылается на столбец «id» в таблице «customers».
После выполнения этого запроса у нас будет создан ключ FOREIGN KEY между нашими таблицами, и PostgreSQL будет проверять, чтобы значения в столбце «customer_id» в таблице «orders» существовали в столбце «id» в таблице «customers». Если такого значения не существует в таблице «customers», PostgreSQL не позволит нам вставить запись в таблицу «orders».
Таким образом, мы успешно создали FOREIGN KEY в PostgreSQL для связи между двумя таблицами. Это помогает обеспечить целостность данных и упрощает выполнение операций JOIN и других запросов, которые основаны на связи между таблицами.
Изменение или удаление FOREIGN KEY
Чтобы изменить FOREIGN KEY в таблице, вы должны выполнить следующие шаги:
- Удалите существующий FOREIGN KEY с помощью команды
ALTER TABLE
и ключевого словаDROP CONSTRAINT
. - Создайте новый FOREIGN KEY с помощью команды
ALTER TABLE
и ключевого словаADD CONSTRAINT
. Укажите новое имя CONSTRAINT, имя таблицы, которая будет ссылаться на внешний ключ, и имя столбца, связанного с внешним ключом.
Пример кода для удаления и создания нового FOREIGN KEY:
ALTER TABLE имя_таблицы
DROP CONSTRAINT имя_CONSTRAINT;
ALTER TABLE имя_таблицы
ADD CONSTRAINT имя_CONSTRAINT
FOREIGN KEY (имя_столбца)
REFERENCES имя_связанной_таблицы (имя_столбца);
Чтобы удалить FOREIGN KEY полностью, выполните следующие шаги:
- Удалите FOREIGN KEY с помощью команды
ALTER TABLE
и ключевого словаDROP CONSTRAINT
.
Пример кода для удаления FOREIGN KEY:
ALTER TABLE имя_таблицы
DROP CONSTRAINT имя_CONSTRAINT;