Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсач БД.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
915.23 Кб
Скачать

Федеральное государственное бюджетное образовательное учреждение высшего образования «Чувашский государственный университет имени и. Н. Ульянова»

Факультет информатики и вычислительной техники

Кафедра вычислительной техники

Отчет по курсовой работе

по дисциплине Базы данных

на тему «Разработка платформы для автоматизации заполнения протоколов СНО»

Работу выполнил: студент группы ИВТ-41-15 Агниашвили Д.В.

Работу принял: Ржавин В.В.

г. Чебоксары, 2017

СОДЕРЖАНИЕ

Бизнес правила. 3

Пользователи данной базы данных: 3

Состав базы данных. 3

Типы связей. 5

Концептуальное проектирование 5

Метод ER-диаграмм. 6

Логическое проектирование 7

Создание запросов. 8

Описание запросов 8

Виды запросов 11

Разработка форм 11

Описание форм 11

Разработка отчетов 14

Многомерное представление данных 15

Реализация 17

Интеграция базы данных MySQL с WORD 21

Интеграция с VK API 32

Описание документов для импорта и экспорта данных. 32

Вывод. 33

Список использованной литературы. 34

Тексты платформы 35

Бизнес правила.

  1. Запрещается давать больше призовых мест, чем 40% от общего числа участников.

  2. Запрещается изменять данные людям, которые не получили права редактирования.

  3. На «Ч.Г.У.» в одной секции максимум только 3 рекомендации к публикации в сборнике трудов конференции.

Пользователи данной базы данных:

  1. Секретарь

  2. Сотрудник СНО факультета

  3. Сотрудник СНО университета

  4. Администратор

Состав базы данных.

  1. Пользователь:

    1. #ID

    2. #НОМ_ФАКУЛЬТЕТА;

    3. #НОМ_РОЛИ;

    4. ID ВКонтакте;

    5. Имя;

    6. Фамилия;

    7. Ссылка на фото;

  2. Секция:

    1. #ID

    2. #НОМ_СЕКЦИИ;

    3. #НОМ_ФАКУЛЬТЕТА;

    4. Название;

    5. Дата проведения;

    6. Аудитория;

    7. Статистика;

  3. Факультет:

    1. #ID

    2. Короткое название;

    3. Полное название

    4. Название в родительном падеже

    5. ФИО Декана

    6. ФИО научного руководителя СНО

  4. Комиссия:

    1. #ID

    2. #НОМ_СЕКЦИИ;

    3. #НОМ_СТАТУСА;

    4. ФИО;

    5. #ДОЛЖНОСТИ;

  5. Статус:

    1. #ID;

    2. Название;

  6. Доклад:

    1. #ID;

    2. #НОМ_СЕКЦИИ;

    3. Название;

    4. Место;

    5. Отметка «По программе»;

  7. Рекомендации

    1. #ID;

    2. Название

    3. Отметка, что доступно

  8. Руководитель:

    1. #ID;

    2. #НОМ_ ДОКЛАДА;

    3. ФИО;

    4. Должность;

  9. Докладчик:

    1. #ID;

    2. #НОМ_ДОКЛАДА;

    3. #НОМ_ОПЦИИ;

    4. ФИО;

    5. Телефон;

  10. Опции докладчика:

    1. #ID;

    2. #ДОКЛАДЧИКА;

    3. #ТИП_ДОКЛАДЧИКА;

    4. meta_key;

    5. meta_value;

Типы связей.

Пользователь добавляет секцию (M:1)

Пользователь числится на факультете (M:1)

Секция имеет комиссию (1:M)

Комиссия делится на виды (M:1)

На секции показывают доклады (1:M)

У докладов есть руководители (1:M)

У докладов есть докладчики (1:M)

Концептуальное проектирование

Название

Описание

Пользователь

Содержит информацию о пользователе системы

Секция

Содержит информацию о секции

Руководитель

Содержит информацию о руководителе доклада

Комиссия

Содержит информацию о комиссии секции

Докладчик

Содержит информацию о докладчике

Доклад

Содержит информацию о докладе

Метод ER-диаграмм.

Логическое проектирование

Создание запросов.

Описание запросов

Имя запроса

Текст запроса

1

Все группы с префиксом Иванов

Выводит список всех спикеров, у которых ФИО начинается с Иванов

SELECT *

FROM `speakers`

WHERE `fio` LIKE `% Иванов %` AND `type ` IN (`chuvsu` ,`_chuvsu`);

2

ORDER BY 'date' LIMIT 5

Выводит все поля 5-ти самых последних секций

SELECT * FROM `sections`

ORDER BY 'date' LIMIT 5;

3

Фильтр пользователей

