Контекст Вы разрабатываете прототип информационной системы для творческой студии. В студии есть исполнители (люди, которые создают контент) и проекты, над которыми они работают. У каждого исполнителя есть личное дело с конфиденциальной информацией, доступ к которой должен быть строго отделён от основной информации об исполнителе.
Функциональные требования к данным
- Персональная информация: О каждом человеке нужно хранить публичный псевдоним (никнейм) и дату регистрации в студии.
- Личное дело (Связь 1:1): К каждому исполнителю привязано строго одно личное дело (и наоборот — одно дело относится только к одному человеку). В личном деле хранятся настоящие паспортные данные и адрес проживания. Эти данные не должны находиться в той же таблице, что и псевдоним, для обеспечения условного разделения уровней доступа.
- Проектная деятельность (Связь M:N): В студии ведутся различные проекты. У каждого проекта есть название и дата дедлайна. Один исполнитель может работать одновременно над несколькими проектами, и в одном проекте всегда задействовано несколько исполнителей.
- Дополнительное условие: В рамках одного проекта у разных исполнителей могут быть разные роли (например, «Ведущий», «Монтажёр», «Сценарист»). Необходимо фиксировать, в какой роли конкретный человек участвует в конкретном проекте.
Техническое задание Вам необходимо написать консольное приложение на C# с использованием SQLite и библиотеки Microsoft.Data.Sqlite (ADO.NET Core).
Этап 1. Проектирование и инициализация
- Спроектируйте схему базы данных, обеспечив связи один-к-одному (между исполнителем и личным делом) и многие-ко-многим (между исполнителями и проектами, с учётом роли).
- Напишите код, который создаёт файл базы данных и все необходимые таблицы (если их нет).
Этап 2. Наполнение тестовыми данными
- Добавьте в код (или отдельным скриптом) вставку минимум 3 исполнителей с их личными делами.
- Добавьте минимум 2 проекта.
- Свяжите их между собой, назначив разные роли.
Этап 3. Реализация запроса Напишите метод, который выводит в консоль следующую информацию:
Для каждого проекта показать его название, дедлайн, и полный список участников. Для каждого участника вывести: псевдоним (из таблицы исполнителей), роль в этом проекте (из связующей таблицы) и настоящие паспортные данные (из связанной таблицы 1:1).
Требования к коду:
- Не использовать ORM (Entity Framework), только чистые объекты команд
SqliteCommand. - Чтение данных должно быть реализовано через
SqliteDataReader. - Имена классов (сущностей) и таблиц в коде вы должны придумать самостоятельно, исходя из логики предметной области. Использовать имена «Table1», «Table2» запрещено.
Критерии оценки:
- Корректность реализации внешних ключей для связей 1:1 и M:N.
- Правильное использование JOIN при чтении связанных данных.
- Отсутствие дублирования данных (нормализация).