PostgreSQL Create Table: создайте таблицу, чтобы установить значения внешнего ключа в дочерней таблице в NULL, когда запись в родительской таблице удалена и обновлена
18. Напишите оператор SQL для создания таблицы сотрудников, включая столбцы employee_id, first_name, last_name, job_id, salary, и убедитесь, что столбец employee_id не содержит повторяющихся значений во время вставки, а столбец внешнего ключа job_id, на который есть ссылки по столбцу job_id таблицы заданий, может содержать только те значения, которые существуют в таблице заданий. Особенность оператора заключается в том, что действие ON DELETE SET NULL установит значения столбца внешнего ключа в дочерней таблице (employee) в NULL, когда запись в родительской таблице (jobs) будет удалена, с условием, что столбец внешнего ключа в дочерней таблице должны принимать значения NULL, а действие ON UPDATE SET NULL сбрасывает значения в строках в дочерней таблице (employee) в значения NULL при обновлении строк в родительской таблице (jobs).
Предположим, что ниже приведена структура двух табличных заданий.
CREATE TABLE IF NOT EXISTS jobs (
JOB_ID INTEGER NOT NULL UNIQUE PRIMARY KEY,
JOB_TITLE varchar(35) NOT NULL DEFAULT ' ',
MIN_SALARY decimal(6,0) DEFAULT 8000,
MAX_SALARY decimal(6,0) DEFAULT NULL
);
Indexes:
"jobs_pkey" PRIMARY KEY, btree (job_id)
Пример решения:
Код:
CREATE TABLE employees (
EMPLOYEE_ID decimal(6,0) NOT NULL PRIMARY KEY,
FIRST_NAME varchar(20) DEFAULT NULL,
LAST_NAME varchar(25) NOT NULL,
JOB_ID INTEGER,
SALARY decimal(8,2) DEFAULT NULL,
FOREIGN KEY(JOB_ID)
REFERENCES jobs(JOB_ID)
ON DELETE SET NULL
ON UPDATE SET NULL
);
Выход:
postgres = # CREATE TABLE сотрудников ( postgres (# EMPLOYEE_ID decimal (6,0) NOT NULL ПЕРВИЧНЫЙ КЛЮЧ, postgres (# FIRST_NAME varchar (20) DEFAULT NULL, postgres (# LAST_NAME varchar (25) NOT NULL, postgres (# JOB_ID INTEGER, SALARY decimal (8,2) DEFAULT NULL, postgres (# FOREIGN KEY (JOB_ID) postgres (# ССЫЛКИ вакансии (JOB_ID) postgres (# ON УДАЛИТЬ SET NULL НА ОБНОВЛЕНИИ SET NULL postgres (#); СОЗДАТЬ СТОЛ
Вот команда, чтобы увидеть структуру созданной таблицы:
postgres=# \d employees
Table "public.employees"
Column | Type | Modifiers
-------------+-----------------------+---------------------------------
employee_id | numeric(6,0) | not null
first_name | character varying(20) | default NULL::character varying
last_name | character varying(25) | not null
job_id | integer |
salary | numeric(8,2) | default NULL::numeric
Indexes:
"employees_pkey" PRIMARY KEY, btree (employee_id)
Foreign-key constraints:
"employees_job_id_fkey" FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON UPDATE SET NULL ON DELETE SET NULL
Есть другой способ решить это решение? Внесите свой код (и комментарии) через Disqus.
Предыдущий: Напишите оператор SQL для создания таблицы сотрудников, включая столбцы employee_id, first_name, last_name, job_id, salary, и убедитесь, что столбец employee_id не содержит повторяющихся значений во время вставки, и столбец внешнего ключа job_id, на который есть ссылки по столбцу job_id таблицы заданий, может содержать только те значения, которые существуют в таблице заданий. Особенность этого утверждения заключается в том, что ON DELETE CASCADE позволяет разрешить удаление записей в таблице сотрудников (дочерних), которая ссылается на запись в таблице заданий (родительских), когда запись в родительской таблице удалена и ON UPDATE. Действия ОГРАНИЧЕНИЯ отклоняют любые обновления.
Далее: напишите оператор SQL для создания таблицы сотрудников, включая столбцы employee_id, first_name, last_name, job_id, salary, и убедитесь, что столбец employee_id не содержит повторяющихся значений во время вставки, а столбец внешнего ключа job_id, на который есть ссылки по столбцу job_id таблицы заданий, может содержать только те значения, которые существуют в таблице заданий. Особенность этого утверждения заключается в том, что действия ON DELETE NO ACTION и ON UPDATE NO ACTION будут отклонять удаление и любые обновления.
Каков уровень сложности этого упражнения?
Новый контент: Composer: менеджер зависимостей для PHP , R программирования