SQL — удалённая работа в Москве
Дата: 2025-05-10
Детали
Регион
Москва
Занятость
дистанционно
Стоимость
договорная
Дата публикации
2025-05-10
Описание
алгоритм распределения. Бизнес-задача: распределить взаимную проверку студентами заданий. Все на SQL. На Supabase будет выполняться (есть особенности). На вход функции: sprint_strapi_document_id (идентификатор учебной недели) Ожидаемый результат: По 3 заданиям, привязанным к учебной неделе проведены распределения студентов с соблюдением ряда условий. Подробнее: ЧТО ДЕЛАЕТ ГЕНЕРАТОР (ПРИМЕРНО) 1. Старт Получает идентификатор спринта и режим работы («затереть всё» или «дописать недостающее»). Спринт = учебная неделя. 2. Очистка (по желанию) Если запрошен «затереть всё» — удаляет из результата всё, что относится к этому спринту, и фиксирует, сколько строк исчезло. 3. Снимок входных данных Собирает четыре набора сведений, без хранения в БД: 1. перечень дуэлей (2 пользователя делают одну задачу) спринта и их тип (тренировочная / боевые); 2. список разрешённых участников (не уволены, из нужного потока); 3. для каждой сыгранной пары — самые свежие ответы обоих игроков — у каждого ответа есть pair_id; 4. из предыдущего пункта формирует сами пары: «идентификатор пары + оба игрока». 4. Рассчитывает квоты Для каждого допущенного пользователя считает: сколько он сыграл ответов × 3 — столько он обязан проверить. У кого получилось 0 — тот сразу «вне игры» (ему нечего проверять, он никому не нужен). 5. Готовит «кольца» – два воображаемых циклических списка Первое кольцо: шесть «слотов» подряд для каждого будущего рецензента. Второе кольцо: шесть «слотов» подряд для каждой пары, которую надо проверять. 6. Базовый round-robin 1. Для тренировочных дуэлей всем парам заранее выбирает «сдвиг» — на сколько позиций провернуть кольцо рецензентов. Для боевых дуэлей сдвиг 0. 2. «Накладывает» кольцо рецензентов на кольцо пар с учётом сдвига и тем самым назначает первых шесть рецензентов каждой паре, игнорируя случаи «рецензент = игрок пары». Получается черновой чертёж назначений. 3. Из квоты каждого назначенного рецензента вычитает израсходованные слоты. 7. Дозакрывает пары, где оказалось меньше 6 рецензентов Пока остаются «дыры»: • выбирает кандидатов с ещё не обнулённым лимитом, которых нет в данной паре и которые не столкнутся с ограничениями; • назначает их, строго не превышая «осталось проверить» ни у пары, ни у кандидата; • обновляет, сколько ещё нужно и какие квоты остались. 8. Сохраняет результат Каждое назначение дублирует на обе записи пары (чтобы вышло ровно 12 строк на пару: 6 рецензентов × 2 игрока). Старые строки не дублируются — если они уже существуют, пропускает. 9. Проверяет себя Есть две жёсткие проверки — если хотя бы одна не пройдена, всё откатывается и бросается исключение: 1. у каждой пары должно быть ровно 6 назначений, иначе фиксируется список «неполных» пар (попадают в лог) и генератор падает; 2. ни у одного рецензента фактическое число назначений не может превышать рассчитанную квоту; нарушители фиксируются в отдельный список и тоже приводят к падению. 10. Формирует отчёт Возвращает JSON: • уникальный идентификатор запуска; • статус «OK» или «ERROR»; • массив шагов-сообщений в хронологическом порядке: сколько строк стерто, сколько сохранено, попали ли пары в «неполные», есть ли «перебранные» квоты, прошла ли финальная валидация. Полный набор логических «баз»,-которыми оперирует генератор (ниже — только смысловая структура: названия полей и связь с алгоритмом; никаких SQL-таблиц или DDL-врезок) 1. Пользователи • user_id – внутренний идентификатор участника • stream_id – учебный поток (курс) • team_id – команда внутри потока • dismissed_at – дата отчисления / увольнения или пусто Зачем нужно → позволяет • убрать выбывших, • узнать команду игрока для правил FULL-CONTACT, • связать участника с потоком спринта. 2. Страйки • user_id – кто получил штраф • sprint_id – за какой спринт штраф Зачем нужно → если есть запись по текущему спринту, пользователь не допускается к проверкам. 3. Потоки и Спринты • stream_id ↔ sprint_id – один поток может иметь несколько спринтов Зачем нужно → определить, каких пользователей считать «своими» для данного спринта. 4. Команды • team_id – идентификатор команды • stream_id – чей поток Зачем нужно → различать «свою» и «чужую» команду в боевых дуэлях. 5. Дуэли • duel_id – внутренняя ссылка в ответах • sprint_id – к какому спринту относится • type – TRAINING или FULL-CONTACT Зачем нужно → отфильтровать дуэли спринта и понять, нужны ли правила баланса команд. 6. Ответы на дуэли • pair_id – уникальный идентификатор пары игроков • user_id – автор конкретного ответа • rival_id – соперник автора • duel_id – какая дуэль • hash – общий «ключ партии» (одинаков у двух строк пары) • created_at – когда отправлен ответ Зачем нужно → • брать самый свежий ответ каждого игрока в паре, • посчитать, сколько ответов сыграл каждый пользователь → сколько рецензий он обязан выдать (квота = 3 × ответы), • сформировать список всех пар «hash + duel». 7. Назначения на проверку (целевая таблица) • reviewer_id – кто будет проверять • duel_id – дуэль пары • user_id – чей ответ проверяется • hash – «ключ партии» (чтобы различать пары) Зачем нужно → конечный результат работы генератора; строка уникальна в сочетании (reviewer_id, hash, duel_id). 8. Внутренние счётчики-выкладки генератора. Что нужно ещё: поддержка и сопровождение, разработать документацию. Если сработаемся — есть много задач на стэке Supabase/Bubble/N8N.
Похожие заказы
SQL
дистанционно
договорная
Sql помощь срочно. Практическое задание: Для каждой создаваемой таблицы: 1) Определить типы данных для полей; 2) Определить первичный ключ и внешний ключ (при наличии); 3) Определить обязательные поля; 4) Заполнить таблицы (минимум 3 таблицы) (5 наименований) 5) Сделать 3 любых запроса 6) Построить схему данных. Предметные области: Библиотека и Зоопарк. Что нужно ещё: Нет. Пожелания и особенности: Практическое задание: Для каждой создаваемой таблицы: 1) Определить типы данных для полей; 2) Определить первичный ключ и внешний ключ (при наличии); 3) Определить обязательные поля; 4) Заполнить таблицы (минимум 3 таблицы) (5 наименований) 5) Сделать 3 любых запроса 6) Построить схему данных. Предметные области: Библиотека и Зоопарк.
Москва
Фрилансеры
2025-06-30
Администраторы баз данных
дистанционно
договорная
Доработать существующую базу данных. СУБД: SQL. Rkeeper + StoreHouse При создании документов расхода по безналу выпадает ошибка. Началось все после перехода на чек намерения. Официалы молчат две недели. Сказали что надо в базе поправить несколько строк и пропали с радаров. Что нужно ещё: интегрировать базу данных с другими системами.
Екатеринбург
Фрилансеры
2025-06-23
SQL
дистанционно
договорная
Разработать базу данных с нуля. Необходимо реализовать схему базы данных по заданию по ссылке - https://docs.google.com/document/d/1Gg43HL6zDhU2eNw9vEPMmBb0XPSFmG5j8ef9Y3lew6Q/edit?tab=t.0. Что нужно ещё: разработать документацию.
Москва
Фрилансеры
2025-06-23
SQL
дистанционно
договорная
Решить две простые задачи с демонстрацией работы в базе. Задача 1. Написать запрос на SQL. Есть таблица А, состоящая из полей: дата, код валюты, курс к рублю. Таблица B: дата, код валюты, остаток в валюте счета, признак кредит/депозит, номер договора. Необходимо рассчитать (вывести одной суммой) остаток кредитного портфеля в рублевом эквиваленте за 31.12.2015. Задача 2. 1. Таблица A с историей изменения лимитов по картам. Структура: номер карты, дата, лимит. 2. Таблица B. Структура: номер карты, дата перевыпуска карты (номер карты уникален). Вывести для номеров карт из таблицы B сумму лимита на дату перевыпуска. Что нужно ещё: поддержка и сопровождение.
Москва
Фрилансеры
2025-06-21
SQL
дистанционно
договорная
Разработать базу данных с нуля. Необходимо выполнить задание на курсе Нетологии по нормализации таблицы.
Москва
Фрилансеры
2025-06-21
SQL
дистанционно
договорная
Доработать существующую базу данных. День добрый! Есть база данных на SQL на сервере reg.ru, работала до позавчерашнего дня, но то ли права были урезаны, то ли что-то на сервере изменилось, не запускается. В панели SSMS я ее вижу, но базы самой нет, вытащить из бэкапа не удается, выдает ошибки. В идеале - вытащить оттуда бэкап или экспортировать базу. Если не получится - разместить пустую на нашем сервере, там тоже есть проблема - к базе подключение есть, но пользователь пустой, поэтому вход не происходит. Вот такая задачка. Что нужно ещё: экспорт.
Москва
Фрилансеры
2025-06-19
SQL
дистанционно
договорная
Доработать существующую базу данных. Сделать запросы 10 обычных ( Select from), 15 средних (Where, Like…) и сложные 10 штук () и описать их объяснение.
Москва
Фрилансеры
2025-06-19