123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- 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 $$;
|