4

Создаю онлайн-сервис для чтения книг. День 1. Проектирование БД

Серия Записки вкатуна

Всем привет, хочу вам показать свои шаги по созданию онлайн сервиса для чтения книг.

🤔 Идея проекта

Создание платформы для удобного чтения книг в формате PDF с синхронизацией прогресса на всех устройствах.
Ключевые фичи:

  • Интерактивные элементы для работы с текстом (закладки, заметки).

  • Интеграция с ИИ (например, перевод и анализ текста через DeepSeek).

  • Персонализированные рекомендации.

👀 Начало работы: проектирование БД

Спроектирована структура базы данных для поддержки функционала сервиса.
Представлю функционал в виде use-case диаграммы.

Базовый функционал

Базовый функционал

Как видно по фотографии, есть 2 роли — пользователь и администратор. При этом администратор может управлять всем содержимым сервиса, а пользователь только своим аккаунтом, и всем, что с ним связано.

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


🗃️ Структура базы данных

Users

  • id: INT, Primary Key, уникальный идентификатор пользователя (автоинкремент).

  • nickname: NVARCHAR(50), псевдоним пользователя.

  • description: NVARCHAR(150), описание профиля пользователя (опционально).

  • avatar_image_path: NVARCHAR(255), путь к изображению профиля пользователя (по умолчанию 'default-avatar.png').

  • name: NVARCHAR(100), имя пользователя.

  • email: NVARCHAR(150), уникальный адрес электронной почты пользователя.

  • password_hash: NVARCHAR(255), хэш пароля пользователя.

  • id_role: INT, идентификатор роли пользователя (по умолчанию 0). Связан с таблицей Roles.

  • is_banned: BIT, статус блокировки пользователя (по умолчанию FALSE).

  • created_at: DATETIME, дата и время создания записи.


Roles

  • id: INT, Primary Key, уникальный идентификатор роли (автоинкремент).

  • name: NVARCHAR(20), название роли (например, "admin" или "user").


BannedUsers

  • id: INT, Primary Key, уникальный идентификатор записи (автоинкремент).

  • id_user: INT, идентификатор заблокированного пользователя. Связан с таблицей Users.

  • ban_reason: NVARCHAR(200), причина блокировки (опционально).

  • banned_at: DATETIME, дата и время блокировки.


Books

  • id: INT, Primary Key, уникальный идентификатор книги (автоинкремент).

  • name: NVARCHAR(200), название книги.

  • description: NVARCHAR(250), краткое описание книги.

  • id_author: INT, идентификатор автора книги. Связан с таблицей Users.

  • cover_image_path: NVARCHAR(250), путь к обложке книги.

  • file_book_path: NVARCHAR(200), путь к файлу книги.

  • id_category: INT, идентификатор категории книги. Связан с таблицей Categories.

  • is_private: BIT, флаг приватности книги (0 — публичная, 1 — приватная).

  • created_at: DATETIME, дата и время создания записи (опционально).


Categories

  • id: INT, Primary Key, уникальный идентификатор категории (автоинкремент).

  • name: NVARCHAR(100), название категории.


Libraries

  • id: INT, Primary Key, уникальный идентификатор записи (автоинкремент).

  • id_author: INT, идентификатор пользователя, владеющего библиотекой. Связан с таблицей Users.

  • id_book: INT, идентификатор книги, добавленной в библиотеку. Связан с таблицей Books.

  • created_at: DATETIME, дата и время добавления книги в библиотеку.

  • progress_page: INT, номер текущей страницы, на которой находится пользователь (по умолчанию 0).


Bookmarks

  • id: INT, Primary Key, уникальный идентификатор записи (автоинкремент).

  • id_library: INT, идентификатор библиотеки, к которой относится закладка. Связан с таблицей Libraries.

  • page: INT, номер страницы, на которую сделана закладка.

  • comment: NVARCHAR(100), комментарий к закладке.

  • created_at: DATETIME, дата и время создания закладки.


BookReviews

  • id: INT, Primary Key, уникальный идентификатор отзыва (автоинкремент).

  • id_author: INT, идентификатор автора отзыва. Связан с таблицей Users.

  • id_book: INT, идентификатор книги, к которой относится отзыв. Связан с таблицей Books.

  • comment: NVARCHAR(500), текст отзыва.

  • rating: TINYINT, рейтинг книги (число от 0 до 5).

  • created_at: DATETIME, дата и время создания отзыва.


LikesReviews

  • id: INT, Primary Key, уникальный идентификатор записи (автоинкремент).

  • id_author: INT, идентификатор пользователя, который поставил реакцию. Связан с таблицей Users.

  • id_review: INT, идентификатор отзыва, к которому относится реакция. Связан с таблицей BookReviews.

  • reaction_type: TINYINT, тип реакции (например, лайк или дизлайк).

  • created_at: DATETIME, дата и время установки реакции.


Logs

  • id: INT, Primary Key, уникальный идентификатор записи (автоинкремент).

  • id_user: INT, идентификатор пользователя, совершившего действие. Связан с таблицей Users.

  • action: NVARCHAR(200), описание действия.

  • created_at: DATETIME, дата и время совершения действия.


UserSubscribers

  • id: INT, Primary Key, уникальный идентификатор записи (автоинкремент).

  • id_author: INT, идентификатор пользователя, на которого подписан другой пользователь. Связан с таблицей Users.

  • id_subscriber: INT, идентификатор пользователя, который подписан на другого пользователя. Связан с таблицей Users.

  • created_at: DATETIME, дата и время создания подписки.


UserSessions

  • id: INT, Primary Key, уникальный идентификатор записи (автоинкремент).

  • id_user: INT, идентификатор пользователя, которому принадлежит сессия. Связан с таблицей Users.

  • refresh: NVARCHAR(255), refresh токен.

  • expires_in: DATETIME, дата и время истечение refresh токена.

Таблица в Miro

Таблица в Miro

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

🔧 Следующие шаги

  1. Разработка сервера на .NET 7.0 для обработки HTTP-запросов.

  2. Реализация API для:

    • Авторизации/регистрации.

    • Управления книгами и библиотекой.

    • Синхронизации прогресса чтения.

  3. Интеграция с DeepSeek для AI-фич.


🚀 Продолжение следует...
Спасибо за поддержку! 👍

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества