кодесурса

PostgreSQL Insert Record: вставьте строки в таблицу, чтобы убедиться, что набор столбцов содержит уникальное значение, которое должно существовать в ссылочной таблице.

script1adsense2code
script1adsense3code

12. Напишите оператор SQL для вставки строк в таблицы сотрудников, в которых набор столбцов департаментов_данных и менеджеров_данных содержит уникальное значение и это объединенное значение должно существовать в отделах таблиц.

Пример решения:

Код:

Вот код для создания примера таблицы отделов:

CREATE TABLE departments ( 
DEPARTMENT_ID integer NOT NULL UNIQUE, 
DEPARTMENT_NAME varchar(30) NOT NULL, 
MANAGER_ID integer DEFAULT NULL, 
LOCATION_ID integer DEFAULT NULL, 
PRIMARY KEY (DEPARTMENT_ID,MANAGER_ID) 
);

Теперь введите три строки в таблицу отделов:

INSERT INTO departments VALUES(60,'SALES',201,89);
INSERT INTO departments VALUES(61,'ACCOUNTS',201,89);
INSERT INTO departments VALUES(80,'FINANCE',211,90);

Вот команда, чтобы увидеть список вставленных строк:

 postgres = # SELECT * ИЗ отделов;
 отдел_ид | название отдела | manager_id | LOCATION_ID
--------------- + ----------------- + ------------ + --- ----------
            60 | ПРОДАЖА | 201 | 89
            61 | СЧЕТА | 201 | 89
            80 | ФИНАНСЫ | 211 | 90
(3 ряда)

Вот еще один стол сотрудников:

CREATE TABLE employees ( 
EMPLOYEE_ID integer NOT NULL PRIMARY KEY, 
FIRST_NAME varchar(20) DEFAULT NULL, 
LAST_NAME varchar(25) NOT NULL, 
JOB_ID varchar(10) NOT NULL, 
SALARY decimal(8,2) DEFAULT NULL, 
MANAGER_ID integer DEFAULT NULL, 
DEPARTMENT_ID integer DEFAULT NULL, 
FOREIGN KEY(DEPARTMENT_ID,MANAGER_ID) 
REFERENCES  departments(DEPARTMENT_ID,MANAGER_ID)
);

Теперь вставьте строки в таблицу сотрудников.

INSERT INTO employees VALUES(510,'Alex','Hanes','CLERK',18000,201,60);
INSERT INTO employees VALUES(511,'Kim','Leon','CLERK',18000,211,80);

Вот команда, чтобы увидеть список вставленных строк:

 postgres = # SELECT * FROM сотрудников;
 employee_id | имя_файла | фамилия | job_id | зарплата | manager_id | department_id
------------- + ------------ + ----------- + -------- + - -------- + ------------ + ---------------
         510 | Алекс | Ханес | КЛЕРК | 18000,00 | 201 | 60
         511 | Ким | Леон | КЛЕРК | 18000,00 | 211 | 80
(2 ряда)

Значение по отношению к комбинации Department_id и manager_id (60,201) и (80,211) являются уникальными в таблице Departmentis (родительской), поэтому проблем с вставкой строк в сотрудников дочерней таблицы не возникает.

Теперь вставьте еще одну строку в таблицу сотрудников:


INSERT INTO employees VALUES(512,'Kim','Leon','CLERK',18000,80,211);

Теперь посмотрим на вывод:

 postgres = # INSERT INTO VALUES (512, «Kim», «Leon», «CLERK», 18000, 8021);
ОШИБКА: вставка или обновление таблицы «сотрудники» нарушает ограничение внешнего ключа «employee_department_id_fkey»
ДЕТАЛИ: Ключ (Department_id, manager_id) = (211, 80) отсутствует в таблице «отделы».

Здесь, в приведенном выше примере, значение для комбинации Department_id и manager_id (211,80) не совпадает с одной и той же комбинацией в таблице отделов (родительской таблицы), и поэтому сотрудники дочерней таблицы не могут содержать комбинацию значений, включая Department_id и manager_id. как указано. Здесь отношение первичный ключ - внешний ключ нарушается и показывает вышеуказанное сообщение.

Есть другой способ решить это решение? Внесите свой код (и комментарии) через Disqus.

Предыдущий: Написать оператор SQL для вставки строк в таблицу job_history, в которой один столбец job_id содержит те значения, которые существуют в столбце job_id таблицы заданий.
Далее: Напишите оператор SQL для вставки строк в таблицу сотрудников, в которой набор столбцов департаментов_данных и заданий_данных содержит значения, которые должны существовать в таблицах отделов и заданий.

Каков уровень сложности этого упражнения?

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code