PostgreSQL Insert Record: вставьте строки в таблицу, чтобы убедиться, что набор столбцов содержит уникальное значение, которое должно существовать в ссылочной таблице.
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 программирования