Внешний ключ Postgresql

Что касается ограничений внешнего ключа, нам нужны две таблицы База данных

Внешний ключ — это один или несколько столбцов, значения которых зависят от первичного ключа. Это ограничение используется для объединения двух таблиц. В postgresql внешний ключ помогает создать связь между таблицами, делая одну таблицу родительской, а другую дочерней. Внешний ключ можно создать, используя:

  • СОЗДАТЬ запрос таблицы
  • UPDATE / ALTER запрос

Синтаксис

[CONSTRAINT name]  FOREIGN KEY(columns)
REFERENCES parent_table(columns)
[ON DELETE action]
[ON UPDATE action]

Справочная таблица — это родительская таблица. А столбец для внешнего ключа — это первичный ключ родителя.

Введение внешнего ключа в операторе CREATE

Что касается ограничений внешнего ключа, нам нужны две таблицы, чтобы проиллюстрировать концепцию. Начнем с определения таблицы «конструктор», а вторая — «категория». Обе таблицы создаются с помощью оператора create.

>> Create Table designer( designer_id INT GENERATED ALWAYS AS IDENTITY, designer_name VARCHAR(50) NOT NULLPRIMARY KEY(designer_id));

Что касается ограничений внешнего ключа, нам нужны две таблицы

В таблице «конструктор» в качестве первичного ключа устанавливается designer_id. Теперь создайте вторую таблицу.

>> create table category(category_id INT GENERATED ALWAYS AS IDENTITY, designer_id INT, category_id INT, category_name VARCHAR(200) NOT NULLPRIMARY KEY(category_id)CONSTRAINT fk_designer FOREIGN KEY(designer_id) REFERENCES designer(designer_id))<strong>;</strong>

В этой таблице category_id установлен как первичный ключ

В этой таблице category_id установлен как первичный ключ. Поскольку обе эти таблицы должны соединяться с ограничением внешнего ключа. Мы делаем «designer_id» внешним ключом в этой таблице. Справочная таблица упоминается в таблице, чтобы запрос можно было легко выполнить, выполнив поиск в таблице.

CONSTRAINT fk_designer
FOREIGN KEY(designer_id)
REFERENCES designer(designer_id));

Таблица конструктора — это таблица PARENT, а таблица категорий — таблица CHILD. Каждый дизайнер работает с нулем или более категориями платьев, и один или несколько дизайнеров рассматривают каждую категорию одежды.

ПРИМЕЧАНИЕ. Чтобы сделать внешний ключ идентификатора одной таблицы во второй таблице, важно сделать этот конкретный идентификатор ПЕРВИЧНЫМ КЛЮЧОМ в своей таблице. В противном случае он не будет формировать внешний ключ в другой таблице. Произойдет ошибка при создании внешнего ключа.

БЕЗДЕЙСТВИЕ

После создания таблицы мы используем для ввода значений в нее командой «вставить».

>> insert into designer(designer_name) VALUES (‘Ahmad shah’)(‘Sajjad hassan’);

После создания таблицы мы используем для ввода значений

Аналогично в случае второй таблицы введите значения.

>> insert into category(designer_id, category_name) VALUES (1, ‘frock’)(1, ‘frock’)(2, ‘suit’),(2, ‘suit-1);

В таблице «category» значения будут вставлены в два столбца

В таблице «category» значения будут вставлены в два столбца, включая category_name и designer_id. Мы добавили сюда тот же номер для идентификатора и такое же имя для category_name, чтобы выполнить условие. Теперь примените команду удаления, чтобы подтвердить тип внешнего ключа «бездействие». В этой команде мы предоставили идентификационный номер для удаления определенной строки из таблицы.

>> DELETE FROM designer WHERE designer_id = 1;

Этот запрос не будет выполнен успешно

Этот запрос не будет выполнен успешно. Он покажет сообщение об ошибке, как показано на снимке, как упомянуто выше. Эта ошибка возникает из-за «NO DELETE NO ACTION». Postgresql показывает нарушение ограничения, потому что designer_id = 1 используется для двух строк, которые в настоящее время присутствуют в таблице.

SET NULL как опция ON DELETE clause

Создайте таблицу с именем «employee» с emp_id в качестве ПЕРВИЧНОГО КЛЮЧА.

>> CREATE TABLE employee ( emo_id GENERATED ALWAYS AS IDENTITY, emp_name VARCHAR(50) NOT NULLPRIMARY KEY(emp_id) );

Когда мы выполняем запрос, отображается сообщение

Когда мы выполняем запрос, отображается сообщение, которое показывает, что наш запрос выполнен успешно. После создания таблицы сотрудников создайте ее дочернюю таблицу «info», используя «emp_id» в качестве внешнего ключа.

