
Курсовая работа. БД
.pdf
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
КАФЕДРА ПРИКЛАДНОЙ ИНФОРМАТИКИ
КУРСОВАЯ РАБОТА (ПРОЕКТ) ЗАЩИЩЕНА С ОЦЕНКОЙ
РУКОВОДИТЕЛЬ
ст. преподаватель, спец. |
подпись, дата |
В. В. Боженко |
должность, уч. степень, звание |
инициалы, фамилия |
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К КУРСОВОЙ РАБОТЕ
Разработка информационной системы “Социальная сеть”
по дисциплине: Базы данных
РАБОТУ ВЫПОЛНИЛ |
|
|
|
|
|
|
СТУДЕНТ гр. № |
Z1411 |
|
|
Я. Н. Тюттерин |
||
|
|
номер группы |
|
подпись, дата |
|
инициалы, фамилия |
Студенческий билет № |
2022 / 4886 |
|
|
|
||
|
|
|
|
|
Шифр ИНДО
Санкт-Петербург 2024
Содержание
Введение |
3 |
Системный анализ предметной области |
4 |
Описание предметной области |
4 |
Определение пользователей |
4 |
Определение запросов |
4 |
Анализ сущностей и связей между ними |
5 |
Построение запросов |
9 |
Пользовательские привилегии |
20 |
Проектирование пользовательского интерфейса |
23 |
Визуализация данных |
34 |
Заключение |
38 |
Список использованных источников |
39 |
3
Введение
В современном мире социальные сети стали неотъемлемой частью жизни многих людей. Они позволяют общаться с друзьями и знакомыми, делиться информацией и впечатлениями, а также создавать сообщества по интересам. Социальные сети активно используются в различных сферах деятельности, таких как образование, бизнес, культура и спорт.
Однако с ростом популярности социальных сетей возникает проблема хранения и обработки больших объёмов данных. Для решения этой проблемы создаются специализированные базы данных, которые обеспечивают эффективное хранение и обработку информации о пользователях, их контактах, сообщениях и других данных.
В качестве СУБД (системы управления базами данных) для создания социальной сети была выбрана PostgreSQL. Выбор обусловлен рядом преимуществ этой системы:
●Высокая производительность и масштабируемость. PostgreSQL обеспечивает высокую скорость работы и возможность горизонтального масштабирования, что позволяет обрабатывать большие объёмы данных без потери производительности.
●Надежность и стабильность. PostgreSQL имеет долгую историю разработки и использования, что гарантирует его надежность и стабильность работы.
●Гибкость и расширяемость. PostgreSQL поддерживает множество типов данных и индексов, а также различные механизмы транзакций и репликации, что позволяет адаптировать систему под конкретные требования проекта.
●Открытый исходный код. PostgreSQL распространяется под лицензией PostgreSQL License, которая позволяет использовать и модифицировать систему бесплатно и без ограничений.
Таким образом, выбор PostgreSQL в качестве СУБД для создания социальной сети позволит обеспечить эффективное хранение и обработку данных пользователей, а также предоставит возможности для развития и расширения функционала социальной сети в будущем.
4
Системный анализ предметной области
Описание предметной области
В Гуапландии набирает обороты модная социальная сеть «В Квадрате» (Мой Квадрат...). Обычная социальная сеть в которой люди могут добавлять друг друга в друзья (симметричное понятие – если А дружит с Б, то и Б дружит с А), группировать своих друзей (школа, друзья, коллеги...). Каждый гражданин Гуапландии указывает в анкете свой день рождения, хобби и другие параметры. Пользователи могут создавать сообщества и вступать в них.
Определение пользователей
–отдел техподдержки: обрабатывает анкеты пользователей и осуществляет техническую поддержку пользователям.
–модератор: следит за корректностью контента и блокирует пользователей, которые нарушали правила сети.
–пользователь: делает всё, что описано в предметной области.
–директор социальной сети: смотрит статистику и эффективность социальной сети.
–администратор БД: имеет полное право доступа к БД, отвечает за ее работу.
Определение запросов
1.Вывести список всех друзей одного пользователя
2.Найти самого дружелюбного гуапчича.
3.Вывести список групп друзей данного человека, с указанием того сколько именно человек состоит в каждой такой группе.
4.Найти двух незнакомых жителей с максимальной разницей в росте.
5.Для каждого жителя попробовать предложить нескольких других гуапчичей, которых он возможно захочет добавить в друзья.
6.Найти жителя, который создал больше всего групп.
7.Найти всех «влиятельных» гуапчичей – таких, что все их друзья состоят хотя бы в одном сообществе, созданным этим «влиятельным» гуапчичем.
8.Придумать еще три сложных запроса.
5
Анализ сущностей и связей между ними
Для начала, на основе описания предметной области, можно выделить сущность - пользователь (users). Ее атрибутами будут:
●id - целочисленное значение, уникальное. Выступает для идентификации пользователя в системе;
●email - строка. Почта, под которой пользователь регистрируется;
●date_of_birth - дата. Дата рождения пользователя;
●hobbies - массив строк. Список хобби пользователя;
●height - целочисленное значение. Рост пользователя в сантиметрах;
●firstname - имя пользователя;
●lastname - фамилия;
●patronymic - отчество.
●gender - пол
Скрипт для создания таблицы представлен ниже:
CREATE TABLE IF NOT EXISTS users (
id integer GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, email varchar not null unique,
date_of_birth date not null, hobbies varchar[],
height integer not null, firstname varchar not null, lastname varchar not null, patronymic varchar,
gender varchar check (gender in ('male', 'female'))
);
На значение почты дополнительно наложено ограничение уникальности, так как одна почта не может относиться к нескольким пользователям. Для гендера введена проверка, чтобы избежать ввода некорректных данных.
Также можно выделить сущность друг (friends). Связующая таблица, в которую будут попадать записи о дружбе пользователей. Для становления другом - дружба должна быть взаимной. То есть, пользователь 1 станет другом для пользователя 2 лишь в том случае, если в таблице будет две записи:
●идентификатор_пользователя_1 идентификатор_пользователя_2
●идентификатор_пользователя_2 идентификатор_пользователя_1 Следовательно, атрибутами сущности будут:
6
●user_id - целочисленное значение. Идентификатор пользователя, отправляющего/подтверждающего заявку в друзья
●friend_id - целочисленное значение. Идентификатор пользователя, которого
добавляют в друзья Скрипт для создания таблицы представлен ниже:
CREATE TABLE IF NOT EXISTS friends (
user_id integer not null references users(id), friend_id integer not null references users(id),
PRIMARY KEY (user_id, friend_id)
);
Первичный ключ представлен как составной, чтобы исключить дублирование записей.
В описании предметной области упоминается деление друзей пользователя на группы. Для этой цели введена сущность группа (groups). Состав ее атрибутов:
●id - целочисленное значение. Идентификатор группы
●owner_id - целочисленное значение. Идентификатор владельца группы
●title - название группы
Скрипт для создания таблицы представлен ниже:
CREATE TABLE IF NOT EXISTS groups (
id integer GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
owner_id integer not null references users(id),
title varchar not null
);
Теперь можно выделить сущность (friend_group), которая будет связывать друга пользователя с определенной группой, к которой пользователь отнес его. Атрибуты:
●friend_id - идентификатор друга
●group_id - идентификатор группы
Скрипт для создания таблицы представлен ниже:
CREATE TABLE IF NOT EXISTS friend_group (
group_id integer not null references groups(id), friend_id integer not null references users(id),
PRIMARY KEY (group_id, friend_id)
);
7
Также, согласно описанию модели данных, пользователи могут создавать сообщества (communities) и вступать в них (user_community). Атрибуты:
●id - целочисленное значение. Идентификатор сообщества
●title - строка. Название сообщества
●description - строка. Описание сообщества
●owner_id - целочисленное значение. Идентификатор владельца сообщества Скрипт для создания таблицы представлен ниже:
CREATE TABLE IF NOT EXISTS communities (
id integer GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
owner_id integer not null references users(id),
title varchar not null,
description varchar
);
Атрибуты user_community:
●community_id - целочисленное значение. Идентификатор сообщества, в котором состоит пользователь
●participant_id - целочисленное значение. Идентификатор пользователя
Скрипт для создания таблицы представлен ниже:
CREATE TABLE IF NOT EXISTS user_community (
community_id integer not null references communities(id), participant_id integer not null references users(id),
PRIMARY KEY (community_id, participant_id)
);
В результате была получена диаграмма БД, представленная на рисунке 1.

