Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Бесплатная браузерная игра «Слаймы Атакуют: Головоломка!» в жанре головоломка. Подходит для мальчиков и девочек, доступна без регистрации, на русском языке

Слаймы Атакуют: Головоломка!

Казуальные, Головоломки, Аркады

Играть

Топ прошлой недели

  • solenakrivetka solenakrivetka 7 постов
  • Animalrescueed Animalrescueed 53 поста
  • ia.panorama ia.panorama 12 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
0 просмотренных постов скрыто
4
DropTrigger
DropTrigger
Серия Записки вкатуна

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

10 месяцев назад

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

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

Создание платформы для удобного чтения книг в формате 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-фич.


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

Показать полностью 2
Программирование База данных SQL Длиннопост
15
0
kv4k4zy4br4

Ответ ZiRoberto в «Впрочем, ничего нового»⁠⁠5

10 месяцев назад

Оказывается, база данных у нее актуальна на октябрь 2023... Печально.

Ответ ZiRoberto в «Впрочем, ничего нового»
Показать полностью 1
Скриншот Переписка DeepSeek База данных Нейронные сети Ответ на пост Длиннопост Волна постов
5
4
IliaHohlov
IliaHohlov
Лига программистов

Задача по SQL на этот понедельник⁠⁠

10 месяцев назад

Всем доброго понедельника!

Как насчёт очередной небольшой задачи по SQL с нашего Телеграм-канала?

В базе данных (на примере СУБД ORACLE), среди прочих, есть три таблицы, определённые следующим образом:

/* Таблица Сотрудники */

CREATE TABLE PERS (

ID NUMBER PRIMARY KEY,

FIO VARCHAR(100) NOT NULL,

PHONE VARCHAR(10) DEFAULT '' NOT NULL);

/* Автомобили сотрудников */

CREATE TABLE CARS (

ID NUMBER PRIMARY KEY,

BRAND VARCHAR(50) NOT NULL,

MODEL VARCHAR(50) NOT NULL,

ID_PERS_OWNER NUMBER NOT NULL,

CONSTRAINT FK_CAR_OWNER FOREIGN KEY

(ID_PERS_OWNER) REFERENCES PERS(ID)

);

/* Сотрудники-водители */

CREATE TABLE DRIVERS (

ID_PERS NUMBER PRIMARY KEY,

DRIVE_LICENSE_NUM VARCHAR(20) DEFAULT NULL,

CONSTRAINT FK_PERS_DRIVER FOREIGN KEY

(ID_PERS) REFERENCES PERS(ID)

);

В таблице PERS данные:

ID FIO PHONE

1 Иванов И.И. 9057553111

2 Петров П.П. 9104454545

3 Сидоров А.И. 9113457778

В таблице CARS данные:

ID BRAD MODEL ID_PERS_OWNER

1 Ауди А4 1

2 Фиат Панда 2

3 Форд Мондео 2

Какой результат вернёт выполнение следующего SQL-скрипта, состоящего из трёх команд?

TRUNCATE TABLE DRIVERS;

INSERT INTO DRIVERS

(ID_PERS)

SELECT p.ID

FROM PERS p

JOIN CARS c

On c.ID_PERS_OWNER = p.ID;

SELECT COUNT(*)

FROM DRIVERS;

Задача по SQL на этот понедельник
Показать полностью 1
[моё] Программирование IT Собеседование SQL База данных Mysql Oracle Postgresql Тестирование Программист
4
MrStaggerLee
MrStaggerLee

Интересное место и мысли вслух⁠⁠

10 месяцев назад

