Скачиваний:
0
Добавлен:
19.01.2026
Размер:
758.99 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

КАФЕДРА АЭРОКОСМИЧЕСКИХ КОМПЬЮТЕРНЫХ И ПРОГРАММНЫХ СИСТЕМ

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

Старший преподаватель

 

Барклаевская Н. В.

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №4

Проектирование БД

по курсу: Проектирование информационных систем

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ гр. №

4111з

 

Тюттерин Я. Н.

 

 

 

 

 

 

 

 

 

подпись, дата

 

инициалы, фамилия

Санкт-Петербург 2026

Цель работы: разработка структуры БД

Выполнение:

Первым делом можно выделить сущность «преподаватель». Она будет хранить в себе информацию о преподавателе, который пользуется порталом. Основные атрибуты:

уникальный идентификатор; электронная почта (будет использоваться для подтверждения учетной записи и в качестве логина); пароль, ФИО; флаг активности учетной записи(При регистрации без подтверждения через почту - учетная запись будет неактивна).

Также вводится сущность «курс», указывающая на то, на каком этапе обучения находится группа. Атрибуты: уникальный идентификатор; код курса.

Для деления студентов и тестов вводится сущность «группа». Ее атрибутами будут:

уникальный идентификатор; код группы; идентификатор курса, к которому относится группа.

Группа будет относиться к курсам связью «многие к одному».

Также можно выделить сущность «студент». Она будет хранить в себе информацию о студенте, который пользуется порталом. Основные атрибуты: уникальный идентификатор;

электронная почта (будет использоваться для подтверждения учетной записи и в качестве логина); пароль, ФИО; флаг активности учетной записи(При регистрации без подтверждения через почту - учетная запись будет неактивна), идентификатор группы, к которой относится студент.

Также можно выделить сущность «категория». Будет использоваться для разделения тестов на отдельные группы по темам. Атрибуты: уникальный идентификатор; заголовок;

описание.

Следующим же этапом можно выделить сущность «Тест». Она будет связана с категорией связью «многие к одному», то есть один тест может относиться лишь к одной категории, но разные тесты могут относиться как к одной и той же категории, так и к разным.

К атрибутам сущности можно отнести: уникальный идентификатор; заголовок; описание;

флаг активности; идентификатор категории, к которой относится тест; максимальное количество попыток прохождения теста.

Для более тонкой категоризации тестов вводится сущность тема, которая будет связана с тестами связью «многие-ко-многим» через отдельную связующую таблицу.

Атрибуты: заголовок и уникальный идентификатор.

Сам по себе тест не несет в себе особой информации, поэтому для тестирования понадобится еще одна сущности - «вопрос». Она будет связана с тестом связью «многие к одному». То есть один вопрос может относиться лишь к одному тесту, но у теста может быть ни один связанный вопрос. Атрибуты: уникальный идентификатор; контент вопроса;

идентификатор теста, к которому относится вопрос; время, отведенное на вопрос; количество баллов за правильный ответ.

Ответы на вопросы представлены в виде отдельной сущности. Вопросы будут связаны с ответами связью один ко многим. Атрибуты: уникальный идентификатор; контент ответа;

идентификатор вопроса, к которому относится ответ; флаг, указывающий на то, правильный ответ или нет.

Для допуска определенных групп студентов к решению тестов, используется сущность

«прохождение».

Сущность «вопрос-тест» введена для того, чтобы была возможность привязывать один вопрос сразу к нескольким тестам, избегая дублирования.

Ну и главное, это сущность «результат», которая будет хранить в себе результат прохождения теста. Атрибуты: уникальный идентификатор; идентификатор пользователя;

количество баллов, полученных за тест; (опционально) отдельным атрибутом можно хранить то, какой ответ был дан на каждый из вопросов и то, какой правильный ответ был указан в вопросе. По связям: результат будет связан с таблицей пользователей связью многие к одному, так как у одного пользователя может быть много результатов прохождения.

Аналогично и со связью с сущностью тест, у каждого теста может быть множество результатов прохождения.

Логическая схема представлена на рисунке 1, а физическая - на рисунке 2.

Рисунок 1 - Логическая схема

Рисунок 2 - Физическая схема БД

В листинге 1 представлен результат формирования БД в виде DDL sql.

Листинг 1. Схема БД.

CREATE TABLE teachers (

id uuid NOT NULL DEFAULT gen_random_uuid(), email varchar(30) NOT NULL,

"password" varchar(150) NOT NULL, first_name varchar(30) NOT NULL, last_name varchar(30) NOT NULL, active bool NOT NULL DEFAULT true,

CONSTRAINT teachers_pkey PRIMARY KEY (id)

);

CREATE TABLE courses (

id uuid NOT NULL DEFAULT gen_random_uuid(), code varchar(15) NOT null,

CONSTRAINT courses_pkey PRIMARY KEY (id)

);

create table groups (

id uuid NOT NULL DEFAULT gen_random_uuid(), code varchar(15) not null,

course_id uuid not null,

CONSTRAINT groups_pkey PRIMARY KEY (id),

CONSTRAINT courses_groups_fk FOREIGN KEY (course_id) REFERENCES courses(id)

);

