<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: dmitrii</title>
    <description>The latest articles on DEV Community by dmitrii (@dmitrii_2223).</description>
    <link>https://dev.to/dmitrii_2223</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4075934%2F86accf86-3db4-402c-bf0d-28beadf9a82a.png</url>
      <title>DEV Community: dmitrii</title>
      <link>https://dev.to/dmitrii_2223</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dmitrii_2223"/>
    <language>en</language>
    <item>
      <title>Как устроена информационная система: проектируем простую систему учета заявок</title>
      <dc:creator>dmitrii</dc:creator>
      <pubDate>Thu, 13 Aug 2026 08:47:24 +0000</pubDate>
      <link>https://dev.to/dmitrii_2223/kak-ustroiena-informatsionnaia-sistiema-proiektiruiem-prostuiu-sistiemu-uchieta-zaiavok-5hhf</link>
      <guid>https://dev.to/dmitrii_2223/kak-ustroiena-informatsionnaia-sistiema-proiektiruiem-prostuiu-sistiemu-uchieta-zaiavok-5hhf</guid>
      <description>&lt;p&gt;Когда слышишь термин «информационная система», первое время он кажется слишком общим. Под него можно подвести почти что угодно: интернет-магазин, банковское приложение, электронный дневник, систему учета сотрудников или даже небольшой сервис для регистрации обращений пользователей.&lt;/p&gt;

&lt;p&gt;Но почти у всех таких систем есть общая задача: получить данные, сохранить их, обработать и предоставить пользователю в удобном виде.&lt;/p&gt;

&lt;p&gt;В этой статье я разберу устройство информационной системы на простом примере — системе учета заявок. Такая система может использоваться внутри компании: сотрудник сообщает о проблеме, заявка сохраняется, специалист берет ее в работу, а затем меняет статус после решения.&lt;/p&gt;

&lt;p&gt;Цель статьи — не создать полноценный промышленный продукт, а показать основные компоненты информационной системы и то, как они взаимодействуют друг с другом.&lt;/p&gt;

&lt;p&gt;Постановка задачи&lt;/p&gt;

&lt;p&gt;Представим небольшую организацию, в которой сотрудники периодически обращаются в техническую поддержку.&lt;/p&gt;

&lt;p&gt;Например:&lt;/p&gt;

&lt;p&gt;не работает принтер;&lt;br&gt;
отсутствует доступ к корпоративной системе;&lt;br&gt;
необходимо установить программу;&lt;br&gt;
возникла проблема с компьютером;&lt;br&gt;
требуется создать новую учетную запись.&lt;/p&gt;

&lt;p&gt;Если подобных обращений немного, их можно принимать через мессенджер или записывать в обычную таблицу.&lt;/p&gt;

&lt;p&gt;Однако со временем возникают проблемы.&lt;/p&gt;

&lt;p&gt;Непонятно, какие заявки уже выполнены, какие еще находятся в работе, кто отвечает за конкретное обращение и когда оно было создано.&lt;/p&gt;

&lt;p&gt;Поэтому имеет смысл создать отдельную информационную систему.&lt;/p&gt;

&lt;p&gt;Пусть она умеет:&lt;/p&gt;

&lt;p&gt;создавать заявку;&lt;br&gt;
хранить информацию о пользователе;&lt;br&gt;
показывать список заявок;&lt;br&gt;
изменять статус заявки;&lt;br&gt;
назначать ответственного сотрудника;&lt;br&gt;
хранить дату создания заявки.&lt;/p&gt;

&lt;p&gt;Получается уже вполне реальная прикладная задача.&lt;/p&gt;

&lt;p&gt;Из чего будет состоять система&lt;/p&gt;

&lt;p&gt;Упрощенно систему можно разделить на три основных уровня:&lt;/p&gt;

&lt;p&gt;Интерфейс пользователя → серверная часть → база данных&lt;/p&gt;

&lt;p&gt;Пользователь работает с интерфейсом. Например, заполняет форму создания заявки.&lt;/p&gt;

&lt;p&gt;Интерфейс отправляет данные на сервер.&lt;/p&gt;

&lt;p&gt;Сервер проверяет их и записывает в базу данных.&lt;/p&gt;

&lt;p&gt;Когда необходимо показать список заявок, происходит обратный процесс: сервер получает информацию из базы данных и передает ее интерфейсу.&lt;/p&gt;

&lt;p&gt;Такое разделение используется во множестве современных приложений.&lt;/p&gt;

&lt;p&gt;Проектирование базы данных&lt;/p&gt;

&lt;p&gt;Начать удобно со структуры данных.&lt;/p&gt;

&lt;p&gt;Для небольшой системы нам понадобятся как минимум две сущности:&lt;/p&gt;

&lt;p&gt;пользователи;&lt;br&gt;
заявки.&lt;/p&gt;

&lt;p&gt;Таблица пользователей может выглядеть следующим образом:&lt;/p&gt;

&lt;p&gt;users&lt;/p&gt;

&lt;p&gt;id&lt;br&gt;
name&lt;br&gt;
email&lt;br&gt;
role&lt;/p&gt;

&lt;p&gt;Здесь id — уникальный идентификатор пользователя.&lt;/p&gt;

&lt;p&gt;Поле role определяет роль. Например:&lt;/p&gt;

&lt;p&gt;user&lt;br&gt;
support&lt;br&gt;
admin&lt;/p&gt;

&lt;p&gt;Теперь создадим таблицу заявок:&lt;/p&gt;

&lt;p&gt;tickets&lt;/p&gt;

&lt;p&gt;id&lt;br&gt;
title&lt;br&gt;
description&lt;br&gt;
status&lt;br&gt;
created_at&lt;br&gt;
author_id&lt;br&gt;
executor_id&lt;/p&gt;

&lt;p&gt;Поле author_id будет содержать идентификатор пользователя, создавшего заявку.&lt;/p&gt;

&lt;p&gt;executor_id — идентификатор сотрудника, который занимается ее выполнением.&lt;/p&gt;

&lt;p&gt;Таким образом, между таблицами возникает связь.&lt;/p&gt;

&lt;p&gt;Один пользователь может создать несколько заявок.&lt;/p&gt;

&lt;p&gt;В терминах баз данных это называется отношением один ко многим.&lt;/p&gt;

&lt;p&gt;Условно схема выглядит так:&lt;/p&gt;

&lt;p&gt;users&lt;br&gt;
+----------+&lt;br&gt;
| id       |&lt;br&gt;
| name     |&lt;br&gt;
| email    |&lt;br&gt;
| role     |&lt;br&gt;
+----------+&lt;br&gt;
     |&lt;br&gt;
     |&lt;br&gt;
     v&lt;br&gt;
tickets&lt;br&gt;
+-------------+&lt;br&gt;
| id          |&lt;br&gt;
| title       |&lt;br&gt;
| description |&lt;br&gt;
| status      |&lt;br&gt;
| created_at  |&lt;br&gt;
| author_id   |&lt;br&gt;
| executor_id |&lt;br&gt;
+-------------+&lt;/p&gt;

&lt;p&gt;Даже на этом этапе становится видно, зачем информационной системе нужна структурированная база данных.&lt;/p&gt;

&lt;p&gt;Если хранить всю информацию в одной большой таблице, данные пользователей придется постоянно дублировать.&lt;/p&gt;

&lt;p&gt;Например, имя и электронная почта автора будут повторяться в каждой его заявке.&lt;/p&gt;

&lt;p&gt;Это усложняет изменение данных и увеличивает вероятность ошибок.&lt;/p&gt;

&lt;p&gt;SQL и создание таблиц&lt;/p&gt;

&lt;p&gt;Для хранения информации можно использовать PostgreSQL.&lt;/p&gt;

&lt;p&gt;Таблица пользователей может быть создана следующим SQL-запросом:&lt;/p&gt;

&lt;p&gt;CREATE TABLE users (&lt;br&gt;
    id SERIAL PRIMARY KEY,&lt;br&gt;
    name VARCHAR(100) NOT NULL,&lt;br&gt;
    email VARCHAR(150) UNIQUE NOT NULL,&lt;br&gt;
    role VARCHAR(30) NOT NULL&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Таблица заявок:&lt;/p&gt;

&lt;p&gt;CREATE TABLE tickets (&lt;br&gt;
    id SERIAL PRIMARY KEY,&lt;br&gt;
    title VARCHAR(200) NOT NULL,&lt;br&gt;
    description TEXT,&lt;br&gt;
    status VARCHAR(30) NOT NULL,&lt;br&gt;
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;author_id INTEGER NOT NULL,
executor_id INTEGER,

FOREIGN KEY (author_id)
    REFERENCES users(id),

FOREIGN KEY (executor_id)
    REFERENCES users(id)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;);&lt;/p&gt;

&lt;p&gt;После этого база данных уже может хранить основные сущности системы.&lt;/p&gt;

&lt;p&gt;Добавим пользователя:&lt;/p&gt;

&lt;p&gt;INSERT INTO users (name, email, role)&lt;br&gt;
VALUES (&lt;br&gt;
    'Иван Петров',&lt;br&gt;
    '&lt;a href="mailto:ivan@example.com"&gt;ivan@example.com&lt;/a&gt;',&lt;br&gt;
    'user'&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Теперь можно создать заявку:&lt;/p&gt;

&lt;p&gt;INSERT INTO tickets (&lt;br&gt;
    title,&lt;br&gt;
    description,&lt;br&gt;
    status,&lt;br&gt;
    author_id&lt;br&gt;
)&lt;br&gt;
VALUES (&lt;br&gt;
    'Не работает принтер',&lt;br&gt;
    'Принтер в кабинете 203 не печатает документы',&lt;br&gt;
    'new',&lt;br&gt;
    1&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Получить все заявки можно обычным запросом:&lt;/p&gt;

&lt;p&gt;SELECT *&lt;br&gt;
FROM tickets;&lt;/p&gt;

&lt;p&gt;Но пользователю системы работать напрямую с SQL, конечно, не нужно.&lt;/p&gt;

&lt;p&gt;Для этого существует серверная часть приложения.&lt;/p&gt;

&lt;p&gt;Зачем нужен backend&lt;/p&gt;

&lt;p&gt;Backend — это часть системы, которая находится между пользовательским интерфейсом и базой данных.&lt;/p&gt;

&lt;p&gt;Именно сервер решает, что разрешено делать пользователю.&lt;/p&gt;

&lt;p&gt;Например, если приложение получает команду:&lt;/p&gt;

&lt;p&gt;Создать заявку&lt;/p&gt;

&lt;p&gt;сервер должен:&lt;/p&gt;

&lt;p&gt;проверить, авторизован ли пользователь;&lt;br&gt;
проверить корректность данных;&lt;br&gt;
сохранить заявку;&lt;br&gt;
вернуть результат.&lt;/p&gt;

&lt;p&gt;Если пользователь пытается изменить чужую заявку или назначить себя администратором, backend должен отклонить запрос.&lt;/p&gt;

&lt;p&gt;Поэтому нельзя строить приложение так, чтобы пользовательский интерфейс напрямую работал с базой данных.&lt;/p&gt;

&lt;p&gt;Сервер выступает контролируемой точкой доступа к информации.&lt;/p&gt;

&lt;p&gt;API&lt;/p&gt;

&lt;p&gt;Связь между интерфейсом и сервером часто строится через API.&lt;/p&gt;

&lt;p&gt;Например, для нашей системы можно определить следующие HTTP-запросы:&lt;/p&gt;

&lt;p&gt;GET /tickets&lt;/p&gt;

&lt;p&gt;Получить список заявок.&lt;/p&gt;

&lt;p&gt;GET /tickets/15&lt;/p&gt;

&lt;p&gt;Получить заявку с идентификатором 15.&lt;/p&gt;

&lt;p&gt;POST /tickets&lt;/p&gt;

&lt;p&gt;Создать новую заявку.&lt;/p&gt;

&lt;p&gt;PATCH /tickets/15&lt;/p&gt;

&lt;p&gt;Изменить заявку.&lt;/p&gt;

&lt;p&gt;Например, при создании обращения интерфейс может отправить серверу JSON:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "title": "Не работает принтер",&lt;br&gt;
  "description": "Принтер не печатает документы"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Сервер обработает запрос и может вернуть:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "id": 42,&lt;br&gt;
  "title": "Не работает принтер",&lt;br&gt;
  "status": "new",&lt;br&gt;
  "created_at": "2026-08-13T10:30:00"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Интерфейсу при этом совершенно не обязательно знать, какой SQL-запрос выполнялся внутри системы.&lt;/p&gt;

&lt;p&gt;Это одно из преимуществ разделения приложения на уровни.&lt;/p&gt;

&lt;p&gt;Статусы заявок&lt;/p&gt;

&lt;p&gt;Практически в любой системе учета появляется понятие состояния объекта.&lt;/p&gt;

&lt;p&gt;Для заявки можно использовать статусы:&lt;/p&gt;

&lt;p&gt;new&lt;br&gt;
in_progress&lt;br&gt;
resolved&lt;br&gt;
closed&lt;/p&gt;

&lt;p&gt;Но просто разрешить менять статус на любой другой — не всегда хорошая идея.&lt;/p&gt;

&lt;p&gt;Например, логично определить последовательность:&lt;/p&gt;

&lt;p&gt;new&lt;br&gt;
  |&lt;br&gt;
  v&lt;br&gt;
in_progress&lt;br&gt;
  |&lt;br&gt;
  v&lt;br&gt;
resolved&lt;br&gt;
  |&lt;br&gt;
  v&lt;br&gt;
closed&lt;/p&gt;

&lt;p&gt;Это уже пример бизнес-логики.&lt;/p&gt;

&lt;p&gt;Бизнес-логика — правила, определяющие поведение информационной системы.&lt;/p&gt;

&lt;p&gt;Например:&lt;/p&gt;

&lt;p&gt;новую заявку может создать любой сотрудник;&lt;br&gt;
назначить исполнителя может только сотрудник поддержки;&lt;br&gt;
закрыть заявку можно только после выполнения;&lt;br&gt;
обычный пользователь не может удалить чужое обращение.&lt;/p&gt;

&lt;p&gt;Именно такие правила превращают обычную базу данных в полноценную информационную систему.&lt;/p&gt;

&lt;p&gt;Авторизация пользователей&lt;/p&gt;

&lt;p&gt;Следующая проблема — как сервер понимает, какой пользователь выполняет запрос.&lt;/p&gt;

&lt;p&gt;Обычно используется механизм авторизации.&lt;/p&gt;

&lt;p&gt;Пользователь вводит логин и пароль.&lt;/p&gt;

&lt;p&gt;После успешной проверки сервер выдает ему токен или создает сессию.&lt;/p&gt;

&lt;p&gt;При дальнейших запросах приложение сообщает серверу, от имени какого пользователя выполняется операция.&lt;/p&gt;

&lt;p&gt;Например:&lt;/p&gt;

&lt;p&gt;POST /tickets&lt;br&gt;
Authorization: Bearer &lt;/p&gt;

&lt;p&gt;Сервер получает идентификатор пользователя из токена и автоматически указывает его как автора новой заявки.&lt;/p&gt;

&lt;p&gt;В реальном приложении пароль нельзя хранить в базе данных в открытом виде.&lt;/p&gt;

&lt;p&gt;Вместо этого хранится его криптографический хеш.&lt;/p&gt;

&lt;p&gt;Это важный пример того, как требования к информационной системе выходят далеко за пределы обычного хранения данных.&lt;/p&gt;

&lt;p&gt;Необходимо учитывать безопасность.&lt;/p&gt;

&lt;p&gt;Интерфейс системы&lt;/p&gt;

&lt;p&gt;Для простого варианта достаточно нескольких страниц.&lt;/p&gt;

&lt;p&gt;Страница входа&lt;/p&gt;

&lt;p&gt;Поля:&lt;/p&gt;

&lt;p&gt;Email&lt;br&gt;
Пароль&lt;br&gt;
Список заявок&lt;/p&gt;

&lt;p&gt;Можно представить его в виде таблицы:&lt;/p&gt;

&lt;p&gt;ID  Название    Статус    Автор  Исполнитель&lt;br&gt;
1   Не работает принтер    new Иван    —&lt;br&gt;
2   Установить программу in_progress Анна    Сергей&lt;br&gt;
3   Нет доступа к системе resolved    Максим    Сергей&lt;br&gt;
Создание заявки&lt;/p&gt;

&lt;p&gt;Пользователь вводит:&lt;/p&gt;

&lt;p&gt;название;&lt;br&gt;
описание проблемы.&lt;/p&gt;

&lt;p&gt;Остальные данные система формирует автоматически.&lt;/p&gt;

&lt;p&gt;Например, дату создания не нужно вводить вручную.&lt;/p&gt;

&lt;p&gt;Страница заявки&lt;/p&gt;

&lt;p&gt;На ней можно показать полную информацию:&lt;/p&gt;

&lt;p&gt;Заявка №15&lt;/p&gt;

&lt;p&gt;Название:&lt;br&gt;
Нет доступа к корпоративной системе&lt;/p&gt;

&lt;p&gt;Описание:&lt;br&gt;
После смены пароля система сообщает об ошибке.&lt;/p&gt;

&lt;p&gt;Автор:&lt;br&gt;
Иван Петров&lt;/p&gt;

&lt;p&gt;Исполнитель:&lt;br&gt;
Сергей Иванов&lt;/p&gt;

&lt;p&gt;Статус:&lt;br&gt;
В работе&lt;/p&gt;

&lt;p&gt;Создана:&lt;br&gt;
13.08.2026&lt;/p&gt;

&lt;p&gt;Такой интерфейс уже позволяет использовать систему в реальной работе.&lt;/p&gt;

&lt;p&gt;Что происходит при создании заявки&lt;/p&gt;

&lt;p&gt;Теперь рассмотрим полный процесс.&lt;/p&gt;

&lt;p&gt;Пользователь нажимает кнопку «Создать заявку».&lt;/p&gt;

&lt;p&gt;Шаг 1. Интерфейс&lt;/p&gt;

&lt;p&gt;Пользователь вводит:&lt;/p&gt;

&lt;p&gt;Название:&lt;br&gt;
Нет доступа к системе&lt;/p&gt;

&lt;p&gt;Описание:&lt;br&gt;
После ввода пароля появляется ошибка&lt;br&gt;
Шаг 2. Запрос к серверу&lt;/p&gt;

&lt;p&gt;Frontend отправляет:&lt;/p&gt;

&lt;p&gt;POST /tickets&lt;/p&gt;

&lt;p&gt;с данными:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "title": "Нет доступа к системе",&lt;br&gt;
  "description": "После ввода пароля появляется ошибка"&lt;br&gt;
}&lt;br&gt;
Шаг 3. Проверка&lt;/p&gt;

&lt;p&gt;Backend проверяет:&lt;/p&gt;

&lt;p&gt;существует ли пользователь;&lt;br&gt;
заполнено ли название;&lt;br&gt;
не превышена ли допустимая длина данных.&lt;br&gt;
Шаг 4. Запись в базу&lt;/p&gt;

&lt;p&gt;Сервер выполняет примерно такой SQL-запрос:&lt;/p&gt;

&lt;p&gt;INSERT INTO tickets (&lt;br&gt;
    title,&lt;br&gt;
    description,&lt;br&gt;
    status,&lt;br&gt;
    author_id&lt;br&gt;
)&lt;br&gt;
VALUES (&lt;br&gt;
    'Нет доступа к системе',&lt;br&gt;
    'После ввода пароля появляется ошибка',&lt;br&gt;
    'new',&lt;br&gt;
    7&lt;br&gt;
);&lt;br&gt;
Шаг 5. Ответ&lt;/p&gt;

&lt;p&gt;Сервер сообщает интерфейсу, что заявка создана.&lt;/p&gt;

&lt;p&gt;Пользователь видит:&lt;/p&gt;

&lt;p&gt;Заявка №43 успешно создана.&lt;/p&gt;

&lt;p&gt;На первый взгляд действие выглядит очень простым.&lt;/p&gt;

&lt;p&gt;Но внутри него взаимодействует сразу несколько частей информационной системы.&lt;/p&gt;

&lt;p&gt;Что произойдет при росте нагрузки&lt;/p&gt;

&lt;p&gt;Для учебного проекта можно запустить backend и базу данных даже на одном компьютере.&lt;/p&gt;

&lt;p&gt;Но представим, что системой пользуются уже не 20 сотрудников, а 100 000 человек.&lt;/p&gt;

&lt;p&gt;Тогда начинают появляться новые задачи.&lt;/p&gt;

&lt;p&gt;Например:&lt;/p&gt;

&lt;p&gt;сервер получает слишком много запросов;&lt;br&gt;
база данных начинает отвечать медленнее;&lt;br&gt;
необходимо хранить резервные копии;&lt;br&gt;
требуется журналирование действий;&lt;br&gt;
появляются требования к отказоустойчивости.&lt;/p&gt;

&lt;p&gt;Архитектура становится сложнее.&lt;/p&gt;

&lt;p&gt;Может появиться несколько серверов:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;          Пользователи
               |
               v
        Балансировщик
         /         \
        v           v
   Backend 1    Backend 2
         \         /
          \       /
           v     v
         Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Балансировщик распределяет запросы между серверами.&lt;/p&gt;

&lt;p&gt;Могут также появляться кеширование, очереди сообщений, репликация базы данных и другие механизмы.&lt;/p&gt;

&lt;p&gt;Но принцип остается тем же: система получает, хранит, обрабатывает и передает информацию.&lt;/p&gt;

&lt;p&gt;Почему нельзя сделать все в одной таблице Excel&lt;/p&gt;

&lt;p&gt;На небольшом количестве данных Excel действительно может решить задачу.&lt;/p&gt;

&lt;p&gt;Допустим, есть таблица:&lt;/p&gt;

&lt;p&gt;Автор  Email   Проблема    Статус    Исполнитель&lt;/p&gt;

&lt;p&gt;Однако при увеличении числа пользователей появляются ограничения.&lt;/p&gt;

&lt;p&gt;Во-первых, информация начинает дублироваться.&lt;/p&gt;

&lt;p&gt;Имя и email пользователя придется записывать снова для каждой заявки.&lt;/p&gt;

&lt;p&gt;Во-вторых, сложно контролировать права доступа.&lt;/p&gt;

&lt;p&gt;В полноценной системе можно разрешить пользователю видеть только свои заявки, а администратору — все.&lt;/p&gt;

&lt;p&gt;В-третьих, становится сложнее работать одновременно большому количеству пользователей.&lt;/p&gt;

&lt;p&gt;Кроме того, информационная система может автоматически проверять данные, отправлять уведомления и выполнять другие действия.&lt;/p&gt;

&lt;p&gt;То есть отличие заключается не только в способе хранения данных, но и в автоматизации процессов вокруг них.&lt;/p&gt;

&lt;p&gt;Что можно добавить в систему дальше&lt;/p&gt;

&lt;p&gt;Даже из такой простой идеи можно постепенно получить достаточно серьезный проект.&lt;/p&gt;

&lt;p&gt;Например, добавить приоритет заявки:&lt;/p&gt;

&lt;p&gt;low&lt;br&gt;
medium&lt;br&gt;
high&lt;br&gt;
critical&lt;/p&gt;

&lt;p&gt;После этого можно реализовать фильтрацию:&lt;/p&gt;

&lt;p&gt;Показать все критические заявки,&lt;br&gt;
которые еще не выполнены.&lt;/p&gt;

&lt;p&gt;SQL-запрос будет выглядеть примерно так:&lt;/p&gt;

&lt;p&gt;SELECT *&lt;br&gt;
FROM tickets&lt;br&gt;
WHERE priority = 'critical'&lt;br&gt;
AND status != 'closed';&lt;/p&gt;

&lt;p&gt;Можно добавить комментарии к заявкам.&lt;/p&gt;

&lt;p&gt;Для этого появляется новая таблица:&lt;/p&gt;

&lt;p&gt;comments&lt;/p&gt;

&lt;p&gt;id&lt;br&gt;
ticket_id&lt;br&gt;
author_id&lt;br&gt;
text&lt;br&gt;
created_at&lt;/p&gt;

&lt;p&gt;После этого одна заявка может иметь множество комментариев.&lt;/p&gt;

&lt;p&gt;Можно добавить историю изменения статусов:&lt;/p&gt;

&lt;p&gt;ticket_history&lt;/p&gt;

&lt;p&gt;id&lt;br&gt;
ticket_id&lt;br&gt;
old_status&lt;br&gt;
new_status&lt;br&gt;
changed_by&lt;br&gt;
changed_at&lt;/p&gt;

&lt;p&gt;Это позволит определить, кто и когда изменил заявку.&lt;/p&gt;

&lt;p&gt;Также можно реализовать:&lt;/p&gt;

&lt;p&gt;прикрепление файлов;&lt;br&gt;
email-уведомления;&lt;br&gt;
поиск;&lt;br&gt;
фильтрацию;&lt;br&gt;
статистику;&lt;br&gt;
личный кабинет;&lt;br&gt;
раздел администратора;&lt;br&gt;
категории заявок;&lt;br&gt;
автоматическое назначение исполнителя.&lt;/p&gt;

&lt;p&gt;Из небольшого учебного приложения постепенно получается достаточно полноценная информационная система.&lt;/p&gt;

&lt;p&gt;Какие технологии можно использовать&lt;/p&gt;

&lt;p&gt;Один из возможных наборов технологий:&lt;/p&gt;

&lt;p&gt;Frontend:&lt;br&gt;
HTML&lt;br&gt;
CSS&lt;br&gt;
JavaScript&lt;/p&gt;

&lt;p&gt;Backend:&lt;br&gt;
Python&lt;br&gt;
FastAPI&lt;/p&gt;

&lt;p&gt;Database:&lt;br&gt;
PostgreSQL&lt;/p&gt;

&lt;p&gt;API:&lt;br&gt;
REST&lt;/p&gt;

&lt;p&gt;Для небольшого проекта этого более чем достаточно.&lt;/p&gt;

&lt;p&gt;При этом конкретные технологии здесь вторичны.&lt;/p&gt;

&lt;p&gt;Backend можно написать на Java, C#, Go, JavaScript или другом языке.&lt;/p&gt;

&lt;p&gt;PostgreSQL можно заменить другой СУБД.&lt;/p&gt;

&lt;p&gt;Главное — понимать назначение каждого компонента и взаимодействие между ними.&lt;/p&gt;

&lt;p&gt;Что я понял при разборе такой системы&lt;/p&gt;

&lt;p&gt;До изучения устройства подобных приложений информационная система может восприниматься просто как программа с базой данных.&lt;/p&gt;

&lt;p&gt;Но в реальности это набор связанных компонентов.&lt;/p&gt;

&lt;p&gt;База данных отвечает за хранение информации.&lt;/p&gt;

&lt;p&gt;Backend реализует правила работы и управляет доступом к данным.&lt;/p&gt;

&lt;p&gt;API определяет способ взаимодействия компонентов.&lt;/p&gt;

&lt;p&gt;Frontend предоставляет пользователю интерфейс.&lt;/p&gt;

&lt;p&gt;Авторизация отвечает за идентификацию пользователей и разграничение прав.&lt;/p&gt;

&lt;p&gt;А архитектура определяет, как все эти части связаны между собой.&lt;/p&gt;

&lt;p&gt;Даже простая система учета заявок затрагивает сразу несколько областей: базы данных, программирование, проектирование архитектуры, безопасность и пользовательские интерфейсы.&lt;/p&gt;

&lt;p&gt;Именно этим информационные системы мне и кажутся интересными: разработчик работает не только над отдельным алгоритмом или интерфейсом, а проектирует целый процесс работы с информацией.&lt;/p&gt;

&lt;p&gt;Заключение&lt;/p&gt;

&lt;p&gt;Информационная система необязательно должна начинаться с огромной архитектуры, десятков сервисов и миллионов пользователей.&lt;/p&gt;

&lt;p&gt;Начать можно с простой задачи.&lt;/p&gt;

&lt;p&gt;Например:&lt;/p&gt;

&lt;p&gt;Пользователь создает заявку, система сохраняет ее, сотрудник принимает ее в работу и после выполнения меняет статус.&lt;/p&gt;

&lt;p&gt;Но даже в таком небольшом сценарии появляются ключевые элементы современной информационной системы:&lt;/p&gt;

&lt;p&gt;пользователи;&lt;br&gt;
база данных;&lt;br&gt;
связи между сущностями;&lt;br&gt;
backend;&lt;br&gt;
API;&lt;br&gt;
интерфейс;&lt;br&gt;
бизнес-логика;&lt;br&gt;
авторизация;&lt;br&gt;
безопасность.&lt;/p&gt;

&lt;p&gt;Именно поэтому небольшой проект зачастую полезнее для понимания информационных технологий, чем попытка сразу изучить устройство огромных систем.&lt;/p&gt;

&lt;p&gt;Разбирая систему по частям, становится понятнее, зачем нужны базы данных, серверная разработка, API и архитектура приложений — и каким образом из этих компонентов собирается единый работающий продукт.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>python</category>
    </item>
  </channel>
</rss>