Если написать на Пикабу, что Россия - криптоколония, которой управляют штаты, что у путина нет власти, что мигранты лучше коренных россиян, то пост удалят. Если начать на постоянной основе говорить про это всем родным, близким, коллегам и случайным людям, то скорее всего вызовут психиатрическую помощь. Но если ты депутат госдуры Фёдоров, то все норм, так можно!
https://aif.ru/politics/russia/944285
А еще, если ты Семигин, то можно продвигать закон о диаспорах, которые будут при власти напрямую вопросики решать и темки мутить.
http://komitet-dn.duma.gov.ru/novosti/744a75da-1f5f-40e9-b1f...
А если ты Васильев(Асанбаевич) из единой россии, то можно договариваться с уважаемыми людьми из других стран, чтобы забирать к себе радикальных исламистов ради сохранения стабильности в странах Средней Азии, а их семьи тут нужны, чтобы мигранты не так часто насиловали наших женщин.
https://ria.ru/20240821/er-1967558885.html
Это все мысли и действия наших "народных избранников", которые по партийным спискам влетели в госдуму, и чёт там окуклились, и никто особо за ними и не следит.
Так вот, в телеге у Александра Картавых предложили создать Депутатник(https://t.me/deputatnic), где будут собирать как раз таки что наши депутаты говорят, и что делают, ну для присмотра и контроля, вдруг что и получится годное! Кстати, на основной канал тоже рекомендую заскочить, там интересно бывает, если вы нашу страну все таки любите.

Показать полностью
[моё] Политика Telegram Госдума Единая Россия Депутаты База данных Мигранты Шизофрения Текст
3
7
Shawurma
Shawurma
Инкогнито

Хорошо что я не один⁠⁠

11 месяцев назад

Источник

Хорошо что я не один
[моё] IT Юмор Программирование IT юмор Программист База данных Мемы Linux
0
15
Paragoz
Paragoz

Если бы Василий Кузякин попал в мир IT. Это шедерв⁠⁠

11 месяцев назад
Перейти к видео
[моё] Любовь и голуби IT юмор Сисадмин Российское кино Видео Вертикальное видео Юмор База данных
3
14
megamozg.t
Типичный программист

ДМБ.... а может бахнем?⁠⁠

11 месяцев назад
ДМБ.... а может бахнем?
[моё] IT юмор Программист База данных
9
4
vosandr

Я создал flutter-приложение, позволяющее создавать информационные базы данных⁠⁠

1 год назад

Всем привет.

Чуть ранее я опубликовал пост, в котором выложил переработку/адаптацию одной статьи. Меня спросили, попросили пояснить, что я выложил. В этой статье я все поясняю

В школе я учился учиться не через зубрежку, а через попытки создать структуру того, что я изучал, в голове. В колледже я изучил и проанализировал в числе многих других zettelkasten, anki и dart/flutter. Идея приложения основывается на проблеме - я не могу структуризировать свои мысли в электронном формате.

Данную проблему уже пытались решить, к примеру, приложения obsidian, zettlr, да и, если честно, даже файловый проводник, текстовые редакторы, в которых можно посмотреть структуру файлов и папок.

Они все смотрели не туда: они смотрели на отображение содержимого файлов, а надо было посмотреть на отображение папок, именно в их отображении и заключалась проблема и заключается она в том, что мы не можем в полной мере контролировать отображение элементов в папке

Так вот, я проблему с отображением папок решил путем добавления файла, в которую приложение сначала заглядывает и отображает сначала те элементы, которые проставлены в виде ссылок и оформил это приложение

Данное приложение, я думаю, поможет тем, кто в принципе работает с информацией в электронном виде

Ссылка тут:

https://github.com/vosandr/tengo

Пример данного формата тут. В ближайшем будущем я собираюсь выкладывать все архивы информации с данным форматом туда же:

https://boosty.to/vosirandr/posts/747d9d09-87d4-462e-b2ef-77...

Также следите за мной тут:

https://vosandr.livejournal.com/

Спасибо за внимание

Если остались какие-то вопросы или хотите поделиться впечатлениями, можете прокомментировать данную статью - постараюсь ответить

Показать полностью
[моё] Программа Приложение Flutter Dart База данных Текст
0
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии