|  | @@ -0,0 +1,208 @@
 | 
	
		
			
				|  |  | +do $$
 | 
	
		
			
				|  |  | +begin
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | +Скрипт создания информационной базы данных
 | 
	
		
			
				|  |  | +Согласно технического задания https://git.hostfl.ru/VolovikovAlex/Study2025
 | 
	
		
			
				|  |  | +Редакция 2025-02-12
 | 
	
		
			
				|  |  | +Edit by valex
 | 
	
		
			
				|  |  | +*/
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | + 1. Удаляем старые элементы
 | 
	
		
			
				|  |  | + ======================================
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +raise notice 'Запускаем создание новой структуры базы данных meteo'; 
 | 
	
		
			
				|  |  | +begin
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	-- Связи
 | 
	
		
			
				|  |  | +	alter table if exists public.measurment_input_params
 | 
	
		
			
				|  |  | +	drop constraint if exists measurment_type_id_fk;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	alter table if exists public.employees
 | 
	
		
			
				|  |  | +	drop constraint if exists military_rank_id_fk;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	alter table if exists public.measurment_baths
 | 
	
		
			
				|  |  | +	drop constraint if exists measurment_input_param_id_fk;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	alter table if exists public.measurment_baths
 | 
	
		
			
				|  |  | +	drop constraint if exists emploee_id_fk;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	-- Таблицы
 | 
	
		
			
				|  |  | +	drop table if exists public.measurment_input_params;
 | 
	
		
			
				|  |  | +	drop table if exists public.measurment_baths;
 | 
	
		
			
				|  |  | +	drop table if exists public.employees;
 | 
	
		
			
				|  |  | +	drop table if exists public.measurment_types;
 | 
	
		
			
				|  |  | +	drop table if exists public.military_ranks;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	-- Нумераторы
 | 
	
		
			
				|  |  | +	drop sequence if exists public.measurment_input_params_seq;
 | 
	
		
			
				|  |  | +	drop sequence if exists public.measurment_baths_seq;
 | 
	
		
			
				|  |  | +	drop sequence if exists public.employees_seq;
 | 
	
		
			
				|  |  | +	drop sequence if exists public.military_ranks_seq;
 | 
	
		
			
				|  |  | +	drop sequence if exists public.measurment_types_seq;
 | 
	
		
			
				|  |  | +end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +raise notice 'Удаление старых данных выполнено успешно';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | + 2. Добавляем структуры данных 
 | 
	
		
			
				|  |  | + ================================================
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +-- Справочник должностей
 | 
	
		
			
				|  |  | +create table military_ranks
 | 
	
		
			
				|  |  | +(
 | 
	
		
			
				|  |  | +	id integer primary key not null,
 | 
	
		
			
				|  |  | +	description character varying(255)
 | 
	
		
			
				|  |  | +);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +insert into military_ranks(id, description)
 | 
	
		
			
				|  |  | +values(1,'Рядовой'),(2,'Лейтенант');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +create sequence military_ranks_seq start 3;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +alter table military_ranks alter column id set default nextval('public.military_ranks_seq');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +-- Пользователя
 | 
	
		
			
				|  |  | +create table employees
 | 
	
		
			
				|  |  | +(
 | 
	
		
			
				|  |  | +    id integer primary key not null,
 | 
	
		
			
				|  |  | +	name text,
 | 
	
		
			
				|  |  | +	birthday timestamp ,
 | 
	
		
			
				|  |  | +	military_rank_id integer
 | 
	
		
			
				|  |  | +);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +insert into employees(id, name, birthday,military_rank_id )  
 | 
	
		
			
				|  |  | +values(1, 'Воловиков Александр Сергеевич','1978-06-24', 2);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +create sequence employees_seq start 2;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +alter table employees alter column id set default nextval('public.employees_seq');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +-- Устройства для измерения
 | 
	
		
			
				|  |  | +create table measurment_types
 | 
	
		
			
				|  |  | +(
 | 
	
		
			
				|  |  | +   id integer primary key not null,
 | 
	
		
			
				|  |  | +   short_name  character varying(50),
 | 
	
		
			
				|  |  | +   description text 
 | 
	
		
			
				|  |  | +);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +insert into measurment_types(id, short_name, description)
 | 
	
		
			
				|  |  | +values(1, 'ДМК', 'Десантный метео комплекс'),
 | 
	
		
			
				|  |  | +(2,'ВР','Ветровое ружье');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +create sequence measurment_types_seq start 3;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +alter table measurment_types alter column id set default nextval('public.measurment_types_seq');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +-- Таблица с параметрами
 | 
	
		
			
				|  |  | +create table measurment_input_params
 | 
	
		
			
				|  |  | +(
 | 
	
		
			
				|  |  | +    id integer primary key not null,
 | 
	
		
			
				|  |  | +	measurment_type_id integer not null,
 | 
	
		
			
				|  |  | +	height numeric(8,2) default 0,
 | 
	
		
			
				|  |  | +	temperature numeric(8,2) default 0,
 | 
	
		
			
				|  |  | +	pressure numeric(8,2) default 0,
 | 
	
		
			
				|  |  | +	wind_direction numeric(8,2) default 0,
 | 
	
		
			
				|  |  | +	wind_speed numeric(8,2) default 0
 | 
	
		
			
				|  |  | +);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +insert into measurment_input_params(id, measurment_type_id, height, temperature, pressure, wind_direction,wind_speed )
 | 
	
		
			
				|  |  | +values(1, 1, 100,12,34,0.2,45);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +create sequence measurment_input_params_seq start 2;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +alter table measurment_input_params alter column id set default nextval('public.measurment_input_params_seq');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +-- Таблица с историей
 | 
	
		
			
				|  |  | +create table measurment_baths
 | 
	
		
			
				|  |  | +(
 | 
	
		
			
				|  |  | +		id integer primary key not null,
 | 
	
		
			
				|  |  | +		emploee_id integer not null,
 | 
	
		
			
				|  |  | +		measurment_input_param_id integer not null,
 | 
	
		
			
				|  |  | +		started timestamp default now()
 | 
	
		
			
				|  |  | +);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +insert into measurment_baths(id, emploee_id, measurment_input_param_id)
 | 
	
		
			
				|  |  | +values(1, 1, 1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +create sequence measurment_baths_seq start 2;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +alter table measurment_baths alter column id set default nextval('public.measurment_baths_seq');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +raise notice 'Создание общих справочников и наполнение выполнено успешно'; 
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | + 3. Подготовка расчетных структур
 | 
	
		
			
				|  |  | + ==========================================
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +drop table if exists calc_temperatures_correction;
 | 
	
		
			
				|  |  | +create table calc_temperatures_correction
 | 
	
		
			
				|  |  | +(
 | 
	
		
			
				|  |  | +   temperature numeric(8,2) primary key,
 | 
	
		
			
				|  |  | +   correction numeric(8,2)
 | 
	
		
			
				|  |  | +);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +insert into public.calc_temperatures_correction(temperature, correction)
 | 
	
		
			
				|  |  | +Values(0, 0.5),(5, 0.5),(10, 1), (20,1), (25, 2), (30, 3.5), (40, 4.5);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +drop type  if exists interpolation_type;
 | 
	
		
			
				|  |  | +create type interpolation_type as
 | 
	
		
			
				|  |  | +(
 | 
	
		
			
				|  |  | +	x0 numeric(8,2),
 | 
	
		
			
				|  |  | +	x1 numeric(8,2),
 | 
	
		
			
				|  |  | +	y0 numeric(8,2),
 | 
	
		
			
				|  |  | +	y1 numeric(8,2)
 | 
	
		
			
				|  |  | +);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +raise notice 'Расчетные структуры сформированы';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | + 4. Создание связей
 | 
	
		
			
				|  |  | + ==========================================
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +begin 
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +	alter table public.measurment_baths
 | 
	
		
			
				|  |  | +	add constraint emploee_id_fk 
 | 
	
		
			
				|  |  | +	foreign key (emploee_id)
 | 
	
		
			
				|  |  | +	references public.employees (id);
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +	alter table public.measurment_baths
 | 
	
		
			
				|  |  | +	add constraint measurment_input_param_id_fk 
 | 
	
		
			
				|  |  | +	foreign key(measurment_input_param_id)
 | 
	
		
			
				|  |  | +	references public.measurment_input_params(id);
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +	alter table public.measurment_input_params
 | 
	
		
			
				|  |  | +	add constraint measurment_type_id_fk
 | 
	
		
			
				|  |  | +	foreign key(measurment_type_id)
 | 
	
		
			
				|  |  | +	references public.measurment_types (id);
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +	alter table public.employees
 | 
	
		
			
				|  |  | +	add constraint military_rank_id_fk
 | 
	
		
			
				|  |  | +	foreign key(military_rank_id)
 | 
	
		
			
				|  |  | +	references public.military_ranks (id);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +raise notice 'Связи сформированы';
 | 
	
		
			
				|  |  | +raise notice 'Структура сформирована успешно';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +end $$;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 |