8
Рисунок 1 - Диаграмма БД
9
Построение запросов
Для начала потребуется подготовить данные, с которыми можно будет работать. Для заполнения таблицы пользователей будет использован запрос:
INSERT INTO users (email, date_of_birth, hobbies, height, firstname, lastname, patronymic, gender) VALUES
('example1@email.com', '1980-01-01', '{reading,cycling,swimming}', 180, 'Alice', 'Smith', 'Alexandrovna', 'female'),
('example2@email.com', '1985-05-05', '{hiking,camping,fishing}', 175, 'Bob', 'Johnson', NULL, 'male'),
('example3@email.com', '1990-07-15', '{painting,running,gardening}', 165, 'Charlie', 'Williams', NULL, 'female'),
('example4@email.com', '1975-11-22', '{music,skiing,dancing}', 185, 'David', 'Brown', NULL, 'male'),
('example5@email.com', '1995-03-25', '{cooking,yoga,photography}', 170, 'Emily', 'Jones', NULL, 'female'),
('example6@email.com', '1982-06-10', '{tennis,swimming,cycling}', 182, 'Frank', 'Wilson', NULL, 'male'),
('example7@email.com', '1992-09-09', '{writing,hiking,chess}', 168, 'Georgia', 'Miller', NULL, 'female'),
('example8@email.com', '1978-12-24', '{football,running,gym}', 190, 'Harry', 'Taylor', NULL, 'male'),
('example9@email.com', '1998-02-14', '{painting,singing,gardening}', 160, 'Isabella', 'Clark', NULL, 'female'),
('example10@email.com', '1983-04-23', '{music,skiing,dancing}', 188, 'Jack', 'White', NULL, 'male'),
('example11@email.com', '1996-06-12', '{cooking,yoga,photography}', 172, 'Kelly', 'Green', NULL, 'female'),
('example12@email.com', '1981-08-18', '{tennis,swimming,cycling}', 184, 'Leo', 'King', NULL, 'male'),
('example13@email.com', '1993-10-30', '{writing,hiking,chess}', 174, 'Madison', 'Lee', NULL, 'female'),
('example14@email.com', '1977-01-01', '{football,running,gym}', 192, 'Noah', 'Moore', NULL, 'male'),
('example15@email.com', '1999-03-27', '{painting,singing,gardening}', 162, 'Olivia', 'Parker', NULL, 'female'),
('example16@email.com', '1984-05-05', '{music,skiing,dancing}', 186, 'Peter', 'Rogers', NULL, 'male'),
10
('example17@email.com', '2000-07-15', '{cooking,yoga,photography}', 176, 'Quinn', 'Scott', NULL, 'female'),
('example18@email.com', '1979-11-22', '{tennis,swimming,cycling}', 189, 'Ryan', 'Howard', NULL, 'male'),
('example19@email.com', '1997-03-25', '{writing,hiking,chess}', 171, 'Sophia', 'Mitchell', NULL, 'female'),
('example20@email.com', '1986-06-10', '{football,running,gym}', 191, 'Thomas', 'Williams', NULL, 'male'),
('example21@email.com', '2002-09-09', '{painting,singing,gardening}', 164, 'Victoria', 'Nguyen', NULL, 'female'),
('example22@email.com', '1976-12-24', '{music,skiing,dancing}', 187, 'William', 'Doe', NULL, 'male'),
('example23@email.com', '1994-02-14', '{tennis,swimming,cycling}', 178, 'Xavier', 'Peters', NULL, 'male'),
('example24@email.com', '1991-04-23', '{writing,hiking,chess}', 166, 'Yvonne', 'Ng', NULL, 'female'),
('example25@email.com', '1987-06-12', '{football,running,gym}', 193, 'Zachary', 'Miller', NULL, 'male'),
('example26@email.com', '1998-08-18', '{painting,singing,gardening}', 163, 'Zoe', 'Williams', NULL, 'female'),
('example27@email.com', '1975-10-30', '{music,skiing,dancing}', 184, 'Aaron', 'Johnson', NULL, 'male'),
('example28@email.com', '2001-01-01', '{cooking,yoga,photography}', 177, 'Ava', 'Lee', NULL, 'female'),
('example29@email.com', '1982-03-27', '{tennis,swimming,cycling}', 185, 'Ben', 'King', NULL, 'male'),
('example30@email.com', '1996-05-05', '{writing,hiking,chess}', 173, 'Cora', 'Mitchell', NULL, 'female'),
('example31@email.com', '1978-07-15', '{football,running,gym}', 194, 'Daniel', 'Nguyen', NULL, 'male'),
('example32@email.com', '1999-09-09', '{painting,singing,gardening}', 165, 'Emily', 'Parker', NULL, 'female'),
('example33@email.com', '1985-11-22', '{music,skiing,dancing}', 186, 'Ethan', 'Rogers', NULL, 'male'),
('example34@email.com', '2002-03-25', '{cooking,yoga,photography}', 178, 'Faith', 'Scott', NULL, 'female'),
('example35@email.com', '1979-06-10', '{tennis,swimming,cycling}', 190, 'George', 'Howard', NULL, 'male'),