-- Создание ENUM типов CREATE TYPE legal_form_enum AS ENUM ( 'ИП', 'ООО', 'ОАО', 'ПАО', 'смешанное' ); CREATE TYPE document_type_enum AS ENUM ( 'информационный', 'организационно-распорядительный', 'запросно-ответный', 'инициативный', 'другой' ); -- Таблица organization (организация) CREATE TABLE organization ( id SERIAL PRIMARY KEY, name VARCHAR(64) UNIQUE NOT NULL, legal_form legal_form_enum NOT NULL ); -- Таблица employee (сотрудники) CREATE TABLE employee ( id SERIAL PRIMARY KEY, name VARCHAR(64) NOT NULL, lastname VARCHAR(64) NOT NULL, patronymic VARCHAR(64), organization_id INTEGER NOT NULL REFERENCES organization(id) ON DELETE RESTRICT ); -- Таблица correspondence (корреспонденция) CREATE TABLE correspondence ( id SERIAL PRIMARY KEY, document_type document_type_enum NOT NULL, document_number VARCHAR(256) UNIQUE NOT NULL, receipt_date DATE NOT NULL DEFAULT CURRENT_DATE, execution_date DATE, -- Может быть NULL, если документ ещё не исполнен employee_id INTEGER NOT NULL REFERENCES employee(id) ON DELETE RESTRICT, -- Проверка что execution_date позже receipt_date или NULL CONSTRAINT check_execution_date CHECK ( execution_date IS NULL OR execution_date >= receipt_date ) );