# Экскурс в Диаграммы

Перед тем как сесть и делать проект, важно понять, как вообще будет устроена вся система. Это как делать план перед тем, как начать строить дом: ты не хочешь, чтобы всё развалилось через пару месяцев, да? Для этого используются диаграммы, которые помогут понять, как будут взаимодействовать различные части системы. Мы рассмотрим три ключевых типа диаграмм: **ERD**, **функциональное моделирование** и **потоки данных**.

***

## **Диаграммы «сущность-связь» (ERD)**

ERD — это как карта для данных в системе. Она показывает, какие данные с чем связаны, какие сущности есть в системе и как они взаимодействуют между собой. Представь, что у тебя есть база данных с клиентами, заказами и товарами — ERD покажет, как эти элементы связаны.

### **Основные штуки в ERD**

* **Сущность**: это какой-то объект, который сам по себе существует. Например, **Клиент**, **Товар** или **Заказ**.
* **Связь**: это то, как сущности между собой взаимодействуют. Например, **Клиент** может **делать Заказ**, а **Заказ** связан с определённым **Товаром**.

### **Как это работает?**

Типичные связи бывают такие:

* **Один ко многим**: один клиент может делать много заказов, но каждый заказ связан с одним клиентом.
* **Многие ко многим**: например, один товар может быть в нескольких заказах, а заказ может содержать несколько товаров.

**Пример:**

* **Клиент** → «делает» → **Заказ**
* **Заказ** → «содержит» → **Товар**

***

## **Диаграммы функционального моделирования**

Функциональное моделирование — это когда мы в деталях прорабатываем все процессы, которые происходят в системе. Это как схема, показывающая, что, где и как происходит в системе. Она помогает понять, какие процессы есть в системе и как они влияют друг на друга.

### **Какие бывают типы диаграмм**

* **IDEF0**: показывает процессы и их связи. Например, как обрабатываются данные, откуда они приходят и как дальше уходят.
* **IDEF1**: здесь внимание на том, какие данные обрабатываются, и как они структурированы.
* **IDEF2**: модель, которая помогает понять поведение системы во времени — то есть как она реагирует на изменения.
* **IDEF3**: отображает бизнес-процессы и их взаимодействие.

  <figure><img src="https://2529064703-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZmp2bRjGUXDKYx8oNE2V%2Fuploads%2F9Eby1Haxv1ObsPEOuTCW%2Fimage.png?alt=media&#x26;token=5a24ea1a-1d5a-454e-9a83-40cb8fcc17a1" alt=""><figcaption><p><strong>IDEF0</strong></p></figcaption></figure>

  <figure><img src="https://2529064703-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZmp2bRjGUXDKYx8oNE2V%2Fuploads%2F11CI5SVfbFepz2xrucQC%2Fimage.png?alt=media&#x26;token=ffe395ac-b15e-4b0b-9b93-0d8d98c27e5f" alt=""><figcaption><p><strong>IDEF1</strong></p></figcaption></figure>

  <figure><img src="https://2529064703-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZmp2bRjGUXDKYx8oNE2V%2Fuploads%2FNjlD8UwU4MNgNegxAN9L%2Fimage.png?alt=media&#x26;token=6c9c026b-8641-45e4-8eb0-0a8e0530878d" alt=""><figcaption><p><strong>IDEF3</strong></p></figcaption></figure>

### **Как это работает?**

Диаграммы показывают процессы через несколько ключевых элементов:

* **Деятельность**: что происходит (например, «проверка наличия товара»).
* **Стрелки**: показывают, как данные передаются между процессами. Важно понимать, что данные могут быть разного типа:
  * **I (Input)** — что поступает в процесс.
  * **C (Control)** — что управляет процессом.
  * **O (Output)** — результат работы процесса.
  * **M (Mechanism)** — ресурсы или инструменты, которые используются для выполнения задачи.

**Пример:**

Если у тебя процесс "Обработка заказа", он может принимать **Информацию о заказе** (I), проверять **Наличие товара** (C), создавать **Счет** (O) и использовать **Систему управления складом** (M).

***

## **Диаграммы потоков данных (DFD)**

DFD — это диаграмма, которая визуализирует, как данные перемещаются по системе. Главное внимание здесь уделяется тому, как информация передается между процессами и какими внешними системами она обрабатывается.

### **Основные элементы DFD**

* **Процесс**: действие, которое происходит с данными (например, "проверка платежа").
* **Внешняя сущность**: кто или что взаимодействует с системой (например, **Пользователь**, **Клиент** или **Сервер**).
* **Накопитель данных**: место, где данные хранятся (например, база данных).
* **Потоки данных**: линии, которые показывают, как информация перемещается от одной части системы к другой.

**Пример:**

Вот как это может выглядеть в реальной системе:

1. **Клиент** (внешняя сущность) отправляет запрос на снятие денег.
2. Процесс **Обработка запроса** проверяет данные.
3. Если всё ок, информация уходит в **Базу данных** (накопитель данных), и клиент получает деньги.