>> create table info (info_id INT GENERATED ALWAYS AS IDENTITY, info_id INT, emp_id INT, info_name VARCHAR(200) NOT NULLPRIMARY KEY(info_id)CONSTRAINT fk_employee FOREIGN KEY(emp_id) REFERENCES employee(emp_id) ON DELETE SET NULL);

Выполните запрос, и вы увидите, что таблица создана

Выполните запрос, и вы увидите, что таблица создана. Это то же самое, что и ранее использовавшийся оператор таблицы create. Здесь мы добавили недвижимость.

» НА УДАЛЕНИЕ УСТАНОВИТЬ NULL «. Это действие применяется в предложении ON DELETE. Теперь нам нужно заполнить таблицы значениями.

>> insert into employee (emp_name) Values (‘sophia smith’)( ‘rubi williams’)(‘victoria gomex’);

Это действие применяется в предложении ON DELETE

>> insert into info (emp_id, info_name) VALUES ( 1, ‘clerk’)(1, ‘manager’)(2, ‘manager’)(3, ‘clerk’);

Команда удаления состоит из предложения «where»

Команда удаления состоит из предложения «where» для определения идентификатора, который будет удален из строки в таблице employee.

>> DELETE FROM employee WHERE emp_id =2;

Соответствующие данные будут удалены при выполнении запроса

Соответствующие данные будут удалены при выполнении запроса. Мы увидим результирующую таблицу, оставшуюся после этого запроса.

>> select * from info;

Строки, имеющие конкретную ссылку в дочерней таблице

Строки, имеющие конкретную ссылку в дочерней таблице ’info’, устанавливаются в NULL, потому что мы использовали действие ON DELETE SET NULL в команде при создании таблицы.

Использование команды ALTER table

В предыдущих примерах мы видели, как применять ограничения во время создания таблиц. Что, если вы создали таблицы с ограничениями FK (внешний ключ), а затем хотите добавить ограничения? Вот решение этого вопроса. Сначала мы создадим две таблицы. Но во время создания таблицы нет необходимости идентифицировать внешний ключ во второй таблице, чтобы сделать ее дочерней.

Но во время создания таблицы нет необходимости идентифицировать

>> create table nurse ( nurse_id int NOT NULL, nurse_name VARCHAR(55) NOT NULL, nurse_location VARCHAR (55) NOT NULLPRIMARY KEY (nurse_ID) );

nurse_id int NOT NULL, nurse_name VARCHAR

> create table clinic clinic_id INT, nurse_id INT, clinic_details varchar(50) NOT NULL, clinic_type varchar(50) Not null);

Эта таблица не содержит ограничений внешнего ключа, ссылок и т.д. После вставки мы обновим таблицу, разрешив для нее ограничения.

>> ALTER TABLE clinic ADD CONSTRAINT fk_nurse FOREIGN KEY (clinic_Id) REFERENCES nurse (nurse_ID) ON DELETE CASCADE ON UPDATE RESTRICT;

Эта таблица не содержит ограничений внешнего ключа, ссылок

После изменения таблица будет иметь внешний ключ.

Удалите ограничения из таблицы

Для этого мы используем команду ALTER. Эта команда удалит только ограничения из таблицы.

Это необходимо для удаления всей таблицы. Но невозможно удалить или отбросить такую ​​таблицу, которая имеет соединение с другой таблицей в виде внешнего ключа. Итак, во-первых, мы удаляем fk_constraint первой созданной таблицы из второй. Рассмотрим таблицу «конструктор» и дочернюю таблицу «категория».

>> Alter table category DROP CONSTRAINT fk_designer;

Теперь примените команду перетаскивания

Увидев, что запрос выполняется. Теперь примените команду перетаскивания.

>> Drop table if exists designer;

Диаграмма представляет внешние ключи в таблицах

Диаграмма представляет внешние ключи в таблицах. Из представления ERD мы сделали щелчок, чтобы прояснить двусмысленность в отношении ограничений изображения; вы можете увидеть объединения в таблицах, которые мы создали в этой статье.

Заключение

«Postgresql внешнего ключа» показывает связь между двумя таблицами. Получить запись из одной таблицы, вызвав изменение в другой, можно только с помощью этого ограничения. Отношения родитель-потомок встроены в разделение ключей. Этот ключ можно ввести при создании или обновлении таблицы. Оба метода описаны в этом руководстве. Эти примеры описывают важность ключей во всех таблицах, используемых в любой базе данных.

Читайте также:  5 лучших практик для написания соединений SQL
Оцените статью
bestprogrammer.ru
Добавить комментарий