Системный анализ предметной области и создание актуальной модели базы данных «Научная деятельность студентов вуза»
Автор: Н. К. Киселев, К. А. Ковалева
Журнал: Современные инновации, системы и технологии.
Рубрика: Управление, вычислительная техника и информатика
Статья в выпуске: 4 (4), 2024 года.
Бесплатный доступ
В данной статье авторы описывают основные этапы построения актуальной модели базы данных, анализируют предметную область «Научная деятельность студентов вуза». На основе анализа строятся требования к разрабатываемой модели, после чего проектируется физическая модель базы данных, с описанием атрибутов и связей. На базе разработанной модели и введённых тестовых данных создаются программы для обработки основных запросов пользователей к построенной базе данных.
База данных, актуальная модель, научная деятельность, деятельность студентов вуза, системный анализ предметной области, ERD-диаграмма, SQL, SQLite, Python, запросы.
Короткий адрес: https://sciup.org/14131305
IDR: 14131305 | DOI: 10.47813/2782-2818-2024-4-4-0125-0140
Текст статьи Системный анализ предметной области и создание актуальной модели базы данных «Научная деятельность студентов вуза»
DOI:
В настоящее время в список приоритетных направлений вуза входит не только обучение молодёжи, но и популяризация научно-исследовательской деятельности его студентов. Для осуществления контроля и формирования отчётности о проделанной работе вузу необходима такая система, которая хранила бы в себе информацию о результатах научно-исследовательской работы, осуществлять поиск необходимой информации и формировать отчёты.
Цель работы – построение концептуальной модели базы данных «научная деятельность студентов вуза».
К задачам работы относятся:
-
• анализ предметной области «Научная деятельность студентов вуза»;
-
• построение модели базы данных;
-
• создание ERD-диаграммы построенной модели;
-
• разработка физической базы данных на языке Python и языке запросов SQLite;
-
• написание функций поиска подробной информации о данной статье, а также
статей, написанных конкретным студентом.
Создание актуальной модели базы данных
При создании базы данных необходимо объединить индивидуальные потребности пользователей, чтобы обеспечить эффективное решение их задач. Каждый пользователь имеет свое представление о данных и их взаимосвязях, что отражается в его актуальных требованиях. Все эти требования нужно объединить в единую концепцию, которая станет основой для построения базы данных.
Разработчик, основываясь на информации, полученной от пользователей, и собственном видении будущих приложений, создает обобщенное описание базы данных. Это описание, понятное всем участникам проекта, называется актуальной моделью.
Актуальная модель является информационным описанием предметной области, учитывая логические связи между данными. Она не зависит от технических деталей хранения данных, и ее изменение происходит только при изменениях в реальном мире, которые требуют корректировки описания.
Актуальная модель включает следующие компоненты:
-
• Описание предметной области: описание объектов, отношений и правил, характерных для этой области.
-
• Формулировка задач: описание задач, которые необходимо решать с помощью базы данных.
-
• Описание ограничений целостности: описание правил, которые гарантируют правильность и непротиворечивость данных.
-
• Описание объектов: описание объектов предметной области, их атрибутов и взаимосвязей.
Таким образом, актуальная модель базы данных служит основой для объединения всех потребностей пользователей в единое целое, обеспечивая создание эффективной и гибкой системы для решения задач организации.
ОПИСАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ
Система предназначена для сбора информации о научных статьях, написанных студентами-исследователями в вузе, а также информации о научных руководителях. Следовательно, в базе данных будет присутствовать следующая информация:
-
1. Данные о статьях:
-
• Идентификатор статьи: уникальный номер, позволяющий идентифицировать каждую статью.
-
• Название статьи: заголовок статьи.
-
• Авторы статьи: ФИО всех авторов статьи (может быть несколько).
-
• Научный руководитель: ФИО научного руководителя (преподавателя), под руководством которого написана статья (может быть отсутствовать).
-
• Тематический блок статьи
-
• Аннотация статьи
-
• Ключевые слова статьи
-
• Издание: название журнала или сборника, в котором опубликована статья.
-
• Год издания: год публикации статьи.
-
2. Данные о студентах-исследователях:
Современные инновации, системы и технологии // Modern Innovations, Systems and Technologies 2024; 4(4)
-
• Номер зачетной книжки: номер зачетной книжки студента.
-
• ФИО: полное имя студента.
-
• Год поступления: год поступления студента в вуз.
-
• Факультет: факультет, на котором учится студент.
-
• Телефон: номер телефона студента.
-
• E-mail: адрес электронной почты студента.
-
3. Данные о научных руководителях (преподавателях):
-
• Номер преподавателя: уникальный номер, присвоенный преподавателю.
-
• ФИО: полное имя преподавателя.
-
• Кафедра: кафедра, на которой работает преподаватель.
-
• Ученая степень: информация о наличии и степени (кандидат, доктор) у
- преподавателя.
-
• Ученое звание: информация о наличии и звании (доцент, профессор) у
- преподавателя.
-
• Телефон: номер телефона преподавателя.
-
• E-mail: адрес электронной почты преподавателя.
Взаимосвязи:
-
• Один студент может быть автором нескольких статей.
-
• Одна статья может иметь нескольких авторов.
-
• Статья может быть написана под руководством одного научного руководителя.
-
• Преподаватель может руководить несколькими статьями студентов или не руководить ни одной
Постановка задач
Задача 1. Спроектировать базу данных, составив ERD-диаграмму базы данных, указав названия таблиц, их поля, типы данных, а также связи между таблицами.
Задача 2. Организовать в базе данных поиск информации об изданных студентом статей по его имени (название статьи, научный руководитель, название издания и дата издания).
Задача 3. С помощью базы данных сделать вывод подробной информации о данной статье по её идентификатору (с именами её авторов, почтой, а также информацией о научном руководителе).
ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ
-
1. Таблица Faculties (Факультеты) – хранит информацию о факультетах университета, содержит поля:
-
• id (INTEGER, первичный ключ, NOT NULL): уникальный идентификатор факультета;
-
• faculty_name (VARCHAR, NOT NULL): название факультета.
-
2. Таблица Departments (Кафедры) – содержит информацию о кафедрах, входящих в различные факультеты, включает следующие поля:
-
• id (INTEGER, первичный ключ, NOT NULL): уникальный идентификатор кафедры;
-
• faculty_id (INTEGER, NOT NULL): ссылка на факультет, к которому принадлежит кафедра (внешний ключ из Faculties.id);
-
• department_name (VARCHAR, NOT NULL): название кафедры.
-
3. Таблица Article_topics (Темы статей) – хранит информацию о возможных тематических блоках научных статей, имеет поля:
-
• id (INTEGER, первичный ключ, NOT NULL): уникальный идентификатор темы;
-
• topic_name (VARCHAR, NOT NULL): название тематического блока статьи.
-
4. Таблица Scientific_advisor (Научные руководители) – содержит информацию о научных руководителях (преподавателях), которые курируют научную деятельность студентов, представлена следующими полями:
-
• id (INTEGER, первичный ключ, NOT NULL): уникальный идентификатор научного руководителя;
-
• name (VARCHAR, NOT NULL): ФИО научного руководителя;
-
• department_id (INTEGER, NOT NULL): ссылка на кафедру, к которой принадлежит руководитель (внешний ключ из Departments.id);
-
• academic_degree (VARCHAR): учёная степень (например, "Доктор наук");
-
• academic_rank (VARCHAR): ученое звание (например, "Профессор");
-
• telephone (INTEGER): телефонный номер;
-
• email (VARCHAR): адрес электронной почты.
-
5. Таблица Students (Студенты) – содержит информацию о студентах, участвующих в научной деятельности, поля таблицы:
-
• checkbook_number (INTEGER, первичный ключ, NOT NULL): уникальный номер зачётной книжки студента;
-
• name (VARCHAR, NOT NULL): ФИО студента;
-
• enter_year (INTEGER, NOT NULL): год поступления в вуз;
-
• department_id (INTEGER, NOT NULL): ссылка на кафедру, к которой принадлежит студент (внешний ключ из Departments.id);
-
• telephone (INTEGER): телефонный номер студента;
-
• email (VARCHAR): адрес электронной почты студента.
-
6. Таблица Scientific_article (Научные статьи) – содержит информацию о научных статьях, созданных студентами под руководством научных руководителей, содержит поля:
-
• id (INTEGER, первичный ключ, NOT NULL): уникальный идентификатор
статьи;
-
• advisor_id (INTEGER, NOT NULL): ссылка на научного руководителя
-
• name (VARCHAR, NOT NULL): название статьи;
-
• topic_id (INTEGER, NOT NULL): ссылка на тематический блок статьи (внешний ключ из Article_topics.id);
-
• annotation (TEXT): аннотация статьи;
-
• key_words (TEXT): ключевые слова статьи;
-
• publication (VARCHAR): название издания, где опубликована статья;
-
• publication_date (DATE, NOT NULL): дата публикации статьи.
Кроме того, построим связи между таблицами для целостности данных:
-
1. Faculties → Departments (один факультет может включать несколько кафедр; связь реализована через внешний ключ Departments.faculty_id, ссылающийся на Faculties.id).
-
2. Departments → Scientific_advisor: один ко многим (одна кафедра может иметь нескольких научных руководителей; связь через внешний ключ
-
3. Departments → Students: один ко многим (одна кафедра может включать множество студентов; связь через внешний ключ Students.department_id, ссылающийся на Departments.id).
-
4. Scientific_advisor → Scientific_article: один-ко-многим (один научный руководитель
-
5. Article_topics → Scientific_article: один-ко-многим (один тематический блок может относиться к нескольким научным статьям; связь через внешний ключ Scientific_article.topic_id, ссылающийся на Article_topics.id).
-
6. Students ↔ Scientific_article; многие-ко-многим (один студент может участвовать в нескольких статьях, и одна статья может включать нескольких студентов).
Итоговую структуру базы данных представим на ERD-диаграмме (рис.1) [1]:

departmentjd
Scientific_article
advisorjd
topic, id
annotation
publication
integer
integer
varchar
integer
text
text
varchar
date
Scientiflc.advlsor
Л id £> integer name varchar
-< departmentjd integer academic_degree varchar academicrank varchar telephone integer email varchar
Article_topi«
integer
varchar
Departments
facultyjd depanmentjiame integei integer varchar

Рисунок 1. ERD-диаграмма базы данных.
Figure 1: ERD diagram of the database.
-
• id (INTEGER, первичный ключ, NOT NULL): уникальный идентификатор записи;
-
• student_id (INTEGER, NOT NULL): ссылка на студента (внешний ключ из Students.checkbook_number);
-
• article_id (INTEGER, NOT NULL): Ссыл ка на научную статью (внешний ключ из Scientific_article.id).
Таким образом, получим реализацию связи «многие-ко-многим» (рис.2) [1]:

Рисунок 2. ERD-диаграмма связи «многие-ко-многим» таблиц «Студент» и «Статья».
Figure 2. ERD diagram of the many-to-many relationship of the “Student” and “Article” tables.
Создание физической модели спроектированной базы данных реализована в SQLite с использованием языка программирования Python [3] [4].
Листинг 1. Инициализация базы данных и её таблиц.
Listing 1. Initialization of the database and its tables.
import sqlite3
def create_tables():
cursor.execute('''
CREATE TABLE IF NOT EXISTS Faculties ( id INTEGER NOT NULL PRIMARY KEY, faculty_name VARCHAR NOT NULL ) ''')
cursor.execute('''
CREATE TABLE IF NOT EXISTS Departments ( id INTEGER NOT NULL PRIMARY KEY, faculty_id INTEGER NOT NULL, department_name VARCHAR NOT NULL,
FOREIGN KEY (faculty_id) REFERENCES Faculties (id) ) ''')
cursor.execute('''
CREATE TABLE IF NOT EXISTS Article_topics ( id INTEGER NOT NULL PRIMARY KEY, topic_name VARCHAR NOT NULL
Современные инновации, системы и технологии // Modern Innovations, Systems and Technologies 2024; 4(4)
cursor.execute('''
CREATE TABLE IF NOT EXISTS Scientific_advisor ( id INTEGER NOT NULL PRIMARY KEY, name VARCHAR NOT NULL, department_id INTEGER NOT NULL, academic_degree VARCHAR, academic_rank VARCHAR, telephone INTEGER, email VARCHAR, FOREIGN KEY (department_id) REFERENCES Departments (id) ) ''')
cursor.execute('''
cursor.execute('''
CREATE TABLE IF NOT EXISTS Scientific_article ( id INTEGER NOT NULL PRIMARY KEY, advisor_id INTEGER NOT NULL, name VARCHAR NOT NULL, topic_id INTEGER NOT NULL, annotation TEXT, key_words TEXT, publication VARCHAR, publication_date DATE NOT NULL, FOREIGN KEY (advisor_id) REFERENCES Scientific_advisor (id), FOREIGN KEY (topic_id) REFERENCES Article_topics (id) ) ''')
cursor.execute('''
CREATE TABLE IF NOT EXISTS Student_Articles ( id INTEGER NOT NULL PRIMARY KEY, student_id INTEGER NOT NULL, article_id INTEGER NOT NULL,
Поиск статей по имени студенту в базе данных
После создания модели базы данных заполним таблицу тестовыми данными для текущих задач. Наша цель сейчас – реализовать поиск данных о статьях, которые писал студент, используя знания языка запросов SQL и язык программирования Python [5].
Для успешного вывода необходимо проделать следующие действия:
-
1. Найти номер студента в таблице Students через SELECT
-
2. С использованием найденного номера студента отобрать номера статей, которые писал студент, в связующей таблице Student_Articles
-
3. Сохранить записи о статьях студента из таблицы Scientific_article в массив, используя идентификаторы статей и запрос WHERE id IN …
-
4. По идентификаторам преподавателей из отобранных записей о статьях в Scientific_advisor выбрать имена преподавателей и внести их в наш массив с записями и статьях студента
-
5. Вывести отобранную информацию на экран
Листинг 2. Программная реализация вывода информации о статьях студента.
Listing 2. Program implementation of the output of information about student's articles. def show_info_about_student_articles(student_name):
-
# 1. Поиск номера студента
cursor.execute('''
SELECT checkbook_number FROM Students WHERE name = ?
''', (student_name,))
checkbook_number = cursor.fetchall()[0][0]
-
# 2. Поиск номеров статей студента
cursor.execute('''
SELECT article_id
FROM Student_Articles
WHERE student_id = ?
''', (checkbook_number,))
-
# 3. Сохранение информации о статьях
cursor.execute('''
SELECT name, advisor_id, publication, publication_date
FROM Scientific_article
WHERE id IN (?''' + ''', ?''' * (len(articles_id) - 1) + ''')
ORDER BY publication_date
''', articles_id)
-
# 4. Поиск имён проеподавателей
for i in range(len(articles)):
cursor.execute('''
SELECT name
FROM Scientific_advisor
WHERE id = ?
''', (articles[i][1],))
advisor_name = cursor.fetchall()[0][0]
articles[i][1] = advisor_name
-
# 5. Вывод информации
print('Студент', student_name)
print('Номер зачётной книжки:', checkbook_number) print('')
for i in range(len(articles)):
title, publication, publication_date = articles[i][0], articles[i][2], articles[i][3]
print(f'Статья {i+1}: {title}')
print('Научный руководитель:', articles[i][1])
print('Издание:', publication)
print('Опубликована', publication_date) print('')
Вывод подробной информации о статьи по её идентификатору
Теперь реализуем вывод подробной информации о статье по её идентификатору. Для этого необходимо:
-
1. Найти запись о статье в таблице Scientific_article по её идентификатору и сохранить информацию о статье
-
2. По коду научного руководителя из данных о статье найти запись с информацией о научном руководителе
-
3. В связующей таблице Student_Articles отыскать номера зачётных книжек студентов-авторов данной статьи
-
4. Вывести подробную информацию о статье на экран
Листинг 3. Программная реализация вывода подробной информации о статье.
Listing 3. Program implementation of outputting detailed information about an article.
def show_info_about_article(article_id):
-
# 1. Сохранение информации о статье
cursor.execute('''
SELECT * FROM Scientific_article
WHERE id = ?
''', (article_id,))
article_info = list(cursor.fetchall()[0])
cursor.execute('''
SELECT topic_name
FROM Article_topics
WHERE id = ?
''', (article_info[3],))
article_info[3] = cursor.fetchall()[0][0]
-
# 2. Поиск данных о научном руководителе
cursor.execute('''
SELECT *
Современные инновации, системы и технологии // Modern Innovations, Systems and Technologies 2024; 4(4)
FROM Scientific_advisor
WHERE id = ?
''', (article_info[1],))
advisor_info = list(cursor.fetchall()[0])
cursor.execute('''
SELECT department_name
FROM Departments
WHERE id = ?
''', (advisor_info[2],))
advisor_info[2] = cursor.fetchall()[0][0]
-
# 3. Поиск информации о студентах
cursor.execute('''
SELECT student_id
FROM Student_Articles
WHERE article_id = ?
''', (article_id,))
students_id = [item[0] for item in cursor.fetchall()]
cursor.execute('''
SELECT *
FROM Students
WHERE checkbook_number IN (?''' + ''', ?''' * (len(students_id) - 1) + ''')
-
# 4. Вывод информации о статье
print(f'{article_info[6]}, {article_info[7]}')
print(article_info[3])
print('')
print(f'Тема. {article_info[2]}')
print('')
for student in students_info:
print(f'{2025 - student[2]} курс, {student[1]}, {student[5]}')
print('')
print(f'Научный руководитель {advisor_info[3]}')
print(f'{advisor_info[4]} кафедры {advisor_info[2]}')
print(f'{advisor_info[1]}, {advisor_info[6]}') print('')
print(f'Аннотация: {article_info[4]}')
print(f'Ключевые слова: {article_info[5]}')
ЗАКЛЮЧЕНИЕ
В результате работы была проанализирована предметная область «Научная деятельность студентов вуза», спроектирована и разработана база данных с реализованными базовыми запросами, были достигнуты следующие основные результаты:
-
1. Проведен системный анализ предметной области "Научная деятельность студентов вуза", выявлены ключевые сущности и их взаимосвязи.
-
2. Разработана концептуальная модель базы данных, включающая 7 основных таблиц: Faculties, Departments, Article_topics, Scientific_advisor, Students,
-
3. Создана ERD-диаграмма, наглядно отображающая структуру базы данных и связи между таблицами.
-
4. Реализована физическая модель базы данных с использованием SQLite и языка программирования Python.
-
5. Разработаны и протестированы функции для выполнения основных пользовательских запросов:
Scientific article и Student Articles.
-
• Поиск информации о статьях, написанных конкретным студентом
-
• Вывод подробной информации о статье по её идентификатору
Созданная база данных позволяет эффективно хранить и обрабатывать информацию о научной деятельности студентов вуза, что может быть использовано для анализа, формирования отчетности и принятия управленческих решений в области организации научно-исследовательской работы студентов.
Дальнейшее развитие проекта может включать разработку пользовательского интерфейса, расширение функциональности запросов и интеграцию с другими информационными системами вуза.