\usepackage{amsmath}
# Разработка систем на основе PostgreSQL
#### Стек
1. Операционная система: [`Linux`](https://ubuntu.com/download/desktop), [`Docker`](https://docs.docker.com/get-started/get-docker/)
2. СУБД: [`PostgreSQL`](https://www.postgresql.org/download/) , [`postgrest`](https://docs.postgrest.org/en/v12/)
3. Front: `JavaScript`, `Jquery`, `Html`
## Легенда
> Вы включены в команду целью которой состоит в разработке базы данных и **Backend** для системы подготовки метрологических данных в рамках разработки ПАК (Программно-аппаратного комплекса) согласно **Технического задания**.
> `Основаня задача команды` - это разработать решение которое должно соответствовать следующим критериям:
> * Решение должно работать в режиме как `SINGLE-USER` так и `MULTI-USER`
> * В режиме `MULTI-USER`, количество одновременных пользователей до **50 000**
> * Требуется обеспечить максимальную производительность при минимально производительном оборудовании
> * Необходимо обеспечить максимально гибкий и простой вариант загрузки справочников и таблиц стрельбы
### Выгрузка
```sql
pg_dump -h localhost -U admin study2025 > 20250131.sql
```
### Домашние задания
| Период | Задание | Решение |
|--------------|----------------------------|---------------------------|
| | | |
| 1 | **2025-01-31** |
1. Создать таблицу для учета пользователей системы. Предусмотреть справочник военных должностей.
2. Изменить таблицу `measurement_batch` изменить поле `username`.
3. Оформить решение в виде скрипта и приложить в виде PullRequest. Если есть вопросы по домашнему заданию, написать в Forlabs.
**Решение**
[HomeWork20250131.sql](./_Infra/scripts/HomeWork20250131.sql)
| 2 | **2025-02-07** |
1. Создать `pgSQL` скрипт в который поместить прошлое задание по созданию инфраструктуры проекта.
2. Добавить в `pgSQL` скрипт таблицу поправок по температуре (`Таблица 1`). Так же, добавить данные в эту таблицу.
3. В скрипт включить создание связей по ключам между таблицами и тип данных `interpolation`
4. Написать отдельный `pgSQL` скрипт для расчета поправке к температуре на основе `Таблица 1` с применением интерполяции.
5. Приложить решение в виде PullRequest в решение включить результат расчета интерполяции.
**Решение**
[HomeWork20250206.sql](./_Infra/scripts/HomeWork20250206.sql)
[HomeWork20250206_Part2.sql](./_Infra/scripts/HomeWork20250206_Part2.sql)
| 3 | **2025-02-14** |
1. Создать таблицу с настройками для проверки входных данных `measure_settings` В рамках данной таблицы нужно хранить все константы
- `Температура`. Минимальное значение -58, максимальное 58, указывается в цельсиях
- `Давление`. Минимальное значение 500, максимальное 900, указывается в мм рт ст
- `Направление ветра`. Минимальное значение 0,максимальное значение 59 и т.д.
2. Создать собственный тип данных для передачи входных параметров
3. Написать собственную функцию которой на вход должны подаваться входные параметры, а на выходе `собственный тип данных` с заполненными значения.
Функция должна проверять входные параметры. При нарушении граничных параметров формировать **raise error**
4. Дописать и оформить `"основной"` скрипт. В него включить все функции для расчета интерполяции и метео средний.
5. Написать отдельный `pgSQL` скрипт, который сформирует тестовые данные. Нужно добавить несколько пользователей в таблицу `emploees` , а так же
не менее **100** измерений с разными параметрами для каждого пользователя.
Для указания высоты, давления, температуры использовать функцию `random()`. Для создания скрипта обязательно использовать циклы.
**Решение**
[HomeWork20250220.sql](./_Infra/scripts/HomeWork20250220.sql)