Скачиваний:
4
Добавлен:
17.06.2023
Размер:
3.07 Mб
Скачать

Б) структура и ключи файлов/таблиц баз данных

Структура таблицы «Группы», представлена в таблице 7.

Таблица 7 – Структура таблицы «Группы»

Имя поля

Тип данных

Описание

КодГруппы (Ключевое поле)

Счетчик

НомерГруппы

Короткий текст

КодФакультета

Числовой

ГодСоздания

Числовой

Структура таблицы «Дисциплины», представлена в таблице 8.

Таблица 8 – Структура таблицы «Дисциплины»

Имя поля

Тип данных

Описание

КодДисциплины (Ключевое поле)

Счетчик

НазваниеДисциплины

Короткий текст

Часы

Числовой

Структура таблицы «Оценки», представлена в таблице 9.

Таблица 9 – Структура таблицы «Оценки»

Имя поля

Тип данных

Описание

КодСтудента (Ключевое поле)

Числовой

КодДисциплины (Ключевое поле)

Числовой

Оценки

Числовой

Структура таблицы «Студенты», представлена в таблице 10.

Таблица 10 – Структура таблицы «Студенты»

Имя поля

Тип данных

Описание

КодСтудента

НомерЗачётки

ФИО

БаллыЕГЭ

КодГруппы

ДатаРождения

Город

Стипендия

Структура таблицы «Факультеты», представлена в таблице 11.

Таблица 11 – Структура таблицы «Факультеты»

Имя поля

Тип данных

Описание

КодФакультета

Наименование

Декан

В) схема данных

Схема данных таблиц, представлена на рисунке 0.

Рисунок 31 – Схема данных таблиц

3.2. Реализация ограничений базы данных

Для исправной работы системы создадим функцию, которая накладывает дополнительные ограничения на невозможность вставки нескольких оценок за экзамен по одному предмету:

CREATE FUNCTION acad_perform_add (INTEGER, TEXT, TEXT, INTEGER, DATE, IN- TEGER) RETURNS VOID AS $$

BEGIN

IF (SELECT count(acad_perform.*)

FROM acad_perform LEFT JOIN control_point ON control_point.id = acad_perform.id_control_point

LEFT JOIN student ON acad_perform.id_student = student.id

LEFT JOIN form_control ON control_point.id_form_control = form_control.id

LEFT JOIN teach_disc_group ON control_point.id_teach_disc_group = teach_disc_group.id LEFT JOIN "group" ON "group".id = teach_disc_group.id_group

LEFT JOIN teach_disc ON teach_disc.id = teach_disc_group.id_teach_disc LEFT JOIN discipline ON discipline.id = teach_disc.id_discipline

WHERE form_control.name = $3 AND $3 = 'Экзамен' AND acad_perform.id_student = $1 AND "group".number = $4

AND discipline.name = $2) = 0

THEN INSERT INTO acad_perform(id_student, id_control_point, id_valuation) VALUES ($1, (SELECT control_point.id FROM control_point

LEFT JOIN form_control ON control_point.id_form_control = form_control.id LEFT JOIN teach_disc_group ON control_point.id_teach_disc_group =

teach_disc_group.id

LEFT JOIN "group" ON "group".id = teach_disc_group.id_group

LEFT JOIN teach_disc ON teach_disc.id = teach_disc_group.id_teach_disc LEFT JOIN discipline ON discipline.id = teach_disc.id_discipline

WHERE form_control.name = $3 AND "group".number = $4 AND discipline.name = $2 AND control_point.date = $5), (SELECT id

FROM valuation WHERE symbol = $6)); END IF;

END;

$$ LANGUAGE plpgsql;

Следующая функция вводит ограничение на вставку более двух кон- трольных точек в один день одной группе. А так же данная функция автома- тически по дате вставляет соответствующий семестр.

CREATE FUNCTION control_point_add (DATE, TEXT, INTEGER, TEXT, TEXT, TEXT) RETURNS VOID AS $$

BEGIN

IF (SELECT count(control_point.*)

FROM acad_perform LEFT JOIN control_point ON control_point.id = acad_perform.id_control_point

LEFT JOIN student ON acad_perform.id_student = student.id

LEFT JOIN form_control ON control_point.id_form_control = form_control.id

LEFT JOIN teach_disc_group ON control_point.id_teach_disc_group = teach_disc_group.id LEFT JOIN "group" ON "group".id = teach_disc_group.id_group

LEFT JOIN teach_disc ON teach_disc.id = teach_disc_group.id_teach_disc LEFT JOIN discipline ON discipline.id = teach_disc.id_discipline

WHERE "group".number = $4 AND control_point.date = $1) < 2 THEN

INSERT INTO control_point(date, id_form_control, id_teach_disc_group, id_semester) VALUES ($1,

(SELECT id FROM form_control WHERE name = $2), (SELECT teach_disc_group.id FROM teach_disc_group

LEFT JOIN "group" ON "group".id = teach_disc_group.id_group

LEFT JOIN teach_disc ON teach_disc.id = teach_disc_group.id_teach_disc LEFT JOIN discipline ON discipline.id = teach_disc.id_discipline

LEFT JOIN teacher ON teach_disc.id_teacher = teacher.id

WHERE "group".number = $3 AND teacher.surname = $4 AND teacher.name = $5 AND discipline.name = $6),

(SELECT id FROM semester WHERE $1 BETWEEN datebegin AND dateend)); END IF;

END;

Соседние файлы в папке Расчётно-графическая работа
  • #
    17.06.2023624 б0'Студенты' (Контроль успеваемости учащихся.accdb).MAR
  • #
    17.06.2023622 б0'Студенты' (Контроль успеваемости учащихся.accdb).MAT
  • #
    17.06.2023624 б0'Факультеты' (Контроль успеваемости учащихся.accdb).MAF
  • #
    17.06.2023626 б0'Факультеты' (Контроль успеваемости учащихся.accdb).MAT
  • #
    17.06.20233.24 Mб1Контроль успеваемости учащихся.accdb
  • #
    17.06.20233.07 Mб4Отчёт РГР.docx