فهرست منبع

Merge branch 'homework/1' of pivozavri/PostgresStudy2025 into master

Всеволод Левитан 4 ماه پیش
والد
کامیت
5af812ee5b
2فایلهای تغییر یافته به همراه70 افزوده شده و 0 حذف شده
  1. 51 0
      homework/1.sql
  2. 19 0
      homework/init.sql

+ 51 - 0
homework/1.sql

@@ -0,0 +1,51 @@
+begin;
+
+-- Создаем таблицу званий
+create table ranks (id serial primary key, name varchar(32));
+
+-- Создаем таблицу пользователей
+create table users (id serial primary key, name varchar(64), rank_id integer);
+
+-- Привязываем users(rank_id) -> ranks(id)
+alter table users add foreign key(rank_id) references ranks(id);
+
+-- Заполняем звания
+insert into ranks(name) values ('Рядовой');
+insert into ranks(name) values ('Ефрейтор');
+insert into ranks(name) values ('Младший сержант');
+insert into ranks(name) values ('Сержант');
+insert into ranks(name) values ('Старший сержант');
+insert into ranks(name) values ('Старшина');
+insert into ranks(name) values ('Прапорщик');
+insert into ranks(name) values ('Старший прапорщик');
+insert into ranks(name) values ('Младший лейтенант');
+insert into ranks(name) values ('Лейтенант');
+insert into ranks(name) values ('Старший лейтенант');
+insert into ranks(name) values ('Капитан');
+insert into ranks(name) values ('Майор');
+insert into ranks(name) values ('Подполковник');
+insert into ranks(name) values ('Полковник');
+insert into ranks(name) values ('Генерал майор');
+insert into ranks(name) values ('Генерал лейтенант');
+insert into ranks(name) values ('Генерал полковник');
+insert into ranks(name) values ('Генерал армии');
+insert into ranks(name) values ('Маршал России');
+
+-- Обновляем username(varchar) -> user_id(integer) в measurement_batch
+alter table measurement_batch rename column username to user_id;
+alter table measurement_batch alter column user_id type integer using null;
+
+-- Привязываем measurement_batch(user_id) -> users(id)
+alter table measurement_batch add foreign key(user_id) references users(id);
+
+-- Заполняем тестовые данные:
+-- -- Пользователь
+insert into users(name, rank_id) values ('Левитан Всеволод Романович', (select id from ranks order by id desc limit 1));
+-- -- Измерение
+insert into measurement_batch(start_period, user_id, pos_x, pos_y) values (now(), (select id from users limit 1), 69.00, 42.00);
+
+commit;
+
+
+-- Проверяем
+select batch.id, batch.start_period, concat(rnk.name, ' ', usr.name), batch.pos_x, batch.pos_y from measurement_batch batch join users usr on batch.user_id = usr.id join ranks rnk on usr.rank_id = rnk.id;

+ 19 - 0
homework/init.sql

@@ -0,0 +1,19 @@
+begin;
+
+-- Создаем таблицу measurement_batch
+create table measurement_batch(id serial primary key, start_period timestamp, username varchar(64), pos_x numeric, pos_y numeric);
+-- Создаем таблицу measurement_types
+create table measurement_types (id serial primary key, name varchar(64));
+-- Создаем таблицу measurement_params
+create table measurement_params(id serial primary key, measurement_type_id integer references measurement_types(id), measurement_batch_id integer references measurement_batch(id), height numeric, temperature numeric, pressure numeric, wind_speed numeric, wind_direction numeric, bullet_speed numeric);
+-- Добавляем тестовые типы измерений
+insert into measurement_types(name) values ('ДМК');
+insert into measurement_types(name) values ('РУЖЬЕ');
+-- Добавляем тестовые измерения
+insert into measurement_batch(start_period, username, pos_x, pos_y) values(now(), 'test', 69, 42);
+-- Добавляем тестовые данные замеров
+insert into measurement_params(measurement_type_id, measurement_batch_id, height, temperature, pressure, wind_speed, wind_direction, bullet_speed) values (1, 1, 100, 15, 750, 0, 0, 0);
+
+commit;
+
+select mtypes.name, batch.start_period, batch.username, batch.pos_x, batch.pos_y, params.* from measurement_params params join measurement_batch batch on params.measurement_batch_id = batch.id join measurement_types mtypes on params.measurement_type_id = mtypes.id;