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;