<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Аналитик на минималках</title><subtitle>База знаний телеграмм канала &quot;Аналитик на минималках&quot;.
Про аналитику, IT, карьеру, нейросети, программирование.</subtitle><author><name>Аналитик на минималках</name></author><id>https://teletype.in/atom/darin.pro</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/darin.pro?offset=0"></link><link rel="alternate" type="text/html" href="https://notes.darin.pro/?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=darin.pro"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/darin.pro?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-05-06T10:57:26.516Z</updated><entry><id>darin.pro:dwh</id><link rel="alternate" type="text/html" href="https://notes.darin.pro/dwh?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=darin.pro"></link><title>Паттерны проектирования КХД</title><published>2025-07-31T17:06:26.525Z</published><updated>2025-07-31T17:06:26.525Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/56/a1/56a11f86-6f9f-4478-91ab-46c13503527b.png"></media:thumbnail><category term="proektirovanie-khd" label="⭐ Проектирование КХД"></category><tt:hashtag>dwh</tt:hashtag><tt:hashtag>кхд</tt:hashtag><tt:hashtag>проектирование_хранилищ</tt:hashtag><tt:hashtag>базы_данных</tt:hashtag><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/91/0e/910ee527-f0e1-44f3-b0d2-d1507b007c0c.png&quot;&gt;КХД - корпоративное хранилище данных</summary><content type="html">
  &lt;figure id=&quot;aVp2&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/91/0e/910ee527-f0e1-44f3-b0d2-d1507b007c0c.png&quot; width=&quot;1024&quot; /&gt;
    &lt;figcaption&gt;Проектирование хранилища данных&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;blockquote id=&quot;eEtZ&quot;&gt;КХД - корпоративное хранилище данных&lt;/blockquote&gt;
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#YOnt&quot;&gt;OLTP (On-line Transaction Processing) — Транзакционные системы&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#GBm2&quot;&gt;OLAP (On-line Analytical Processing) — Аналитические системы&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#nbpL&quot;&gt;📦 Что такое нормализация?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#pPBV&quot;&gt;✅ 1NF (Первая нормальная форма) — “Ячейки = атомарные значения”&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#Qkw7&quot;&gt;✅ 2NF (Вторая нормальная форма) — “Убираем зависимости не от всего ключа”&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#rnlS&quot;&gt;✅ 3NF (Третья нормальная форма) — “Нет зависимостей между неключевыми полями”&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#LEug&quot;&gt;✅ BCNF (Нормальная форма Бойса-Кодда) — &quot;Все детерминанты — ключи&quot;&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#WCdb&quot;&gt;✅ 4NF (Четвёртая нормальная форма) — &quot;Нет многозначных зависимостей&quot;&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#He0f&quot;&gt;✅ 5NF (Пятая нормальная форма) — &quot;Разложение без потерь&quot;&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#y4nB&quot;&gt;✅ 6NF (Шестая нормальная форма) — &quot;Минимальные атомы, с учётом времени&quot;&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#GTSM&quot;&gt;Схема-звезда (Dimensional Modeling / Kimball)&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#hVNr&quot;&gt;Корпоративное информационное хранилище (Corporate Information Factory / Inmon)&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#n1AH&quot;&gt;Data Vault&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#GvkI&quot;&gt;Как всё это связано с паттернами КХД?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#DUZd&quot;&gt;Итоговая схема:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#ruu5&quot;&gt;⚙️ПРАКТИКА проектирование хранилища&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#TGnH&quot;&gt;Сценарий&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#k7QA&quot;&gt;Шаг 1: Идентификация бизнес-ключей&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#IVvY&quot;&gt;Шаг 2: Проектирование Хабов (Hubs)&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#GLnP&quot;&gt;Шаг 3: Проектирование Линков (Links)&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#0rNz&quot;&gt;Шаг 4: Проектирование Сателлитов (Satellites)&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#AKfO&quot;&gt;Как это работает на практике?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#O4rt&quot;&gt;Что дальше? (Слой витрин данных)&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;p id=&quot;DknL&quot;&gt;✒️ &lt;a href=&quot;https://t.me/+MgheIXzljMozYzJi&quot; target=&quot;_blank&quot;&gt;Автор&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;kIuJ&quot;&gt;Представьте себе два разных мира баз данных: мир быстрых операций и мир глубокого анализа. Инженер данных строит мост (ETL/ELT-процессы) из мира OLTP в мир OLAP. &lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;AiWe&quot;&gt;&lt;strong&gt;OLTP&lt;/strong&gt; — это про запись данных, &lt;strong&gt;OLAP&lt;/strong&gt; — про их чтение и анализ.&lt;/p&gt;
  &lt;/section&gt;
  &lt;h3 id=&quot;YOnt&quot;&gt;&lt;strong&gt;OLTP (On-line Transaction Processing) — Транзакционные системы&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;qhPv&quot;&gt;
    &lt;li id=&quot;ZVfn&quot;&gt;&lt;strong&gt;Что это?&lt;/strong&gt; Это системы, которые обслуживают текущую деятельность бизнеса: кассовый аппарат в магазине, банковское приложение, система бронирования билетов.&lt;/li&gt;
    &lt;li id=&quot;TF1o&quot;&gt;&lt;strong&gt;Задача:&lt;/strong&gt; Быстро и надежно выполнять множество мелких операций (запись, изменение, удаление). Например: &amp;quot;Продать товар X&amp;quot;, &amp;quot;Перевести 100 рублей со счета A на счет B&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;NHUr&quot;&gt;&lt;strong&gt;Ключевая особенность:&lt;/strong&gt; Данные здесь &lt;strong&gt;максимально нормализованы&lt;/strong&gt;. Это критично для целостности данных и избегания аномалий при частых изменениях. OLTP-системы — это и есть те самые &lt;strong&gt;источники данных&lt;/strong&gt; для хранилища.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;GBm2&quot;&gt;&lt;strong&gt;OLAP (On-line Analytical Processing) — Аналитические системы&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;jWJu&quot;&gt;
    &lt;li id=&quot;390y&quot;&gt;&lt;strong&gt;Что это?&lt;/strong&gt; Это и есть наши хранилища данных (КХД) и витрины данных.&lt;/li&gt;
    &lt;li id=&quot;uAJ9&quot;&gt;&lt;strong&gt;Задача:&lt;/strong&gt; Быстро выполнять сложные запросы на больших объемах исторических данных. Например: &amp;quot;Показать средний чек по всем магазинам за последний год с разбивкой по категориям товаров и регионам&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;oyZk&quot;&gt;&lt;strong&gt;Ключевая особенность:&lt;/strong&gt; Данные здесь часто &lt;strong&gt;денормализованны&lt;/strong&gt; (как в схеме &amp;quot;звезда&amp;quot;), чтобы избежать медленных соединений (JOIN) множества таблиц и ускорить агрегацию.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;oME6&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6f/08/6f0809c9-9830-4461-a7ba-f9b1d8645f49.png&quot; width=&quot;1024&quot; /&gt;
    &lt;figcaption&gt;OLTP vs OLAP&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;nbpL&quot;&gt;📦 Что такое нормализация?&lt;/h3&gt;
  &lt;p id=&quot;KzDt&quot;&gt;Нормализация — это &lt;strong&gt;набор правил (форм нормализации)&lt;/strong&gt;, которые помогают организовать таблицы так, чтобы:&lt;/p&gt;
  &lt;ul id=&quot;Dk0X&quot;&gt;
    &lt;li id=&quot;bf4a&quot;&gt;&lt;strong&gt;исключить дублирование данных&lt;/strong&gt; (redundancy),&lt;/li&gt;
    &lt;li id=&quot;Xy51&quot;&gt;&lt;strong&gt;избежать аномалий&lt;/strong&gt; при вставке, обновлении или удалении (insertion/update/delete anomalies),&lt;/li&gt;
    &lt;li id=&quot;8LT5&quot;&gt;упростить сопровождение хранилища.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;pPBV&quot;&gt;✅ 1NF (Первая нормальная форма) — “&lt;strong&gt;Ячейки = атомарные значения&lt;/strong&gt;”&lt;/h3&gt;
  &lt;p id=&quot;Yiei&quot;&gt;📌 &lt;strong&gt;Правило:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;0BdV&quot;&gt;
    &lt;li id=&quot;Z4by&quot;&gt;В таблице &lt;strong&gt;нет повторяющихся групп столбцов&lt;/strong&gt;,&lt;/li&gt;
    &lt;li id=&quot;7c5E&quot;&gt;В каждой ячейке — &lt;strong&gt;одно значение&lt;/strong&gt;, а не список.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Sg8p&quot;&gt;🔍 &lt;strong&gt;Пример плохой таблицы:&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;
  &lt;figure id=&quot;F9M1&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5c/e0/5ce09992-b6dc-479f-bda7-aecec036efbb.png&quot; width=&quot;266&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;QRg7&quot;&gt;🔧 &lt;strong&gt;После нормализации (1NF):&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;jjzc&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f4/4c/f44c2fd9-3842-4dfc-9b12-1f4c6c6a3b0f.png&quot; width=&quot;170&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;b73x&quot;&gt;📎 То есть — &lt;strong&gt;разбиваем списки по строкам&lt;/strong&gt;.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;Qkw7&quot;&gt;✅ 2NF (Вторая нормальная форма) — “&lt;strong&gt;Убираем зависимости не от всего ключа&lt;/strong&gt;”&lt;/h3&gt;
  &lt;p id=&quot;Bvw8&quot;&gt;📌 &lt;strong&gt;Правило:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;wReN&quot;&gt;
    &lt;li id=&quot;i3dG&quot;&gt;Уже есть 1NF.&lt;/li&gt;
    &lt;li id=&quot;f38Q&quot;&gt;Все &lt;strong&gt;неключевые поля&lt;/strong&gt; зависят от &lt;strong&gt;всего составного ключа&lt;/strong&gt;, а не его части.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;g073&quot;&gt;🔍 &lt;strong&gt;Плохой пример:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;biJp&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/01/8e/018e2e2e-3ba9-4c33-9e47-dabbb1edbbda.png&quot; width=&quot;424&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;3Q0p&quot;&gt;🔧 Проблема: &lt;code&gt;имя_клиента&lt;/code&gt; зависит только от &lt;code&gt;заказ_id&lt;/code&gt;, а не от пары (&lt;code&gt;заказ_id&lt;/code&gt;, &lt;code&gt;товар&lt;/code&gt;).&lt;/p&gt;
  &lt;p id=&quot;5zxB&quot;&gt;✅ Надо вынести клиента в отдельную таблицу:&lt;/p&gt;
  &lt;p id=&quot;Qlyp&quot;&gt;&lt;strong&gt;Таблица “заказы”&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;534l&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/49/5d/495deb8b-886a-49eb-8dd2-de165e7a5052.png&quot; width=&quot;219&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;NKFb&quot;&gt;&lt;strong&gt;Таблица “товары в заказах”&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;gDMp&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7d/44/7d44fa98-87a0-47f6-a3db-e28fa89260ea.png&quot; width=&quot;345&quot; /&gt;
  &lt;/figure&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;rnlS&quot;&gt;✅ 3NF (Третья нормальная форма) — “Нет зависимостей между неключевыми полями”&lt;/h3&gt;
  &lt;p id=&quot;bzmO&quot;&gt;📌 &lt;strong&gt;Правило:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;JIMD&quot;&gt;
    &lt;li id=&quot;W3hy&quot;&gt;Уже есть 2NF.&lt;/li&gt;
    &lt;li id=&quot;tYkQ&quot;&gt;Никакое неключевое поле &lt;strong&gt;не зависит от другого неключевого&lt;/strong&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;BZbh&quot;&gt;🔍 &lt;strong&gt;Плохой пример:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;gtRW&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/43/ab/43ab1e6b-c36d-4a50-804a-eacea50f1cc7.png&quot; width=&quot;277&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;o4a0&quot;&gt;🔧 Проблема: &lt;code&gt;индекс&lt;/code&gt; зависит от &lt;code&gt;город&lt;/code&gt;, а не от &lt;code&gt;клиент_id&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;csQa&quot;&gt;✅ Надо вынести справочник городов:&lt;/p&gt;
  &lt;p id=&quot;G90h&quot;&gt;&lt;strong&gt;Таблица “клиенты”&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;Bz6f&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/52/65/5265fe07-02c9-4347-a7f8-0020edd991bd.png&quot; width=&quot;182&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;KIMY&quot;&gt;&lt;strong&gt;Таблица “города”&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;Nv6Q&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/34/bb/34bb5a4f-4120-4239-8388-fb5eb2de965b.png&quot; width=&quot;183&quot; /&gt;
  &lt;/figure&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;LEug&quot;&gt;✅ &lt;strong&gt;BCNF (Нормальная форма Бойса-Кодда)&lt;/strong&gt; — &lt;em&gt;&amp;quot;Все детерминанты — ключи&amp;quot;&lt;/em&gt;&lt;/h3&gt;
  &lt;p id=&quot;ajEY&quot;&gt;📌 Отличие от 3NF:&lt;/p&gt;
  &lt;ul id=&quot;EDST&quot;&gt;
    &lt;li id=&quot;stlN&quot;&gt;3NF допускает, что детерминант (определяющее поле) не обязательно ключ, если зависимое поле — ключ.&lt;/li&gt;
    &lt;li id=&quot;SIuP&quot;&gt;В BCNF — &lt;strong&gt;всё, что определяет другие поля, должно быть кандидатом в ключ&lt;/strong&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;zraX&quot;&gt;🔍 Пример (тонкий случай):&lt;/p&gt;
  &lt;figure id=&quot;8y3i&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4a/aa/4aaae233-909b-4dcd-8417-4f45699f4b49.png&quot; width=&quot;352&quot; /&gt;
  &lt;/figure&gt;
  &lt;ul id=&quot;skuJ&quot;&gt;
    &lt;li id=&quot;4jnZ&quot;&gt;&lt;code&gt;преподаватель → предмет&lt;/code&gt;, &lt;code&gt;аудитория → предмет&lt;/code&gt;, но ни &lt;code&gt;преподаватель&lt;/code&gt;, ни &lt;code&gt;аудитория&lt;/code&gt; не являются уникальными ключами.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;WCdb&quot;&gt;✅ &lt;strong&gt;4NF (Четвёртая нормальная форма)&lt;/strong&gt; — &lt;em&gt;&amp;quot;Нет многозначных зависимостей&amp;quot;&lt;/em&gt;&lt;/h3&gt;
  &lt;p id=&quot;pEjj&quot;&gt;📌 Когда один ключ связан с &lt;strong&gt;несколькими независимыми наборами данных&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;7ptv&quot;&gt;🔍 Пример:&lt;/p&gt;
  &lt;figure id=&quot;2lgp&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/80/f3/80f34207-3167-4406-ab51-0d5cfcaab541.png&quot; width=&quot;425&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;gMum&quot;&gt;→ Здесь &lt;code&gt;студент → курс&lt;/code&gt; и &lt;code&gt;студент → кружок&lt;/code&gt;, но курс и кружок &lt;strong&gt;не зависят друг от друга&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;oHAE&quot;&gt;🔧 Надо разнести в две таблицы:&lt;/p&gt;
  &lt;ul id=&quot;FdD5&quot;&gt;
    &lt;li id=&quot;NuZi&quot;&gt;Таблица “студенты-курсы”&lt;/li&gt;
    &lt;li id=&quot;BNan&quot;&gt;Таблица “студенты-кружки”&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;He0f&quot;&gt;✅ &lt;strong&gt;5NF (Пятая нормальная форма)&lt;/strong&gt; — &lt;em&gt;&amp;quot;Разложение без потерь&amp;quot;&lt;/em&gt;&lt;/h3&gt;
  &lt;p id=&quot;nSw6&quot;&gt;📌 Сложные связи, когда таблица делится &lt;strong&gt;на 3 и более&lt;/strong&gt; таблиц, но при этом при соединении &lt;strong&gt;ничего не теряется&lt;/strong&gt; и не дублируется.&lt;/p&gt;
  &lt;p id=&quot;3aMK&quot;&gt;🔍 Пример: если есть тройная связь &lt;strong&gt;Поставщик — Деталь — Проект&lt;/strong&gt;, и всё работает только в этой тройке, а не по парам.&lt;/p&gt;
  &lt;ul id=&quot;i5do&quot;&gt;
    &lt;li id=&quot;rAnj&quot;&gt;Нельзя просто разделить по парам &lt;code&gt;Поставщик-Деталь&lt;/code&gt;, &lt;code&gt;Поставщик-Проект&lt;/code&gt;, &lt;code&gt;Деталь-Проект&lt;/code&gt; — &lt;strong&gt;некоторые комбинации не будут существовать&lt;/strong&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;y4nB&quot;&gt;✅ &lt;strong&gt;6NF (Шестая нормальная форма)&lt;/strong&gt; — &lt;em&gt;&amp;quot;Минимальные атомы, с учётом времени&amp;quot;&lt;/em&gt;&lt;/h3&gt;
  &lt;p id=&quot;AFsD&quot;&gt;📌 Самая формальная форма. Применяется, когда данные часто &lt;strong&gt;меняются со временем&lt;/strong&gt;, и &lt;strong&gt;каждое значение нужно отслеживать отдельно по времени&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;i9x6&quot;&gt;🔧 Каждое значение — в своей таблице, с временными метками (&lt;code&gt;valid_from&lt;/code&gt;, &lt;code&gt;valid_to&lt;/code&gt;).&lt;/p&gt;
  &lt;p id=&quot;cKMR&quot;&gt;🧠 Это чаще используется:&lt;/p&gt;
  &lt;ul id=&quot;E3IJ&quot;&gt;
    &lt;li id=&quot;CMRi&quot;&gt;в &lt;strong&gt;temporal databases&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;I9dt&quot;&gt;для &lt;strong&gt;декомпозиции фактов&lt;/strong&gt; в хранилищах&lt;/li&gt;
    &lt;li id=&quot;R3BT&quot;&gt;при работе с &lt;strong&gt;медленно меняющимися измерениями (SCD)&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;RwqL&quot;&gt;Для инженера данных ключевое значение имеют три основных подхода к проектированию хранилищ данных (КХД): &lt;strong&gt;моделирование по Кимбаллу (Kimball)&lt;/strong&gt;, &lt;strong&gt;подход Инмона (Inmon)&lt;/strong&gt; и &lt;strong&gt;Data Vault&lt;/strong&gt;. Каждый из них предлагает свою структуру и философию организации данных для аналитики.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;GTSM&quot;&gt;Схема-звезда (Dimensional Modeling / Kimball)&lt;/h2&gt;
  &lt;p id=&quot;Q1Al&quot;&gt;Это, пожалуй, самый популярный и практичный подход для инженеров данных. Его суть — создание простых и понятных структур, оптимизированных для быстрого выполнения запросов.&lt;/p&gt;
  &lt;ul id=&quot;hT9I&quot;&gt;
    &lt;li id=&quot;8EVY&quot;&gt;&lt;strong&gt;Основная идея:&lt;/strong&gt; Данные организуются в виде &amp;quot;схемы-звезды&amp;quot; (star schema) или &amp;quot;снежинки&amp;quot; (snowflake schema).&lt;/li&gt;
    &lt;ul id=&quot;aJFn&quot;&gt;
      &lt;li id=&quot;nWF7&quot;&gt;&lt;strong&gt;Таблица фактов (Fact Table):&lt;/strong&gt; В центре находится таблица с количественными показателями бизнеса (например, продажи, клики, транзакции). Она содержит числовые данные и ключи для связи с таблицами-измерениями.&lt;/li&gt;
      &lt;li id=&quot;ZCDD&quot;&gt;&lt;strong&gt;Таблицы измерений (Dimension Tables):&lt;/strong&gt; Это таблицы, которые описывают факты. Они содержат атрибуты, по которым можно фильтровать и группировать данные (например, клиенты, продукты, даты, география).&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;vhBv&quot;&gt;&lt;strong&gt;Когда использовать:&lt;/strong&gt; Идеально подходит для создания &lt;strong&gt;витрин данных (Data Marts)&lt;/strong&gt;, ориентированных на конкретные бизнес-процессы (маркетинг, продажи, финансы). Отлично работает, когда бизнес-пользователям нужен быстрый и лёгкий доступ к данным для отчётности и BI-аналитики.&lt;/li&gt;
    &lt;li id=&quot;asDT&quot;&gt;&lt;strong&gt;Преимущества:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;A5sT&quot;&gt;
      &lt;li id=&quot;kE6Q&quot;&gt;&lt;strong&gt;Простота:&lt;/strong&gt; Модель интуитивно понятна бизнес-пользователям.&lt;/li&gt;
      &lt;li id=&quot;zFib&quot;&gt;&lt;strong&gt;Производительность:&lt;/strong&gt; Оптимизирована для чтения и агрегации, что ускоряет выполнение запросов.&lt;/li&gt;
      &lt;li id=&quot;9X4s&quot;&gt;&lt;strong&gt;Гибкость:&lt;/strong&gt; Легко добавлять новые атрибуты и показатели.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;jKwM&quot;&gt;&lt;strong&gt;Недостатки:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;86G4&quot;&gt;
      &lt;li id=&quot;PxYN&quot;&gt;&lt;strong&gt;Избыточность данных:&lt;/strong&gt; Денормализация приводит к повторению данных в измерениях.&lt;/li&gt;
      &lt;li id=&quot;ra8X&quot;&gt;&lt;strong&gt;Сложность интеграции:&lt;/strong&gt; Объединение данных из разных &amp;quot;звёзд&amp;quot; может быть затруднительным, что усложняет получение единой картины по всей компании.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;xM5I&quot;&gt;&lt;em&gt;&lt;strong&gt;Пример:&lt;/strong&gt; Таблица фактов &lt;code&gt;Sales&lt;/code&gt; с колонками &lt;code&gt;product_key&lt;/code&gt;, &lt;code&gt;customer_key&lt;/code&gt;, &lt;code&gt;date_key&lt;/code&gt;, &lt;code&gt;amount&lt;/code&gt; и таблицы измерений &lt;code&gt;DimProduct&lt;/code&gt;, &lt;code&gt;DimCustomer&lt;/code&gt;, &lt;code&gt;DimDate&lt;/code&gt;.&lt;/em&gt;**&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;hVNr&quot;&gt;Корпоративное информационное хранилище (Corporate Information Factory / Inmon)&lt;/h2&gt;
  &lt;p id=&quot;vGeh&quot;&gt;Этот подход более академичен и направлен на создание единого, целостного источника правды для всей организации.&lt;/p&gt;
  &lt;ul id=&quot;WM4V&quot;&gt;
    &lt;li id=&quot;bicb&quot;&gt;&lt;strong&gt;Основная идея:&lt;/strong&gt; Проектирование &amp;quot;сверху вниз&amp;quot;. Сначала все данные из разных источников интегрируются в централизованное хранилище данных (Enterprise Data Warehouse, EDW). Это хранилище находится в &lt;strong&gt;третьей нормальной форме (3NF)&lt;/strong&gt;, что устраняет избыточность данных. Уже из этого центрального хранилища создаются витрины данных (Data Marts) для конкретных отделов.&lt;/li&gt;
    &lt;li id=&quot;O3wA&quot;&gt;&lt;strong&gt;Когда использовать:&lt;/strong&gt; В крупных организациях со сложными и разнообразными источниками данных, где целостность и согласованность данных являются главным приоритетом.&lt;/li&gt;
    &lt;li id=&quot;Q2UA&quot;&gt;&lt;strong&gt;Преимущества:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;G4vZ&quot;&gt;
      &lt;li id=&quot;1SvM&quot;&gt;&lt;strong&gt;Единый источник правды:&lt;/strong&gt; Централизованное хранилище обеспечивает целостность и согласованность данных по всей компании.&lt;/li&gt;
      &lt;li id=&quot;nX97&quot;&gt;&lt;strong&gt;Низкая избыточность:&lt;/strong&gt; Нормализация минимизирует дублирование данных.&lt;/li&gt;
      &lt;li id=&quot;WY61&quot;&gt;&lt;strong&gt;Гибкость:&lt;/strong&gt; Легко создавать новые витрины данных для любых нужд.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;0irx&quot;&gt;&lt;strong&gt;Недостатки:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;AgEI&quot;&gt;
      &lt;li id=&quot;neZF&quot;&gt;&lt;strong&gt;Сложность и стоимость:&lt;/strong&gt; Требует значительных начальных усилий и затрат на проектирование и загрузку данных в нормализованную модель.&lt;/li&gt;
      &lt;li id=&quot;5nUu&quot;&gt;&lt;strong&gt;Медленные запросы к EDW:&lt;/strong&gt; Запросы напрямую к центральному хранилищу могут быть медленными из-за большого количества соединений (JOINs). Аналитика обычно выполняется по витринам.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;n1AH&quot;&gt;Data Vault&lt;/h2&gt;
  &lt;blockquote id=&quot;FrG7&quot;&gt;Это гибридный подход, который пытается взять лучшее от моделей Кимбалла и Инмона. Он спроектирован для обеспечения гибкости, масштабируемости и аудируемости хранилища.&lt;/blockquote&gt;
  &lt;ul id=&quot;72Js&quot;&gt;
    &lt;li id=&quot;ki2w&quot;&gt;&lt;strong&gt;Основная идея:&lt;/strong&gt; Модель состоит из трёх основных типов таблиц:&lt;/li&gt;
    &lt;ul id=&quot;vyvx&quot;&gt;
      &lt;li id=&quot;gdIG&quot;&gt;&lt;strong&gt;Хабы (Hubs):&lt;/strong&gt; Содержат уникальные бизнес-ключи (например, &lt;code&gt;customer_id&lt;/code&gt;, &lt;code&gt;product_number&lt;/code&gt;). Они определяют основные бизнес-сущности.&lt;/li&gt;
      &lt;li id=&quot;23fv&quot;&gt;&lt;strong&gt;Линки (Links):&lt;/strong&gt; Определяют связи между хабами. По сути, это таблицы связей &amp;quot;многие-ко-многим&amp;quot;.&lt;/li&gt;
      &lt;li id=&quot;fkn7&quot;&gt;&lt;strong&gt;Саттелиты (Satellites):&lt;/strong&gt; Хранят описательные атрибуты хабов и линков, а также историю их изменений. Каждый саттелит содержит данные из одного источника.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;29HF&quot;&gt;&lt;strong&gt;Когда использовать:&lt;/strong&gt; В средах, где источники данных часто меняются, требования к данным постоянно эволюционируют, и важна полная отслеживаемость (аудируемость) данных. Отлично подходит для построения &lt;strong&gt;&amp;quot;сырого&amp;quot; слоя (Raw DWH)&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;vMI7&quot;&gt;&lt;strong&gt;Преимущества:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;mjB1&quot;&gt;
      &lt;li id=&quot;hDsc&quot;&gt;&lt;strong&gt;Гибкость и масштабируемость:&lt;/strong&gt; Легко добавлять новые источники данных, не перестраивая существующую модель.&lt;/li&gt;
      &lt;li id=&quot;XIdm&quot;&gt;&lt;strong&gt;Аудируемость:&lt;/strong&gt; Структура позволяет отслеживать, откуда и когда поступили данные.&lt;/li&gt;
      &lt;li id=&quot;usN1&quot;&gt;&lt;strong&gt;Параллельная загрузка:&lt;/strong&gt; Компоненты модели (хабы, линки, саттелиты) можно загружать независимо и параллельно.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;DJ6b&quot;&gt;&lt;strong&gt;Недостатки:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;J91Q&quot;&gt;
      &lt;li id=&quot;nbEQ&quot;&gt;&lt;strong&gt;Сложность для конечных пользователей:&lt;/strong&gt; Модель не предназначена для прямых запросов от бизнес-аналитиков. Требует создания витрин данных (в виде схемы-звезды) поверх Data Vault для аналитики.&lt;/li&gt;
      &lt;li id=&quot;tgDE&quot;&gt;&lt;strong&gt;Большое количество таблиц:&lt;/strong&gt; Модель генерирует много таблиц и соединений, что усложняет её понимание.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;GvkI&quot;&gt;Как всё это связано с паттернами КХД?&lt;/h3&gt;
  &lt;p id=&quot;hE6l&quot;&gt;Теперь сложим пазл:&lt;/p&gt;
  &lt;ul id=&quot;ZqbM&quot;&gt;
    &lt;li id=&quot;Bu7S&quot;&gt;&lt;strong&gt;Подход Инмона (Inmon):&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;jMRU&quot;&gt;
      &lt;li id=&quot;ciyv&quot;&gt;Берет данные из &lt;strong&gt;OLTP-систем&lt;/strong&gt;.&lt;/li&gt;
      &lt;li id=&quot;A7GT&quot;&gt;Строит центральное хранилище (EDW) по принципам &lt;strong&gt;OLTP&lt;/strong&gt; — в &lt;strong&gt;третьей нормальной форме (3НФ)&lt;/strong&gt;. Цель — создать единый, целостный источник правды без избыточности.&lt;/li&gt;
      &lt;li id=&quot;UQSn&quot;&gt;Уже из этого нормализованного хранилища строятся &lt;strong&gt;OLAP&lt;/strong&gt;-витрины (часто в виде схемы &amp;quot;звезда&amp;quot;) для аналитиков.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;vTKC&quot;&gt;&lt;strong&gt;Подход Кимбалла (Kimball):&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;SWsS&quot;&gt;
      &lt;li id=&quot;DvT4&quot;&gt;Берет данные из &lt;strong&gt;OLTP-систем&lt;/strong&gt;.&lt;/li&gt;
      &lt;li id=&quot;X0oR&quot;&gt;Сразу строит &lt;strong&gt;OLAP&lt;/strong&gt;-витрины (схема &amp;quot;звезда&amp;quot;). Для этого он намеренно &lt;strong&gt;ОТКАЗЫВАЕТСЯ&lt;/strong&gt; от 3НФ и &lt;strong&gt;денормализует&lt;/strong&gt; данные. Атрибуты (например, название категории товара) копируются прямо в таблицу измерений продуктов, чтобы избежать лишних JOIN&amp;#x27;ов при запросе.&lt;/li&gt;
      &lt;li id=&quot;w6Dp&quot;&gt;Это осознанный компромисс: жертвуем эффективностью хранения ради скорости анализа.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;TUr9&quot;&gt;&lt;strong&gt;Data Vault:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;dvcF&quot;&gt;
      &lt;li id=&quot;mF3y&quot;&gt;Это гибрид, который интересно использует нормализацию.&lt;/li&gt;
      &lt;li id=&quot;esDe&quot;&gt;&lt;strong&gt;Хабы&lt;/strong&gt; (бизнес-ключи) и &lt;strong&gt;Линки&lt;/strong&gt; (связи) очень похожи на нормализованную структуру. Здесь нет избыточности ключей и связей.&lt;/li&gt;
      &lt;li id=&quot;FgzP&quot;&gt;А вот &lt;strong&gt;Саттелиты&lt;/strong&gt;, хранящие атрибуты и их историю, концептуально близки к &lt;strong&gt;шестой нормальной форме (6НФ)&lt;/strong&gt;. Каждый саттелит хранит историю изменений атрибутов из одного источника, что позволяет детально отслеживать их во времени, как и предполагает 6НФ.&lt;/li&gt;
      &lt;li id=&quot;s5H0&quot;&gt;Data Vault сам по себе не является &lt;strong&gt;OLAP&lt;/strong&gt;-системой. Поверх него, как и в подходе Инмона, строят &lt;strong&gt;OLAP&lt;/strong&gt;-витрины по Кимбаллу.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;DUZd&quot;&gt;Итоговая схема:&lt;/h3&gt;
  &lt;ol id=&quot;j6vc&quot;&gt;
    &lt;li id=&quot;YCbv&quot;&gt;&lt;strong&gt;Источник:&lt;/strong&gt; &lt;strong&gt;OLTP&lt;/strong&gt;-системы (базы данных приложений, CRM, ERP), спроектированные в &lt;strong&gt;3НФ&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;xOxy&quot;&gt;&lt;strong&gt;Трансформация (ETL/ELT):&lt;/strong&gt; Инженер данных забирает данные и преобразует их.&lt;/li&gt;
    &lt;li id=&quot;HFhS&quot;&gt;&lt;strong&gt;Хранилище (КХД):&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;6C5N&quot;&gt;
      &lt;li id=&quot;FI2m&quot;&gt;&lt;strong&gt;Инмон:&lt;/strong&gt; Сначала в &lt;strong&gt;3НФ&lt;/strong&gt;, потом в денормализованные витрины.&lt;/li&gt;
      &lt;li id=&quot;Jn4w&quot;&gt;&lt;strong&gt;Кимбалл:&lt;/strong&gt; Сразу в денормализованные витрины (схема &amp;quot;звезда&amp;quot;).&lt;/li&gt;
      &lt;li id=&quot;RV2Y&quot;&gt;&lt;strong&gt;Data Vault:&lt;/strong&gt; В гибридную модель (Хабы/Линки/Саттелиты), которая похожа на смесь нормализации и &lt;strong&gt;6НФ&lt;/strong&gt;.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;NbEa&quot;&gt;&lt;strong&gt;Цель:&lt;/strong&gt; Предоставить данные для &lt;strong&gt;OLAP&lt;/strong&gt; — быстрого и удобного анализа.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;hr /&gt;
  &lt;figure id=&quot;iegx&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/84/5b/845b189b-38db-419d-b1fa-9cbab035ff8f.png&quot; width=&quot;1024&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;ruu5&quot;&gt;&lt;strong&gt;⚙️ПРАКТИКА&lt;/strong&gt; проектирование хранилища&lt;/h2&gt;
  &lt;blockquote id=&quot;CbVo&quot;&gt;Давайте спроектируем хранилище по методологии Data Vault для реального и понятного бизнеса — &lt;strong&gt;интернет-магазина&lt;/strong&gt;.&lt;/blockquote&gt;
  &lt;h3 id=&quot;TGnH&quot;&gt;Сценарий&lt;/h3&gt;
  &lt;ul id=&quot;Uxv6&quot;&gt;
    &lt;li id=&quot;VyFM&quot;&gt;&lt;strong&gt;Бизнес:&lt;/strong&gt; Интернет-магазин &amp;quot;ТехноМир&amp;quot;, продающий электронику.&lt;/li&gt;
    &lt;li id=&quot;P7C2&quot;&gt;&lt;strong&gt;Источники данных:&lt;/strong&gt;&lt;/li&gt;
    &lt;ol id=&quot;XmZc&quot;&gt;
      &lt;li id=&quot;sScS&quot;&gt;&lt;strong&gt;CRM-система:&lt;/strong&gt; Информация о клиентах.&lt;/li&gt;
      &lt;li id=&quot;NMM9&quot;&gt;&lt;strong&gt;Система обработки заказов (Sales DB):&lt;/strong&gt; Данные о заказах и их составе.&lt;/li&gt;
      &lt;li id=&quot;CxWq&quot;&gt;&lt;strong&gt;Каталог товаров (PIM - Product Information Management):&lt;/strong&gt; Информация о продуктах.&lt;/li&gt;
    &lt;/ol&gt;
    &lt;li id=&quot;2S7g&quot;&gt;&lt;strong&gt;Наша задача:&lt;/strong&gt; Построить &amp;quot;сырой&amp;quot; слой хранилища (Raw Data Vault), который интегрирует данные из этих систем, сохраняя всю историю изменений.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;k7QA&quot;&gt;Шаг 1: Идентификация бизнес-ключей&lt;/h3&gt;
  &lt;p id=&quot;u5qb&quot;&gt;Сначала мы находим уникальные, стабильные идентификаторы, которые бизнес использует для отслеживания своих ключевых сущностей. Это &amp;quot;гвозди&amp;quot;, на которых будет держаться вся модель.&lt;/p&gt;
  &lt;ul id=&quot;YT5t&quot;&gt;
    &lt;li id=&quot;BgQw&quot;&gt;&lt;code&gt;customer_id&lt;/code&gt; — Уникальный номер клиента в CRM.&lt;/li&gt;
    &lt;li id=&quot;BhrG&quot;&gt;&lt;code&gt;order_number&lt;/code&gt; — Уникальный номер заказа.&lt;/li&gt;
    &lt;li id=&quot;boXU&quot;&gt;&lt;code&gt;product_sku&lt;/code&gt; — Артикул товара, уникальный идентификатор продукта.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;IVvY&quot;&gt;Шаг 2: Проектирование Хабов (Hubs)&lt;/h3&gt;
  &lt;p id=&quot;sznv&quot;&gt;Хабы — это таблицы, хранящие &lt;strong&gt;только&lt;/strong&gt; бизнес-ключи. Они являются якорями для наших бизнес-сущностей.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;CVcw&quot;&gt;HUB_CUSTOMER (Клиенты)&lt;/p&gt;
  &lt;/section&gt;
  &lt;figure id=&quot;6EVg&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe srcdoc=&quot;&lt;table style=&amp;quot;border-collapse: collapse; width: 100%;&amp;quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&amp;quot;background-color: #f2f2f2;&amp;quot;&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Имя столбца&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Тип&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Описание&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;H_CUSTOMER_HK&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;BINARY(16)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;PK. Хэш от customer_id. Первичный ключ.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;customer_id&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(50)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Бизнес-ключ из CRM.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;LoadDate&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;DATETIME&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Дата загрузки записи.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;RecordSource&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(10)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Источник (напр., &amp;#x27;CRM&amp;#x27;).&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;BsI3&quot;&gt;HUB_ORDER (Заказы)&lt;/p&gt;
  &lt;/section&gt;
  &lt;figure id=&quot;Oj6K&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe srcdoc=&quot;&lt;table style=&amp;quot;border-collapse: collapse; width: 100%;&amp;quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&amp;quot;background-color: #f2f2f2;&amp;quot;&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Имя столбца&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Тип&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Описание&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;H_ORDER_HK&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;BINARY(16)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;PK. Хэш от order_number.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;order_number&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(50)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Бизнес-ключ из Sales DB.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;LoadDate&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;DATETIME&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Дата загрузки записи.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;RecordSource&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(10)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Источник (напр., &amp;#x27;SalesDB&amp;#x27;).&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;gFms&quot;&gt;HUB_PRODUCT (Товары)&lt;/p&gt;
  &lt;/section&gt;
  &lt;figure id=&quot;RkBB&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe srcdoc=&quot;&lt;table style=&amp;quot;border-collapse: collapse; width: 100%;&amp;quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&amp;quot;background-color: #f2f2f2;&amp;quot;&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Имя столбца&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Тип&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Описание&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;H_PRODUCT_HK&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;BINARY(16)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;PK. Хэш от product_sku.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;product_sku&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(50)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Бизнес-ключ из PIM.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;LoadDate&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;DATETIME&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Дата загрузки записи.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;RecordSource&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(10)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Источник (напр., &amp;#x27;PIM&amp;#x27;).&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;GLnP&quot;&gt;Шаг 3: Проектирование Линков (Links)&lt;/h3&gt;
  &lt;p id=&quot;Fc5O&quot;&gt;Линки — это таблицы, которые определяют связи между хабами. Они не хранят никаких атрибутов, только хэш-ключи хабов, которые они соединяют.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;2xKW&quot;&gt;LNK_CUSTOMER_ORDER (Связь &amp;quot;Клиент сделал Заказ&amp;quot;)&lt;/p&gt;
  &lt;/section&gt;
  &lt;figure id=&quot;5Ser&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe srcdoc=&quot;&lt;table style=&amp;quot;border-collapse: collapse; width: 100%;&amp;quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&amp;quot;background-color: #f2f2f2;&amp;quot;&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Имя столбца&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Тип&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Описание&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;L_CUSTOMER_ORDER_HK&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;BINARY(16)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;PK. Хэш от конкатенации H_CUSTOMER_HK и H_ORDER_HK.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;H_CUSTOMER_HK&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;BINARY(16)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;FK. Ссылка на HUB_CUSTOMER.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;H_ORDER_HK&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;BINARY(16)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;FK. Ссылка на HUB_ORDER.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;LoadDate&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;DATETIME&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Дата загрузки записи.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;RecordSource&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(10)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Источник (напр., &amp;#x27;SalesDB&amp;#x27;).&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;smZk&quot;&gt;LNK_ORDER_PRODUCT (Связь &amp;quot;Заказ содержит Товар&amp;quot;)&lt;/p&gt;
  &lt;/section&gt;
  &lt;figure id=&quot;9t9e&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe srcdoc=&quot;&lt;table style=&amp;quot;border-collapse: collapse; width: 100%;&amp;quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&amp;quot;background-color: #f2f2f2;&amp;quot;&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Имя столбца&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Тип&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Описание&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;L_ORDER_PRODUCT_HK&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;BINARY(16)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;PK. Хэш от конкатенации H_ORDER_HK и H_PRODUCT_HK.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;H_ORDER_HK&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;BINARY(16)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;FK. Ссылка на HUB_ORDER.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;H_PRODUCT_HK&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;BINARY(16)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;FK. Ссылка на HUB_PRODUCT.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;LoadDate&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;DATETIME&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Дата загрузки записи.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;RecordSource&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(10)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Источник (напр., &amp;#x27;SalesDB&amp;#x27;).&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;0rNz&quot;&gt;Шаг 4: Проектирование Сателлитов (Satellites)&lt;/h3&gt;
  &lt;p id=&quot;6p7J&quot;&gt;Сателлиты — это таблицы, которые хранят описательные, изменяющиеся во времени атрибуты. Они &amp;quot;висят&amp;quot; на хабах или линках и отслеживают всю историю изменений.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;Ve2W&quot;&gt;SAT_CUSTOMER_DETAILS (Детали о клиенте)&lt;/p&gt;
  &lt;/section&gt;
  &lt;figure id=&quot;dYGY&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe srcdoc=&quot;&lt;table style=&amp;quot;border-collapse: collapse; width: 100%;&amp;quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&amp;quot;background-color: #f2f2f2;&amp;quot;&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Имя столбца&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Тип&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Описание&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;H_CUSTOMER_HK&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;BINARY(16)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;PK, FK. Ссылка на HUB_CUSTOMER.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;LoadDate&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;DATETIME&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;PK. Дата загрузки этой версии записи.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;HashDiff&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;BINARY(16)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Хэш от атрибутов для быстрого обнаружения изменений.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;first_name&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(100)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Имя клиента.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;email&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(100)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Электронная почта.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;registration_date&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;DATE&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Дата регистрации.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;RecordSource&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(10)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Источник (напр., &amp;#x27;CRM&amp;#x27;).&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;AOAT&quot;&gt;SAT_ORDER_DETAILS (Детали о заказе)&lt;/p&gt;
  &lt;/section&gt;
  &lt;figure id=&quot;UdXB&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe srcdoc=&quot;&lt;table style=&amp;quot;border-collapse: collapse; width: 100%;&amp;quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&amp;quot;background-color: #f2f2f2;&amp;quot;&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Имя столбца&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Тип&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Описание&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;H_ORDER_HK&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;BINARY(16)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;PK, FK. Ссылка на HUB_ORDER.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;LoadDate&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;DATETIME&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;PK. Дата загрузки этой версии записи.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;HashDiff&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;BINARY(16)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Хэш от атрибутов.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;order_date&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;DATETIME&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Дата и время заказа.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;order_status&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(20)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Статус (напр., &amp;#x27;Processing&amp;#x27;, &amp;#x27;Shipped&amp;#x27;).&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;shipping_address&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(255)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Адрес доставки.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;RecordSource&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(10)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Источник (напр., &amp;#x27;SalesDB&amp;#x27;).&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;LAQb&quot;&gt;SAT_PRODUCT_DETAILS (Детали о товаре)&lt;/p&gt;
  &lt;/section&gt;
  &lt;figure id=&quot;xCA4&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe srcdoc=&quot;&lt;table style=&amp;quot;border-collapse: collapse; width: 100%;&amp;quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&amp;quot;background-color: #f2f2f2;&amp;quot;&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Имя столбца&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Тип&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Описание&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;H_PRODUCT_HK&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;BINARY(16)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;PK, FK. Ссылка на HUB_PRODUCT.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;LoadDate&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;DATETIME&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;PK. Дата загрузки этой версии записи.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;HashDiff&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;BINARY(16)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Хэш от атрибутов.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;product_name&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(255)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Название товара.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;category&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(100)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Категория.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;price&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;DECIMAL(10,2)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Текущая цена.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;RecordSource&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(10)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Источник (напр., &amp;#x27;PIM&amp;#x27;).&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;AGwM&quot;&gt;SAT_LNK_ORDER_PRODUCT_DETAILS (Детали о строке заказа)&lt;/p&gt;
  &lt;/section&gt;
  &lt;figure id=&quot;C3VS&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe srcdoc=&quot;&lt;table style=&amp;quot;border-collapse: collapse; width: 100%;&amp;quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&amp;quot;background-color: #f2f2f2;&amp;quot;&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Имя столбца&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Тип&lt;/th&gt;
      &lt;th style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Описание&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;L_ORDER_PRODUCT_HK&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;BINARY(16)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;PK, FK. Ссылка на LNK_ORDER_PRODUCT.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;LoadDate&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;DATETIME&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;PK. Дата загрузки этой версии записи.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;HashDiff&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;BINARY(16)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Хэш от атрибутов.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;quantity&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;INT&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Количество товара в заказе.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;price_per_item&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;DECIMAL(10,2)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Цена за единицу в момент заказа.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;RecordSource&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;VARCHAR(10)&lt;/td&gt;
      &lt;td style=&amp;quot;border: 1px solid #ccc; padding: 8px;&amp;quot;&gt;Источник (напр., &amp;#x27;SalesDB&amp;#x27;).&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;AKfO&quot;&gt;Как это работает на практике?&lt;/h3&gt;
  &lt;p id=&quot;pAFT&quot;&gt;Представим, что &lt;strong&gt;25.07.2025&lt;/strong&gt; новый клиент &lt;code&gt;C123&lt;/code&gt; (Иван) делает заказ &lt;code&gt;ORD987&lt;/code&gt; на 2 смартфона &lt;code&gt;SKU-XYZ&lt;/code&gt;.&lt;/p&gt;
  &lt;ol id=&quot;mihq&quot;&gt;
    &lt;li id=&quot;ih8J&quot;&gt;&lt;strong&gt;Загрузка в Хабы:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;z8xp&quot;&gt;
      &lt;li id=&quot;Gbhe&quot;&gt;В &lt;code&gt;HUB_CUSTOMER&lt;/code&gt; добавляется запись с &lt;code&gt;customer_id = &amp;#x27;C123&amp;#x27;&lt;/code&gt;.&lt;/li&gt;
      &lt;li id=&quot;QT5a&quot;&gt;В &lt;code&gt;HUB_ORDER&lt;/code&gt; добавляется запись с &lt;code&gt;order_number = &amp;#x27;ORD987&amp;#x27;&lt;/code&gt;.&lt;/li&gt;
      &lt;li id=&quot;l4y4&quot;&gt;В &lt;code&gt;HUB_PRODUCT&lt;/code&gt; добавляется запись с &lt;code&gt;product_sku = &amp;#x27;SKU-XYZ&amp;#x27;&lt;/code&gt; (если ее там еще нет).&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;RmUN&quot;&gt;&lt;strong&gt;Загрузка в Линки:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;MmgX&quot;&gt;
      &lt;li id=&quot;k817&quot;&gt;В &lt;code&gt;LNK_CUSTOMER_ORDER&lt;/code&gt; создается связь между хэшами клиента &lt;code&gt;C123&lt;/code&gt; и заказа &lt;code&gt;ORD987&lt;/code&gt;.&lt;/li&gt;
      &lt;li id=&quot;pRaf&quot;&gt;В &lt;code&gt;LNK_ORDER_PRODUCT&lt;/code&gt; создается связь между хэшами заказа &lt;code&gt;ORD987&lt;/code&gt; и продукта &lt;code&gt;SKU-XYZ&lt;/code&gt;.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;KZ7L&quot;&gt;&lt;strong&gt;Загрузка в Сателлиты:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;6twu&quot;&gt;
      &lt;li id=&quot;IRSW&quot;&gt;В &lt;code&gt;SAT_CUSTOMER_DETAILS&lt;/code&gt; добавляется запись с именем &amp;quot;Иван&amp;quot; и его email, привязанная к хэшу клиента &lt;code&gt;C123&lt;/code&gt;.&lt;/li&gt;
      &lt;li id=&quot;Vy5w&quot;&gt;В &lt;code&gt;SAT_ORDER_DETAILS&lt;/code&gt; добавляется запись со статусом &amp;quot;Processing&amp;quot; и адресом доставки, привязанная к хэшу заказа &lt;code&gt;ORD987&lt;/code&gt;.&lt;/li&gt;
      &lt;li id=&quot;dg9l&quot;&gt;В &lt;code&gt;SAT_LNK_ORDER_PRODUCT_DETAILS&lt;/code&gt; добавляется запись с &lt;code&gt;quantity = 2&lt;/code&gt;, привязанная к хэшу связи заказа и товара.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;lQip&quot;&gt;&lt;strong&gt;Что если клиент изменит email?&lt;/strong&gt; При следующей загрузке данных система вычислит новый &lt;code&gt;HashDiff&lt;/code&gt; для атрибутов клиента. Так как он не совпадет со старым, в &lt;code&gt;SAT_CUSTOMER_DETAILS&lt;/code&gt; будет добавлена &lt;strong&gt;новая строка&lt;/strong&gt; с тем же &lt;code&gt;H_CUSTOMER_HK&lt;/code&gt;, но новой &lt;code&gt;LoadDate&lt;/code&gt; и новым email. Старая запись останется нетронутой. &lt;strong&gt;Мы сохранили историю!&lt;/strong&gt;&lt;/p&gt;
  &lt;h3 id=&quot;O4rt&quot;&gt;Что дальше? (Слой витрин данных)&lt;/h3&gt;
  &lt;p id=&quot;a9ar&quot;&gt;Эта структура идеальна для хранения и интеграции данных, но неудобна для прямого анализа. Поэтому следующим шагом инженер данных строит поверх этого &amp;quot;сырого&amp;quot; слоя &lt;strong&gt;витрину данных&lt;/strong&gt; (Data Mart) в виде привычной &lt;strong&gt;схемы-звезды&lt;/strong&gt;:&lt;/p&gt;
  &lt;ul id=&quot;fGse&quot;&gt;
    &lt;li id=&quot;PvNf&quot;&gt;&lt;strong&gt;FactSales (Таблица фактов):&lt;/strong&gt; Собирается из линков и их сателлитов. Будет содержать &lt;code&gt;H_CUSTOMER_HK&lt;/code&gt;, &lt;code&gt;H_PRODUCT_HK&lt;/code&gt;, &lt;code&gt;quantity&lt;/code&gt;, &lt;code&gt;total_amount&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;RD7W&quot;&gt;&lt;strong&gt;DimCustomer (Измерение клиентов):&lt;/strong&gt; Собирается из &lt;code&gt;HUB_CUSTOMER&lt;/code&gt; и его сателлита &lt;code&gt;SAT_CUSTOMER_DETAILS&lt;/code&gt; (берется последняя, актуальная версия данных).&lt;/li&gt;
    &lt;li id=&quot;dcjh&quot;&gt;&lt;strong&gt;DimProduct, DimDate и т.д.&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;1t6X&quot;&gt;Теперь бизнес-аналитики могут легко делать свои OLAP-запросы к этой простой и понятной &amp;quot;звезде&amp;quot;, а в основе у нас лежит надежное, аудируемое и гибкое хранилище Data Vault.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;WTA7&quot;&gt;⚙️ Контент создается в рамках программы &amp;quot;Базы знаний&amp;quot; телеграмм канала &amp;quot;Аналитик на минималках&amp;quot; &lt;a href=&quot;https://t.me/+MgheIXzljMozYzJi&quot; target=&quot;_blank&quot;&gt;https://t.me/+MgheIXzljMozYzJi&lt;/a&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;tt-tags id=&quot;IDQG&quot;&gt;
    &lt;tt-tag name=&quot;dwh&quot;&gt;#dwh&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;кхд&quot;&gt;#кхд&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;проектирование_хранилищ&quot;&gt;#проектирование_хранилищ&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;базы_данных&quot;&gt;#базы_данных&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>darin.pro:vpn</id><link rel="alternate" type="text/html" href="https://notes.darin.pro/vpn?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=darin.pro"></link><title>VPN который работает всегда ✅</title><published>2025-06-28T07:55:42.307Z</published><updated>2025-06-28T07:55:42.307Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/b0/b6/b0b66875-064b-4582-8160-c10b3b558796.png"></media:thumbnail><category term="poleznye-servisy-i-instrumenty-it" label="Полезные сервисы и инструменты IT"></category><tt:hashtag>vpn</tt:hashtag><tt:hashtag>it_инструменты</tt:hashtag><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/c0/7d/c07d1470-d41f-4bad-af60-aba3664720dd.jpeg&quot;&gt;✒️ Автор</summary><content type="html">
  &lt;figure id=&quot;ERtA&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c0/7d/c07d1470-d41f-4bad-af60-aba3664720dd.jpeg&quot; width=&quot;1024&quot; /&gt;
  &lt;/figure&gt;
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#EIye&quot;&gt;Как я его нашел&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#8n6O&quot;&gt;Преимущества HOUR VPN&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#BPzo&quot;&gt;Как использовать&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#zp2p&quot;&gt;Бонус 📌 Как использовать VPN бесплатно&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;p id=&quot;6cNN&quot;&gt;✒️ &lt;a href=&quot;https://t.me/+MgheIXzljMozYzJi&quot; target=&quot;_blank&quot;&gt;Автор&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;HWvK&quot;&gt;⚙️ &lt;a href=&quot;https://t.me/hour_vpn_bot?start=KHcbgebBQh&quot; target=&quot;_blank&quot;&gt;Сервис VPN&lt;/a&gt; &lt;/p&gt;
  &lt;hr /&gt;
  &lt;blockquote id=&quot;5uGJ&quot;&gt;&lt;a href=&quot;https://t.me/hour_vpn_bot?start=KHcbgebBQh&quot; target=&quot;_blank&quot;&gt;ВПН&lt;/a&gt; — это тот инструмент сейчас, без которого границы возможностей сужаются.&lt;/blockquote&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;FMQL&quot;&gt;Я думаю многие из вас сталкивались с такими проблемами при подборе такого инструмента:&lt;/p&gt;
  &lt;ul id=&quot;ftH5&quot;&gt;
    &lt;li id=&quot;wS7M&quot;&gt;перестает работать и приходится искать новый;&lt;/li&gt;
    &lt;li id=&quot;yay3&quot;&gt;низкая скорость;&lt;/li&gt;
    &lt;li id=&quot;CJvB&quot;&gt;если работает на компьютере, то как использовать на телефоне;&lt;/li&gt;
    &lt;li id=&quot;bely&quot;&gt;платный и дорого, месячная подписка;&lt;/li&gt;
    &lt;li id=&quot;ml8W&quot;&gt;утечка персональных данных.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;EIye&quot;&gt;Как я его нашел&lt;/h2&gt;
  &lt;p id=&quot;PApY&quot;&gt;В рекомендациях ютуба мне подкинули видео &amp;quot;как развернуть свой собственный vpn на удаленном сервере&amp;quot;.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;ND9e&quot;&gt;Сразу совет - смотрите, ищете материал только полезный для себя, не нужно искать новости, какой то треш, мемасики. Система запоминает ваши действия и начинает подкидывать соответствующий контент. &lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;cuSS&quot;&gt;Я просмотрел это видео, и вот сразу видно, что оно заточено на полезность, а не на красивое оформление мусора. Автор именно показал все шаг за шагом и показал, что из этого должно получится, дал &lt;a href=&quot;https://t.me/hour_vpn_bot?start=KHcbgebBQh&quot; target=&quot;_blank&quot;&gt;ссылку &lt;/a&gt;на готовый инструмент.&lt;/p&gt;
  &lt;p id=&quot;aG36&quot;&gt;А получился работающий сервис VPN с разными протоколами, с возможностью подключаться и через компьютер и через телефон а интерфейс взаимодействия через телеграмм бота.&lt;/p&gt;
  &lt;figure id=&quot;YuH3&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/15/51/155176b9-bf72-4fdc-b987-877e9e660e95.png&quot; width=&quot;484&quot; /&gt;
    &lt;figcaption&gt;интерфейс телеграмм бота vpn&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;8fPr&quot;&gt;Так как видео автора были не особо красивыми и с кричащими заголовками, то просмотров у него было немного.&lt;/p&gt;
  &lt;p id=&quot;pt4r&quot;&gt;Мои мысли на тот момент: &lt;/p&gt;
  &lt;ul id=&quot;nYgf&quot;&gt;
    &lt;li id=&quot;qmBY&quot;&gt;мне нужен свой vpn или мне нужен инструмент, которым удобно пользоваться?&lt;/li&gt;
    &lt;li id=&quot;GbB3&quot;&gt;мне важно пользоваться только тогда, когда он нужен или оплачивать работу сервера?&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;8n6O&quot;&gt;Преимущества HOUR VPN&lt;/h2&gt;
  &lt;ol id=&quot;UGcO&quot;&gt;
    &lt;li id=&quot;zjod&quot;&gt;Модель оплаты за 1 час&lt;/li&gt;
    &lt;li id=&quot;ZyB4&quot;&gt;Низкая стоимость, всего 0,25 руб за 1 час использования. Или 6 руб в день за 1 ключ&lt;/li&gt;
    &lt;li id=&quot;VFpc&quot;&gt;Возможность использовать бесплатно&lt;/li&gt;
    &lt;li id=&quot;PUpI&quot;&gt;Выбирать сервер подключения автоматически, в зависимости от нагрузки&lt;/li&gt;
    &lt;li id=&quot;clwM&quot;&gt;Мультиплатформенность (телефон, компьютер)&lt;/li&gt;
    &lt;li id=&quot;KPop&quot;&gt;Управление через телеграмм бота&lt;/li&gt;
    &lt;li id=&quot;Q8Mq&quot;&gt;Неограниченное количество ключей&lt;/li&gt;
    &lt;li id=&quot;6Ri2&quot;&gt;Мульти скидки за пополнение и количество используемых ключей&lt;/li&gt;
    &lt;li id=&quot;wp9J&quot;&gt;Бесперебойность работы&lt;/li&gt;
    &lt;li id=&quot;bJDY&quot;&gt;Простота использования&lt;/li&gt;
  &lt;/ol&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;BPzo&quot;&gt;Как использовать&lt;/h2&gt;
  &lt;p id=&quot;xLpW&quot;&gt;🟢 Перейти по ссылке - &lt;a href=&quot;https://t.me/hour_vpn_bot?start=KHcbgebBQh&quot; target=&quot;_blank&quot;&gt;https://t.me/hour_vpn_bot?start=KHcbgebBQh&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;dEpI&quot;&gt;Сразу получаете на баланс стартовый депозит 30 руб. Поверьте эти 30 руб можно использовать вечно 😜 читайте ниже инструкцию)&lt;/p&gt;
  &lt;p id=&quot;IhpA&quot;&gt;Далее все интуитивно понятно &amp;gt;&amp;gt;&amp;gt; &lt;strong&gt;Создать VPN 🔐&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;Shcm&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f7/97/f797b070-946f-4a22-8235-1e465a1d36e5.png&quot; width=&quot;532&quot; /&gt;
    &lt;figcaption&gt;выбор протокола VPN&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ddQV&quot;&gt;Что удобно, что все расписано. Я предпочитаю не изобретать велосипед и выбираю современный и надежный протокол без блокировок от провайдеров VLESS.&lt;/p&gt;
  &lt;figure id=&quot;8023&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/07/a3/07a383f8-f1fe-469c-bcbb-8a87cd61c2c7.png&quot; width=&quot;545&quot; /&gt;
    &lt;figcaption&gt;выбор страны VPN&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Q7VA&quot;&gt;Рекомендованная страна обычно обозначается 👈&lt;/p&gt;
  &lt;p id=&quot;SEAg&quot;&gt;Но по привычке я использую страну близлежайшую к себе, это Казахстан. Знаю что все популярные сервисы по типу чата GPT пускают без проблем.&lt;/p&gt;
  &lt;figure id=&quot;tYT0&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ab/3d/ab3de507-f159-4370-843b-1418423f94c3.png&quot; width=&quot;543&quot; /&gt;
    &lt;figcaption&gt;выбор сервера VPN&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;gu27&quot;&gt;Можно выбирать любой, либо довериться системе и она выберет менее нагруженный.&lt;/p&gt;
  &lt;figure id=&quot;hgj5&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ab/f1/abf1b5ba-ef83-4247-b207-76c7fc559bcf.png&quot; width=&quot;811&quot; /&gt;
    &lt;figcaption&gt;получение ключа доступа VPN&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;blW7&quot;&gt;Вот и получили на ключ доступа 🔑, а далее можно посмотреть по кнопкам на какой платформе мы будем его использовать и получить подробную инструкцию, как этим ключом пользоваться.&lt;/p&gt;
  &lt;blockquote id=&quot;8YtG&quot;&gt;Вот например как это выглядит для WINDOWS:&lt;/blockquote&gt;
  &lt;figure id=&quot;u78i&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/60/58/6058bdc5-75b8-48e4-b121-0e94ae291d36.png&quot; width=&quot;585&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;7ix2&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/62/76/6276a66e-7b2e-47c7-8a38-fe96cf01eae0.png&quot; width=&quot;545&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;dAoX&quot;&gt;Даже саму программу не нужно искать где то, сам установщик уже приложен. А также все по шагам на скриншотах.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;zp2p&quot;&gt;Бонус 📌 Как использовать VPN бесплатно&lt;/h2&gt;
  &lt;p id=&quot;iNXP&quot;&gt;Зачастую нам нужно что-то посмотреть, спросить у чата GPT или поработать с зарубежными сервисами всего пару часиков.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;t6V4&quot;&gt;Так как оплата производится за 1 час использования и списывают 0,25 руб, то мы просто пользуемся меньше часа и пересоздаем ключ повторно 😉&lt;/p&gt;
  &lt;/section&gt;
  &lt;ol id=&quot;Pap5&quot;&gt;
    &lt;li id=&quot;HetH&quot;&gt;В главном меню нужно нажать на &lt;strong&gt;Мой VPN 🔑&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;ezaL&quot;&gt;Выбрать действующий ключ&lt;/li&gt;
    &lt;li id=&quot;4V2S&quot;&gt;Нажать &lt;strong&gt;Удалить ключ 🚫 &lt;/strong&gt;и подтвердить действие&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure id=&quot;mLKs&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5e/c9/5ec901cd-7180-45c1-99b6-dbaa95af569d.png&quot; width=&quot;766&quot; /&gt;
  &lt;/figure&gt;
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;WGR2&quot;&gt;⚙️ Контент создается в рамках программы &amp;quot;Базы знаний&amp;quot; телеграмм канала &amp;quot;Аналитик на минималках&amp;quot; &lt;a href=&quot;https://t.me/+MgheIXzljMozYzJi&quot; target=&quot;_blank&quot;&gt;https://t.me/+MgheIXzljMozYzJi&lt;/a&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;tt-tags id=&quot;RGeu&quot;&gt;
    &lt;tt-tag name=&quot;vpn&quot;&gt;#vpn&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;it_инструменты&quot;&gt;#it_инструменты&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry></feed>