CREATE TABLE students (

id uuid NOT NULL DEFAULT gen_random_uuid(), email varchar(30) NOT NULL,

"password" varchar(150) NOT NULL, first_name varchar(30) NOT NULL, last_name varchar(30) NOT NULL, active bool NOT NULL DEFAULT true, group_id uuid not null,

CONSTRAINT students_pkey PRIMARY KEY (id),

CONSTRAINT students_groups_fk FOREIGN KEY (group_id) REFERENCES groups(id)

);

CREATE TABLE categories (

id uuid NOT NULL DEFAULT gen_random_uuid(), title varchar(75) NULL,

description varchar(1000) NULL,

CONSTRAINT categories_pkey PRIMARY KEY (id),

CONSTRAINT categories_title_key UNIQUE (title)

);

create table topics (

id uuid NOT NULL DEFAULT gen_random_uuid(), title varchar(30) not null,

CONSTRAINT topics_pkey PRIMARY KEY (id)

);

CREATE TABLE quizzes (

id uuid NOT NULL DEFAULT gen_random_uuid(), title varchar(30) NOT NULL,

description varchar(1000) NOT NULL, active bool NOT NULL,

category_id uuid NOT NULL, owner_id uuid not null, max_attempt int4 NULL,

CONSTRAINT quizzes_pkey PRIMARY KEY (id),

CONSTRAINT quizzes_teachers_fk FOREIGN KEY (owner_id) REFERENCES teachers(id),

CONSTRAINT categories_quizzes_fk FOREIGN KEY (category_id) REFERENCES categories(id)

);

create table topics_quizzes ( topic_id uuid not null, quizz_id uuid not null,

CONSTRAINT topics_quizzes_pkey PRIMARY KEY (topic_id, quizz_id), CONSTRAINT quizzes_topics_quizzes_fk FOREIGN KEY (quizz_id)

REFERENCES quizzes(id),

CONSTRAINT topics_topics_quizzes_fk FOREIGN KEY (topic_id)

REFERENCES topics(id) );

CREATE TABLE results (

id uuid NOT NULL DEFAULT gen_random_uuid(), given_answer_by_question_id jsonb NOT NULL, quiz_id uuid NOT NULL,

student_id uuid NOT NULL, max_marks int4 NOT NULL, exam_answers jsonb NOT NULL,

CONSTRAINT results_pkey PRIMARY KEY (id),

CONSTRAINT quizzes_results_fk FOREIGN KEY (quiz_id) REFERENCES quizzes(id),

CONSTRAINT students_results_fk FOREIGN KEY (student_id) REFERENCES students(id)

);

CREATE TABLE questions (

id uuid NOT NULL DEFAULT gen_random_uuid(), "content" varchar(4000) NOT NULL,

quiz_id uuid NOT NULL, marks int4 NOT NULL, "time" int4 NOT NULL,

CONSTRAINT questions_pkey PRIMARY KEY (id),

CONSTRAINT quizzes_questions_fk FOREIGN KEY (quiz_id) REFERENCES quizzes(id)

);

CREATE TABLE answers (

id uuid NOT NULL DEFAULT gen_random_uuid(), "content" varchar(4000) NOT NULL, question_id uuid NOT NULL,

is_right boolean NOT NULL,

CONSTRAINT answers_pkey PRIMARY KEY (id),

CONSTRAINT answers_questions_fk FOREIGN KEY (question_id) REFERENCES questions(id)

);

create table topics_questions ( quiz_id uuid NOT null, question_id uuid NOT null,

CONSTRAINT topics_questions_topics_fk FOREIGN KEY (quiz_id) REFERENCES topics(id),

CONSTRAINT topics_questions_questions_fk FOREIGN KEY (question_id) REFERENCES questions(id)

);

create table passings ( quiz_id uuid NOT null, group_id uuid NOT null,

CONSTRAINT passings_groups_fk FOREIGN KEY (group_id) REFERENCES groups(id),

CONSTRAINT passings_questions_fk FOREIGN KEY (quiz_id) REFERENCES quizzes(id),

CONSTRAINT passings_pkey PRIMARY KEY (group_id, quiz_id)

);

Вывод

В ходе выполнения лабораторной работы была разработана структура базы данных для портала, предназначенного для организации и проведения тестов. Были выделены ключевые сущности, такие как "Пользователь", "Категория", "Тест", «Вопрос», «Результат" и т.д.,

каждая из которых имеет свои уникальные атрибуты и связи друг с другом.

Разработанная структура позволяет эффективно организовать хранение и обработку данных, необходимых для функционирования системы тестирования. Реализованные схемы обеспечивают целостность данных и позволяют легко расширять функциональность системы в будущем.

Таким образом, поставленная цель разработки структуры базы данных достигнута, и

созданная модель готова к дальнейшему внедрению и эксплуатации.

Список использованных источников

1) Методические указания по выполнению лабораторной работы: https://docs.yandex.ru/docs/view?url=yabrowser%3A%2F%2F4DT1uXEPRrJRXlUFoewruDEIaPfyRMjhH1nYkpGOHP0qVvBjqSf0W6D vW2q3izRR766JkJSFUldW46KbgVVcCMhafzehusGXT7oMovBlW5GnjGelWCMcr7La8UNzvPMRx7vw2YssI56BZES1wZvyA%3D%3D%3Fsign%3D k89WY15JpuqN3TXIGcDFWKzNU_M3vYaRJOTVXS7e_E%3D&name=Методическиеуказанияквыполнени юпрактическойработыПроектированиеБДпометодуERдиаграмм.docx&nosw=1

Соседние файлы в предмете Проектирование информационных систем