{"id":22768573,"url":"https://github.com/ynazymko12/goit-cs-hw-03","last_synced_at":"2026-05-05T21:36:57.583Z","repository":{"id":265299867,"uuid":"893490706","full_name":"YNazymko12/goit-cs-hw-03","owner":"YNazymko12","description":"Home task for Computer Systems and Their Fundamentals course: SQL | NoSQL","archived":false,"fork":false,"pushed_at":"2024-11-28T19:23:36.000Z","size":1297,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-30T11:16:09.374Z","etag":null,"topics":["mongodb","postgresql"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/YNazymko12.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-24T15:29:14.000Z","updated_at":"2024-11-28T19:27:55.000Z","dependencies_parsed_at":"2024-11-28T20:26:42.827Z","dependency_job_id":"03b404a1-e674-4c6f-a536-ec0b9f9eb482","html_url":"https://github.com/YNazymko12/goit-cs-hw-03","commit_stats":null,"previous_names":["ynazymko12/goit-cs-hw-03"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/YNazymko12/goit-cs-hw-03","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YNazymko12%2Fgoit-cs-hw-03","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YNazymko12%2Fgoit-cs-hw-03/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YNazymko12%2Fgoit-cs-hw-03/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YNazymko12%2Fgoit-cs-hw-03/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/YNazymko12","download_url":"https://codeload.github.com/YNazymko12/goit-cs-hw-03/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YNazymko12%2Fgoit-cs-hw-03/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32669431,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-05T11:29:49.557Z","status":"ssl_error","status_checked_at":"2026-05-05T11:29:48.587Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mongodb","postgresql"],"created_at":"2024-12-11T14:11:59.210Z","updated_at":"2026-05-05T21:36:57.564Z","avatar_url":"https://github.com/YNazymko12.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Домашнє завдання до модуля “Вступ до вивчення систем управління базами даних”\n\nГотові до тренування? 🤩\n\nДомашнє завдання складається з двох незалежних завдань і може видатися досить\nвеликим за обсягом, але немає потреби хвилюватися, оскільки ми детально\nрозписали підказки та рекомендації щодо виконання.\n\nОтже, сьогодні ви:\n\n- Створите базу даних для системи управління завданнями, використовуючи\n  PostgreSQL, та виконаєте необхідні запити в базі даних системи управління\n  завданнями.\n- Розробите Python скрипт, який використовує бібліотеку PyMongo для реалізації\n  основних операцій у MongoDB.\n\nЦе завдання допоможе вам закріпити знання щодо роботи з SQL та розуміння різних\nаспектів взаємодії з реляційною базою даних, включаючи вибірку, оновлення,\nвставку та аналіз даних. Також, виконуючи це домашнє завдання, ви навчитеся\nвикористовувати методи PyMongo для взаємодії з хмарним сервером MongoDB зі\nскрипту Python.\n\n### Підготовка та завантаження домашнього завдання\n\n1. Створіть публічний репозиторій `goit-cs-hw-03`.\n\n2. Виконайте завдання та відправте його у свій репозиторій.\n\n\u003e [!NOTE]\n\u003e\n\u003e Для завдання 1 повинні бути 3 файли: скрипт .py створення таблиць, скрипт .py\n\u003e наповнення таблиць даними та скрипт .py чи .sql з SQL запитами.\n\n3. Завантажте робочі файли на свій комп’ютер та прикріпіть їх у LMS у форматі\n   `zip`. Назва архіву повинна бути у форматі ДЗ3_ПІБ.\n\n4. Прикріпіть посилання на репозиторій `goit-cs-hw-03` та відправте на\n   перевірку.\n\n### Формат оцінювання\n\n- Оцінка від 0 до 100\n- Завдання 1 оцінюється в 60 балів, завдання 2 — в 40 балів\n\n\u003e [!CAUTION]\n\u003e\n\u003e 👉🏻 Якщо є помилки або недоліки виконання, кількість балів за кожне завдання\n\u003e зменшується пропорційно до наявних помилок на розсуд ментора.\n\n\u003e [!WARNING]\n\u003e\n\u003e 💡 Відправляйте ДЗ на перевірку, коли зроблено все можливе, оскільки кількість\n\u003e спроб здачі завдання впливає на отриманий бал! За кожну наступну спробу після\n\u003e другої (тобто з третьої) максимальна можлива кількість балів зменшується на 5.\n\u003e\n\u003e Таким чином: 1 спроба: максимальна кількість балів – 100,\n\u003e\n\u003e 2 спроба: максимальна кількість балів – 100,\n\u003e\n\u003e 3 спроба: максимальна кількість балів – 95,\n\u003e\n\u003e 4 спроба: максимальна кількість балів – 90,\n\u003e\n\u003e 5 спроба: максимальна кількість балів – 85, тощо\n\u003e\n\u003e Критерії оцінювання робіт у магістратурі GoIt Neoversity\n\n\u003e [!IMPORTANT]\n\u003e\n\u003e ☝🏻 УВАГА!! У вас є можливість обрати підхід до виконання та можливого\n\u003e доопрацювання домашнього завдання:\n\n1. задовольнитися першою отриманою оцінкою (звісно ж, якщо вона вище прохідного\n   бала),\n2. намагатися отримати вищий бал шляхом можливого послідуючого доопрацювання\n   роботи у відповідності з фідбеком ментора.\n\nОбраний підхід до виконання ДЗ необхідно зазначити у полі для здачі до\nприкріпленого завдання. За відсутності коментаря ментор дотримується першого\nпідходу й виставляє отриману оцінку.\n\n### Формат здачі\n\n- Прикріплені файли репозиторію у форматі `zip` з назвою ДЗ3_ПІБ.\n- Посилання на репозиторій.\n\n\u003e [!TIP]\n\u003e\n\u003e 💡 ВАЖЛИВО Перегляньте Інструкцію щодо завантаження робочого файлу з\n\u003e репозиторію на Github\n\n## Технiчний опис завдань\n\n## Завдання 1\n\nСтворіть базу даних для системи управління завданнями, використовуючи\nPostgreSQL. База даних має містити таблиці для користувачів, статусів завдань і\nсамих завдань. Виконайте необхідні запити в базі даних системи управління\nзавданнями.\n\n### Покрокова інструкція\n\n1. Створіть таблиці у вашій PostgreSQL базі даних відповідно до вимог.\n   Використовуйте належні типи даних та обмеження.\n\n### Вимоги до структури бази даних:\n\n**Таблиця** `users`:\n\n- `id`: Первинний ключ, автоінкремент (тип `SERIAL`),\n- `fullname`: Повне ім'я користувача (тип `VARCHAR(100)`),\n- `email`: Електронна адреса користувача, яка повинна бути унікальною (тип\n  `VARCHAR(100)`).\n\n**Таблиця** `status`:\n\n- `id`: Первинний ключ, автоінкремент (тип `SERIAL`),\n- `name`: Назва статусу (тип `VARCHAR(50)`), повинна бути унікальною. Пропонуємо\n  наступні типи `[('new',), ('in progress',), ('completed',)]`.\n\n**Таблиця** `tasks`:\n\n- `id`: Первинний ключ, автоінкремент (тип `SERIAL`),\n- `title`: Назва завдання (тип `VARCHAR(100)`),\n- `description`: Опис завдання (тип `TEXT`),\n- `status_id`: Зовнішній ключ, що вказує на `id` у таблиці `status` (тип\n  `INTEGER`),\n- `user_id`: Зовнішній ключ, що вказує на `id` у таблиці users (тип `INTEGER`).\n\n![Results](./assets/print-screen.png)\n\n2. Переконайтеся, що поля `email` у таблиці `users` та `name` у таблиці `status`\n   є унікальними.\n\n3. Налаштуйте зв'язки між таблицями таким чином, щоб при видаленні користувача\n   автоматично видалялися всі його завдання (каскадне видалення).\n\n4. Напишіть скрипт створення цих таблиць.\n\n5. Напишіть скрипт `seed.py` на Python, який буде заповнювати ці таблиці\n   випадковими значеннями. Використовуйте бібліотеку Faker.\n\n6. Використовуючи SQL, виконайте наступні запити в базі даних системи управління\n   завданнями.\n\n### Запити для виконання:\n\n- **Отримати всі завдання певного користувача.** Використайте `SELECT` для\n  отримання завдань конкретного користувача за його `user_id`.\n- **Вибрати завдання за певним статусом.** Використайте підзапит для вибору\n  завдань з конкретним статусом, наприклад, `'new'`.\n- **Оновити статус конкретного завдання.** Змініть статус конкретного завдання\n  на `'in progress'` або інший статус.\n- **Отримати список користувачів, які не мають жодного завдання.** Використайте\n  комбінацію `SELECT`, `WHERE NOT IN` і підзапит.\n- **Додати нове завдання для конкретного користувача.** Використайте `INSERT`\n  для додавання нового завдання.\n- **Отримати всі завдання, які ще не завершено.** Виберіть завдання, чий статус\n  не є 'завершено'.\n- **Видалити конкретне завдання.** Використайте `DELETE` для видалення завдання\n  за його `id`.\n- **Знайти користувачів з певною електронною поштою.** Використайте `SELECT` із\n  умовою `LIKE` для фільтрації за електронною поштою.\n- **Оновити ім'я користувача.** Змініть ім'я користувача за допомогою `UPDATE`.\n- **Отримати кількість завдань для кожного статусу.** Використайте `SELECT`,\n  `COUNT`, `GROUP BY` для групування завдань за статусами.\n- **Отримати завдання, які призначені користувачам з певною доменною частиною\n  електронної пошти.** Використайте `SELECT` з умовою `LIKE` в поєднанні з\n  `JOIN`, щоб вибрати завдання, призначені користувачам, чия електронна пошта\n  містить певний домен (наприклад, `'%@example.com'`).\n- **Отримати список завдань, що не мають опису.** Виберіть завдання, у яких\n  відсутній опис.\n- **Вибрати користувачів та їхні завдання, які є у статусі 'in progress'.**\n  Використайте `INNER JOIN` для отримання списку користувачів та їхніх завдань\n  із певним статусом.\n- **Отримати користувачів та кількість їхніх завдань.** Використайте `LEFT JOIN`\n  та `GROUP BY` для вибору користувачів та підрахунку їхніх завдань.\n\n\u003e [!NOTE]\n\u003e\n\u003e 💡 Рекомендації до виконання:\n\u003e\n\u003e Використовуйте ваші SQL-навички для формулювання й виконання кожного з цих\n\u003e запитів у вашій базі даних.\n\u003e\n\u003e Переконайтеся, що ви розумієте, як кожен запит працює, та які результати ви\n\u003e очікуєте отримати.\n\u003e\n\u003e Для кращого розуміння спробуйте модифікувати запити або створити свої власні,\n\u003e ґрунтуючись на структурі бази даних.\n\n### Критерії прийняття\n\n1. Створено таблиці та виконано вимоги до структури бази даних.\n\n2. Поля `email` у таблиці `users` та `name` у таблиці `status` є унікальними.\n\n3. При видаленні користувача автоматично видаляються всі його завдання (каскадне\n   видалення).\n\n4. Написано скрипт створення таблиць.\n\n5. Написано скрипт `seed.py` на Python, який буде заповнювати ці таблиці\n   випадковими значеннями, з використанням бібліотеки Faker.\n\n6. Виконано всі необхідні запити в базі даних системи управління завданнями.\n\n\u003e [!TIP]\n\u003e\n\u003e Критерії прийняття домашнього завдання є обов’язковою умовою оцінювання\n\u003e домашнього завдання ментором. Якщо якийсь з критеріїв не виконано, ДЗ\n\u003e відправляється ментором на доопрацювання без оцінювання. Якщо вам “тільки\n\u003e уточнити”😉 або ви “застопорилися” на якомусь з етапів виконання— звертайтеся\n\u003e до ментора у Slack)\n\n## Завдання 2\n\nРозробіть Python скрипт, який використовує бібліотеку PyMongo для реалізації\nосновних CRUD (Create, Read, Update, Delete) операцій у MongoDB.\n\n### Покрокова інструкція\n\n1. Створіть базу даних відповідно до вимог.\n\n### Вимоги до структури документа\n\nКожен документ у вашій базі даних повинен мати наступну структуру:\n\n```bash\n{\n\"\\_id\": ObjectId(\"60d24b783733b1ae668d4a77\"),\n\"name\": \"barsik\",\n\"age\": 3,\n\"features\": [\"ходить в капці\", \"дає себе гладити\", \"рудий\"]\n}\n```\n\nДокумент представляє інформацію про кота, його ім'я `name`, вік `age` та\nхарактеристики `features`.\n\n2. Розробіть Python скрипт `main.py` для виконання наступних завдань.\n\n### Завдання для виконання:\n\n### Читання (Read)\n\n- Реалізуйте функцію для виведення всіх записів із колекції.\n- Реалізуйте функцію, яка дозволяє користувачеві ввести ім'я кота та виводить\n  інформацію про цього кота.\n\n### Оновлення (Update)\n\n- Створіть функцію, яка дозволяє користувачеві оновити вік кота за ім'ям.\n- Створіть функцію, яка дозволяє додати нову характеристику до списку `features`\n  кота за ім'ям.\n\n### Видалення (Delete)\n\n- Реалізуйте функцію для видалення запису з колекції за ім'ям тварини.\n- Реалізуйте функцію для видалення всіх записів із колекції.\n\n\u003e [!TIP]\n\u003e\n\u003e 💡 Рекомендації до виконання:\n\u003e\n\u003e - Використовуйте MongoDB Atlas або локально встановлений екземпляр MongoDB за\n\u003e   допомогою Docker.\n\u003e\n\u003e - Встановіть бібліотеку PyMongo через pip або інший пакетний менеджер, як\n\u003e   pipenv чи poetry.\n\u003e\n\u003e - Не забудьте обробити можливі винятки при виконанні операцій з базою даних.\n\u003e\n\u003e - Переконайтеся, що ваші функції чітко коментовані та добре структуровані.\n\u003e\n\u003e - Заохочується використання Python віртуального середовища для ізоляції\n\u003e   залежностей проєкту.\n\n### Критерії прийняття\n\n1. Створено базу даних та виконано вимоги щодо структури документів.\n\n2. Реалізовано всі необхідні операції.\n\n3. Оброблено можливі винятки при виконанні операцій з базою даних.\n\n4. Функції чітко коментовані та добре структуровані.\n\n### Результат виконаного завдання № 1\n\n![Results](./task-1/task-1.png)\n\n### Результат виконаного завдання № 2\n\n![Results](./task-2/task-2.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fynazymko12%2Fgoit-cs-hw-03","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fynazymko12%2Fgoit-cs-hw-03","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fynazymko12%2Fgoit-cs-hw-03/lists"}