Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курсовая работа. БД

.pdf
Скачиваний:
2
Добавлен:
07.01.2025
Размер:
7.39 Mб
Скачать

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

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

ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ

КАФЕДРА ПРИКЛАДНОЙ ИНФОРМАТИКИ

КУРСОВАЯ РАБОТА (ПРОЕКТ) ЗАЩИЩЕНА С ОЦЕНКОЙ

РУКОВОДИТЕЛЬ

ст. преподаватель, спец.

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

В. В. Боженко

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

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

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К КУРСОВОЙ РАБОТЕ

Разработка информационной системы “Социальная сеть”

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

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

 

 

 

 

 

СТУДЕНТ гр. №

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'),