Сортирует студентов по ФИО и выдает докладчиков

SELECT *

FROM `users`

WHERE `id_report` =

ORDER BY `fio`;

4

Создание архивной таблицы

Создает временную таблицу сообщений студентов.

CREATE TABLE IF NOT EXISTS `msgs_rar` (

`id` int(255) NOT NULL AUTO_INCREMENT,

`datetime` datetime NOT NULL,

`user_id` int(16) NOT NULL,

`message` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,

`level` int(11) NOT NULL DEFAULT '0',

UNIQUE KEY `id` (`id`));

5

Удаление таблицы.

Удаляет все записи из таблицы

DROP TABLE `bot_sms`

6

Обновление записи

Администратор публикует идею

UPDATE `ideas`

SET `posted` = 1

WHERE `ID` = ?

7

Группирование данных

Выдаёт из таблицы работ студентов выполненные работы

SELECT COUNT(*),`lab_works`.`name_id`, SUM(`lab_works`.`is_complied`),`objects`.`name_object`

FROM `lab_works`

INNER JOIN `objects` ON `lab_works`.`name_id` = `objects`.`ID`

WHERE `lab_works`.`user_id`= ? AND `lab_works`.`type_works`= ? AND `lab_works`.`time_start` <= ? AND `lab_works`.`unix_time` >= ?

GROUP BY `lab_works`.`name_id`

9

Вывод дублей

Выводит повторяющие ФИО докладчиков

SELECT `fio`

FROM `speakers`

GROUP BY ` fio `

HAVING COUNT `fio`) > 1

10

Добавление записи

INSERT INTO `users` (`id_vk`,`fio`,`GUID`) VALUES (?,?,?)

11

Вывод плановых работ

Выводит список работ которые нужно сдавать студенту

SELECT

`reports`.`ID` AS `ID_REPORT`,

`speakers`.`ID` AS `ID_SPEAKER`,

`reports`.`id_section`,

`reports`.`name_report`,

`reports`.`place`,

IFNULL(`speakers`.`id_report`,0) AS `id_report`,

IFNULL(`speakers`.`fio`,0) AS `fio`,

IFNULL(`speakers`.`type`,0) AS `type`

FROM `reports`

LEFT JOIN `speakers`

ON `reports`.`ID` =`speakers`.`id_report`

WHERE `reports`.`id_section` = ? AND `reports`.`place` > 0

ORDER BY

Выводит список работ которые нужно сдавать студенту

SELECT

`all_labs`.`ID` AS `all_labs_ID`,

`objects`.`name_object`,

`object_types`.`type`,

`all_labs`.`serial_num`,

`all_labs`.`id_type`,

`all_labs`.`id_object`,

`all_labs`.`name`,

IFNULL(`all_labs_unicum`.`ID` , '0') AS `all_labs_unicum_ID`,

IFNULL(`all_labs_unicum`.`is_started` , '0') AS `is_started` ,

IFNULL(`all_labs_unicum`.`id_complied` , '0') AS `is_complied`

FROM `all_labs`

LEFT JOIN (

SELECT * FROM `all_labs_unicum`

WHERE `all_labs_unicum`.`id_user` = ?

) AS `all_labs_unicum`

ON `all_labs`.`ID` = `all_labs_unicum`.`id_all_labs`

INNER JOIN `objects`

ON `all_labs`.`id_object` = `objects`.`ID`

INNER JOIN `object_types`

ON `object_types`.`ID` = `all_labs`.`id_type`

WHERE

`all_labs`.`id_group` = ? AND `all_labs`.`term` = ?

ORDER BY `id_type`, `id_object`,`serial_num`

SELECT SUM(`mark`)/COUNT(`mark`)

FROM `works`

WHERE `id_user` = ? AND `id_type` != 1

12

Данные за период

Вывести все доклады у всех секций за определенный период

SELECT *

FROM `sections`

INNER JOIN `reports`

ON ` reports `.`id_ section` = ` sections `.`ID`

WHERE ` reports`.`date` >= ?

SELECT

`reports`.`ID` AS `ID_REPORT`,

`speakers`.`ID` AS `ID_SPEAKER`,

`speakers`.`id_position`,

`reports`.`id_section`,

`reports`.`name_report`,

`reports`.`place`,

IFNULL(`speakers`.`id_report`,0) AS `id_report`,

IFNULL(`speakers`.`fio`,0) AS `fio`,

IFNULL(`speakers`.`type`,0) AS `type`

FROM `reports`

LEFT JOIN `speakers`

ON `reports`.`ID` =`speakers`.`id_report`

WHERE `reports`.`id_section` = ?

ORDER BY `reports`.`place` "