<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Data Vault 2.0 - DataTalks.RU. Data Engineering / DWH / Data Pipeline</title>
	<atom:link href="https://datatalks.ru/category/data-vault-2-0/feed/" rel="self" type="application/rss+xml" />
	<link>https://datatalks.ru/category/data-vault-2-0/</link>
	<description>RoadMap для инженера данных. Дорожная карта по инструментам Data Engineer</description>
	<lastBuildDate>Sat, 11 Oct 2025 09:23:21 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://datatalks.ru/wp-content/uploads/2024/12/cropped-logo_datatalks-32x32.png</url>
	<title>Data Vault 2.0 - DataTalks.RU. Data Engineering / DWH / Data Pipeline</title>
	<link>https://datatalks.ru/category/data-vault-2-0/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Перевод 7 Главы &#8212; Dimensional Modeling (Data Vault 2.0)</title>
		<link>https://datatalks.ru/chapter-7-data-vault-2-0-dimensional-modeling/</link>
					<comments>https://datatalks.ru/chapter-7-data-vault-2-0-dimensional-modeling/#comments</comments>
		
		<dc:creator><![CDATA[Data Engineer (Admin)]]></dc:creator>
		<pubDate>Thu, 03 Jul 2025 09:06:35 +0000</pubDate>
				<category><![CDATA[Data Architecture / Data Modeling]]></category>
		<category><![CDATA[Data Vault 2.0]]></category>
		<category><![CDATA[Conformed Dimensions]]></category>
		<category><![CDATA[Dimension Design]]></category>
		<category><![CDATA[Dimensional Modeling]]></category>
		<category><![CDATA[Multiple Stars]]></category>
		<category><![CDATA[SCD]]></category>
		<category><![CDATA[Slowly Changing Dimensions]]></category>
		<category><![CDATA[Snowflake Design]]></category>
		<category><![CDATA[Многомерное моделирование]]></category>
		<guid isPermaLink="false">https://datatalks.ru/?p=1729</guid>

					<description><![CDATA[<p>Перевод книги &#171;Building a Scalable Data Warehouse with Data Vault 2.0&#187; подготовлен автором сайта ГЛАВА 7. Многомерное моделирование (Dimensional Modeling) Аннотация Моделирование Data Vault не является заменой Dimensional Modeling, которое является отраслевым стандартом для определения витрины данных (уровня, используемого для предоставления данных конечному пользователю). Поскольку данная книга предназначена для охвата всего процесса построения хранилища данных [&#8230;]</p>
<p>Сообщение <a href="https://datatalks.ru/chapter-7-data-vault-2-0-dimensional-modeling/">Перевод 7 Главы &#8212; Dimensional Modeling (Data Vault 2.0)</a> появились сначала на <a href="https://datatalks.ru">DataTalks.RU. Data Engineering / DWH / Data Pipeline</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>Перевод книги &#171;Building a Scalable Data Warehouse with Data Vault 2.0&#187; подготовлен автором сайта</em></p>
<h1>ГЛАВА 7. Многомерное моделирование (Dimensional Modeling)</h1>
<h2>Аннотация</h2>
<p>Моделирование Data Vault не является заменой Dimensional Modeling, которое является отраслевым стандартом для определения витрины данных (уровня, используемого для предоставления данных конечному пользователю). Поскольку данная книга предназначена для охвата всего процесса построения хранилища данных от начала до конца, она также охватывает и Dimensional Modeling.</p>
<p>Первая часть этой главы сосредоточена на базовых сущностях <strong>Dimensional Modeling</strong> — фактовых сущностях и размерных сущностях.</p>
<ul>
<li><strong>Fact Entities (Сущности фактов)</strong> &#8212; хранят измерения, метрики или факты бизнес-процесса (иными словами содержат числовые показатели бизнес-операций &#8212; факты и ключи к соответствующим таблицам размерностей).</li>
<li><strong>Dimension Entities (Cущности измерений)</strong> &#8212; содержат описательные атрибуты для фактов.</li>
</ul>
<p>Будут рассмотрены различные типы размерностей, такие как медленно изменяющиеся измерения, а также способы выполнения запросов к данным из многомерной модели. Вторая часть этой главы объясняет, как работать с несколькими звёздными схемами, особенно с использованием согласованных измерений. Последняя часть сосредоточена на техниках многомерного проектирования и представляет снежинку и схему &#171;Звезда&#187; как частный случай схемы снежинки.</p>
<p><strong>Ключевые слова</strong></p>
<ul>
<li>Dimension modeling (Многомерное моделирование)</li>
<li>Fact Entities (Фактовые сущности)</li>
<li>Техники проектирования</li>
<li>Snowflake Schemas (Схема &#171;Снежинка&#187;)</li>
<li>Star Schemas (Схема &#171;Звезда&#187;)</li>
</ul>
<p>Наилучшее применение <strong>моделирования Data Vault 2.0</strong> — это уровень корпоративного хранилища данных. Оно было специально разработано для этой цели и является оптимальным выбором, когда требуется расширяемая, функционально-ориентированная модель, позволяющая отслеживать историю и проводить аудит, а также интегрируемая в среды реального времени и NoSQL.</p>
<p>Однако большинство бизнес-пользователей не знакомы с моделированием Data Vault 2.0. Во многих случаях конечным пользователям сначала требуется надлежащее обучение, чтобы они могли напрямую обращаться к <strong>Raw Data Vault</strong> или <strong>Business Vault</strong>, которые моделируются по тем же принципам. Им также необходимо понимать, как соединять многочисленные сущности, чтобы получать ценные и пригодные для использования сырые данные, которые могут быть обработаны в полезную информацию. Поэтому прямой доступ к уровню корпоративного хранилища данных ограничен опытными пользователями, которые хотят использовать собственные запросы и которым нужны сырые данные для этих целей. Большинство же конечных пользователей будут использовать информационные витрины для доступа к подготовленной информации, которую они могут напрямую использовать для выполнения своих задач.</p>
<p>Ещё одна проблема заключается в том, что большинство фронтенд-инструментов, используемых бизнесом для анализа информации, предоставляемой хранилищем данных, не могут напрямую использовать структуры Data Vault. Например, построение <strong>OLAP-куба в Microsoft SQL Server Analysis Services (SSAS)</strong> лучше всего работает, если источник данных смоделирован в виде звёздной схемы, которая является реляционной версией Dimension модели.</p>
<p>Многомерное моделирование было представлено широкой аудитории в индустрии хранилищ данных Ральфом Кимбаллом в 1997 году. Однако он не был его изобретателем. Термины &#171;размерности&#187; и &#171;факты&#187;, которые являются основными конструкциями в многомерном моделировании, восходят к 1960-м годам, когда проводился совместный исследовательский проект между Дартмутским университетом и General Mills. Первая размерная модель (dimension model) была представлена компаниями AC Nielsen и IRI для описания ранних многомерных витрин данных для данных о розничных продажах. Но именно серия книг Ральфа Кимбалла способствовала популяризации размерного/многомерного моделирования в индустрии хранилищ данных, и оно стало стандартом моделирования. В результате многомерное моделирование поддерживается многими фронтенд-инструментами сегодня. Поэтому оно хорошо известно и понятно конечным пользователям и является оптимальным выбором для моделирования информационных витрин, которые служат в качестве фронтенд-слоя.</p>
<h1>Введение</h1>
<p><strong>Системы хранилищ данных</strong> поддерживают бизнес, помогая решать аналитические задачи — то есть, отвечать на вопросы, касающиеся бизнес-процессов. Например, бизнес-пользователи в авиапромышленности могут захотеть проанализировать следующие вопросы:</p>
<ul>
<li>Как изменялась степень загрузки на определённых рейсах за последний финансовый год?</li>
<li>Какова эффективность нашей бонусной программы для часто летающих пассажиров в отношении продаж?</li>
<li>Кто наши часто летающие пассажиры? Каков их средний объём продаж?</li>
</ul>
<p>Такие вопросы не касаются отдельных транзакций, а связаны с <strong>метриками (measurement)</strong> по всему процессу. Обычно для этого метрики по отдельным транзакциям агрегируются (например, суммируются или усредняются). Ещё одной характеристикой аналитических запросов является то, что не требуется модификация данных в операционных системах для получения ответов.</p>
<p>По всем этим причинам имеет смысл организовать данные в слое информационных витрин (information mart) таким образом, чтобы бизнес-пользователи могли быстро агрегировать информацию, а не быстро её модифицировать. Именно поэтому <strong>размерная модель (dimensional model)</strong> проектируется с учётом того, как измеряются данные. Поскольку <strong>метрики (measurement)</strong> часто основаны на бизнес-процессе, сам бизнес-процесс должен быть центром моделирования. Кроме того, необходим контекст, чтобы придать метрикам смысл, например, чтобы упорядочить метрики по аэропортам, как показано в Таблице 7.1.</p>
<p><strong>Таблица 7.1 Пропорция пассажиров, работников, посетителей и провожающих/встречающих в выбранных аэропортах (с использованием искусственных данных)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/table_7_1.png"><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-1780" src="https://datatalks.ru/wp-content/uploads/2025/07/table_7_1.png" alt="" width="807" height="689" srcset="https://datatalks.ru/wp-content/uploads/2025/07/table_7_1.png 807w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_1-300x256.png 300w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_1-768x656.png 768w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_1-450x384.png 450w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_1-780x666.png 780w" sizes="(max-width: 807px) 100vw, 807px" /></a></p>
<p>В этой таблице представлено одна метрика — число лиц, которые были либо пассажирами, либо провожающими/встречающими, либо работниками, либо посетителями аэропорта, выраженное в виде соотношения между этими четырьмя ролями. Четыре роли — это первое измерение (dimension), а аэропорт — второе. Обе размерности охватывают данные и определяют уровень детализации для подсчёта лиц.</p>
<p>Эти две фундаментальные концепции — <strong>метрики (measurements)</strong> и <strong>контекст (context)</strong> &#8212; являются основой размерного моделирования.</p>
<h1>Схема &#171;Звезда&#187; (Star Schemas)</h1>
<p>Когда размерная модель реализована в реляционной базе данных, она называется <strong>звёздной схемой</strong>. Это объясняется тем, что размерная модель реляционных таблиц при взгляде сверху выглядит как звезда (см. Рисунок 7.1).</p>
<p><strong>Рисунок 7.1 Пример схемы &#171;Звезда&#187; для посещений аэропортов (физическая реализация)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/image_7_1_star_schema.png"><img decoding="async" class="aligncenter size-full wp-image-1787" src="https://datatalks.ru/wp-content/uploads/2025/07/image_7_1_star_schema.png" alt="" width="1027" height="798" srcset="https://datatalks.ru/wp-content/uploads/2025/07/image_7_1_star_schema.png 1027w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_1_star_schema-300x233.png 300w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_1_star_schema-1024x796.png 1024w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_1_star_schema-768x597.png 768w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_1_star_schema-450x350.png 450w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_1_star_schema-780x606.png 780w" sizes="(max-width: 1027px) 100vw, 1027px" /></a></p>
<p>Исходный рисунок (в плохом качестве)</p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/image_7_1_star_schema_initial.png"><img decoding="async" class="aligncenter size-full wp-image-1789" src="https://datatalks.ru/wp-content/uploads/2025/07/image_7_1_star_schema_initial.png" alt="" width="881" height="943" srcset="https://datatalks.ru/wp-content/uploads/2025/07/image_7_1_star_schema_initial.png 881w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_1_star_schema_initial-280x300.png 280w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_1_star_schema_initial-768x822.png 768w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_1_star_schema_initial-450x482.png 450w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_1_star_schema_initial-780x835.png 780w" sizes="(max-width: 881px) 100vw, 881px" /></a></p>
<p>Модель на Рисунке 7.1 представляет модель, лежащую в основе данных Таблицы 7.1. В центре модели находится таблица фактов, окружённая четырьмя таблицами измерений.</p>
<p>Основное отличие схемы &#171;Звезда&#187; на Рисунке 7.1 от нормализованной модели в третьей нормальной форме (3NF), которая часто используется в операционных системах, заключается в том, что размерная модель обычно использует денормализованные таблицы, особенно:</p>
<ul>
<li><strong>Таблицы Фактов:</strong> таблица в центре этой схемы содержит метрики/меры/показатели бизнеса, которые в случае Рисунка 7.1 представляют собой транзакции полётов. Эти measurements, как правило, являются метриками, которые бизнес желает проанализировать.</li>
<li><strong>Таблицы Измерений:</strong> таблицы размерностей группируют факты по категориям и предоставляют дополнительные описательные атрибуты к этим категориям. Эти категории называются размерностями и помогают конечному пользователю ориентироваться в модели и выбирать только нужное подмножество данных для анализа.</li>
</ul>
<p>В дополнение к этим основным таблицам, в размерном моделировании часто используются и другие типы таблиц, например, <strong>связующие таблицы (bridge tables)</strong>. В большинстве случаев можно создать размерную модель, которая содержит тот же контент, что и модель в 3NF. Однако, будучи представленной как звёздная схема, она легче воспринимается бизнес-пользователями и оптимизирована для выполнения запросов.</p>
<p>Это связано с денормализацией, которая обычно происходит при преобразовании модели 3NF в размерную модель. Иерархии и справочники предобъединены, что требует от оптимизатора СУБД учитывать меньшее количество объединений и временных таблиц. Также становится проще агрегировать данные, поскольку все измерения уже содержатся в центральной таблице фактов. Некоторые редакции Microsoft SQL Server также поддерживают <strong>оптимизацию звёздного объединения (star join optimization)</strong>, функцию, которая значительно сокращает объём данных, считываемых с диска для ответа на запросы.</p>
<p>Следующие разделы более подробно объясняют основные сущности размерного моделирования и звёздных схем.</p>
<h2>Таблицы фактов (Fact Tables)</h2>
<p><strong>Таблицы Фактов</strong> содержат информацию о конкретных бизнес-процессах или событиях в рамках этих процессов. Примерами таких бизнес-процессов и событий являются рейсы, заказы, телефонные звонки или обращения к веб-сайту. Каждая запись в таблице фактов представляет одно из этих событий и предоставляет метрики, связанные с этим бизнес-событием. Обычно это числовые значения, которые количественно выражают, например, продолжительность рейса, время до взлета, количество отклонений от маршрута или сколько товаров было заказано и по какой цене. Эти значения называются фактами таблицы.</p>
<p>В других случаях таблицы фактов могут содержать отношения между бизнес-объектами, например, уровни запасов на определённые даты. Эти уровни запасов являются формой отношений, потому что они показывают, какой продукт доступен в каком складском расположении в определённый момент времени. Каждое такое отношение представлено в таблице фактов одной записью. На рисунке 7.2 показан пример таблицы фактов, представляющей рейс.</p>
<p><strong>Рисунок 7.2 Таблица фактов для рейсов (физическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/image_7_2.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1791" src="https://datatalks.ru/wp-content/uploads/2025/07/image_7_2.jpeg" alt="" width="358" height="675" srcset="https://datatalks.ru/wp-content/uploads/2025/07/image_7_2.jpeg 358w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_2-159x300.jpeg 159w" sizes="(max-width: 358px) 100vw, 358px" /></a></p>
<p><strong>Таблица фактов содержит два разных типа столбцов:</strong></p>
<ul>
<li>Во-первых,<strong> внешние ключи на таблицы измерений,</strong> которые рассматриваются в следующем разделе. Сюда входят все четыре ссылки, которые являются частью составного первичного ключа, а также <code>TailNumberKey</code>, <code>CancelledKey</code> и <code>DivertedKey</code>.</li>
<li>Во-вторых, <strong>значения измерений, сами факты.</strong> Многие из них указывают продолжительность задержек, например, <code>DepartureDelay</code>, <code>WeatherDelay</code> или <code>SecurityDelay</code>. Другие показывают продолжительность подпроцессов, например, время руления при въезде и выезде, время в полёте и пройденное расстояние.</li>
</ul>
<p>Не все факты являются числовыми значениями, но именно числовые наиболее полезны для бизнес-пользователей, потому что их легко агрегировать по размерностям. Таблица фактов идентифицируется подмножеством внешних ключей к таблицам измерений. Это подмножество становится составным ключом, который представляет собой первичный ключ таблицы. Не все внешние ключи обязательно должны быть включены в первичный ключ, потому что во многих случаях размерность лишь описывает факт, но не идентифицирует его. В других случаях может потребоваться добавить ещё один идентифицирующий факт в первичный ключ фактовой таблицы, чтобы гарантировать уникальность, например, номер транзакции, такой как номер счёта или код бронирования.</p>
<p>Ввод ключей для уникальной идентификации строк в качестве первичного ключа таблицы фактов следует избегать, из-за необходимого объёма хранения для хранения значений ключей, а также из-за необходимости поддержки индекса. Сам индекс бесполезен, так как он не может быть использован конечным пользователем для идентификации отдельных фактов. Только в некоторых ограниченных случаях, в основном по техническим причинам, сгенерированный или производный ключ, используемый как первичный ключ, действительно имеет смысл.</p>
<p>Примером такой причины может быть требование со стороны бизнеса загружать идентичные строки в фактовую таблицу (например, при работе с историей) или необходимость перекрёстных ссылок с другими фактовыми таблицами.</p>
<h3><strong>Гранулярность таблицы фактов (Grain of a Fact Table)</strong></h3>
<p>Количество ссылок на измерения в таблице фактов определяет уровень детализации таблицы фактов. Этот уровень детализации называется <strong>гранулярностью (Grain)</strong>.</p>
<p>Хорошей практикой является сохранение уровня детализации как можно ниже, в идеале — на самом низком уровне, который предоставляет источник данных. Этот исходный уровень детализации также известен как атомарный уровень. Предоставление таких атомарных таблиц фактов бизнес-пользователям обеспечивает им наибольшую гибкость, потому что они могут агрегировать данные самостоятельно, исключая ненужные измерения из запроса и группируя данные по оставшимся измерениям.</p>
<p>Такой подход называется <strong>свёрткой (roll-up)</strong> и используется для обобщения данных по <strong>подмножеству измерений факта (subset of fact dimensions)</strong>. Однако, хранение таблиц фактов на самом низком уровне гранулярности не всегда осуществимо, если серверная инфраструктура не предоставляет достаточных ресурсов для хранения самого низкого уровня детализации. В этом случае предварительная агрегация данных до более высокого уровня детализации обеспечивает более быстрые ответы бизнес-пользователям при прямом запросе к таблицам фактов. Обратите внимание, что это утверждение уже не актуально при использовании многомерных OLAP-кубов, потому что они агрегируют данные внутри куба прозрачно для конечного пользователя.</p>
<h2>Таблицы размерностей/измерений (Dimension Tables)</h2>
<p><strong>Измерения/Размерности/Dimensions (а значит, и реляционные таблицы размерностей) предоставляют контекст для фактов.</strong> Они очень важны для понимания хранилища данных. Без измерений (dimensions) невозможно было бы понять метрики, предоставляемые таблицей фактов, потому что все метки и прочая описательная информация берутся из таблиц измерений. Как уже объяснялось в предыдущем разделе, они также используются для определения, как факты будут агрегироваться (сворачиваться). Кроме того, они могут использоваться для фильтрации фактов в соответствии с записью dimension или одним из её описательных атрибутов. Также возможно сортировать агрегированные метрики по измерению или одному из её атрибутов. На рисунке 7.3 показан пример таблицы размерности.</p>
<p><strong>Рисунок 7.3 Таблица измерений пассажиров (физическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/image_7_3.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1793" src="https://datatalks.ru/wp-content/uploads/2025/07/image_7_3.jpeg" alt="" width="245" height="470" srcset="https://datatalks.ru/wp-content/uploads/2025/07/image_7_3.jpeg 245w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_3-156x300.jpeg 156w" sizes="(max-width: 245px) 100vw, 245px" /></a></p>
<p>В отличие от таблиц фактов, таблица измерения использует значение ключа <code>PassengerKey</code> в качестве первичного ключа таблицы. Это связано с тем, что этот ключ часто используется в таблице фактов, ссылающейся на таблицу измерения. Чтобы сократить объём необходимого хранилища и повысить производительность соединений, имеет смысл поступать именно так и избегать использования натурального ключа. В остальном этот ключ не имеет значения для бизнеса. В дополнение к этому техническому ключу <strong>Измерения (Dimensions)</strong> часто содержат бизнес-ключи, которые идентифицируют записи в <strong>таблице dimension</strong>. На рисунке 7.3 это атрибут <code>PassportNumber</code>. Записи часто представляют собой бизнес-объекты и изменения этих объектов в операционной системе. Хотя натуральный ключ для одного и того же бизнес-объекта остаётся неизменным, даже если описательные данные были изменены в операционной системе, ключ изменяется при каждом изменении данных. Этот эффект используется таблицей фактов для ссылки на версию данных, которая была активна в момент, когда произошло бизнес-событие. Хеш-ключ из модели Data Vault 2.0 используется в качестве ключа в многомерной модели. Это упрощает процесс загрузки и помогает виртуализировать информационные витрины.</p>
<p>Несмотря на ключи в таблице, таблица измерения содержит описательные данные, которые описывают <strong>dimension entry (сущность измерения)</strong>. Очень часто таблицы размерностей состоят из множества описательных атрибутов. Их количество может достигать 50 или 100 столбцов. С другой стороны, такие таблицы часто не содержат большого количества строк. Существуют некоторые размерности, такие как размерность <code>Passenger</code>, представленная на рисунке 7.3, которые могут содержать много записей, но большинство измерений довольно малы, содержащие, возможно, не более сотни записей.</p>
<p>Не все числовые атрибуты должны быть мерами в таблице фактов. Например, номер ряда сидений в самолёте не используется ни в каких вычислениях. Он может использоваться как натуральный ключ, но не агрегируется бизнес-пользователем. То же самое относится к возрасту пассажира, если только бизнес не хочет рассчитывать средний возраст пассажиров самолёта. Существуют различные типы мер в таблице фактов многомерной модели данных:</p>
<ul>
<li><strong>Полностью аддитивные меры (Fully additive measures):</strong> полностью аддитивны в том смысле, что такие значения, как суммы и количества, могут быть просуммированы до допустимого общего значения.</li>
<li><strong>Полуаддитивные меры (Semi-additive measures):</strong> могут быть просуммированы по некоторым доступным размерностям, но не по всем.</li>
<li><strong>Неаддитивные меры (Nonadditive measures):</strong> не поддаются сложению.</li>
</ul>
<p>Таким образом, это также зависит от бизнес-потребностей, станет ли атрибут мерой в таблице фактов или описательным атрибутом в одной из её размерностей.</p>
<h2>Запросы к схемам «звезда»</h2>
<p>Конечные пользователи, знакомые со схемами типа «звезда», часто следуют простой схеме при прямом запросе данных из размерной модели:</p>
<ul>
<li><strong>Выбор необходимых фактов:</strong> сначала конечный пользователь решает, какие факты следует выбрать, определяя используемые таблицы фактов.</li>
<li><strong>Выбор необходимых измерений:</strong> добавляя размерности к запросу через соединения (join), конечные пользователи добавляют необходимый контекст.</li>
<li><strong>Ограничение области фактов:</strong> факты фильтруются в соответствии со значениями измерений (либо из таблицы фактов по ключам, либо из присоединённых размерностей).</li>
<li><strong>Агрегация фактов:</strong> исходные факты агрегируются с помощью агрегатных функций, таких как <code>SUM()</code> или <code>COUNT()</code>.</li>
</ul>
<p>Поскольку такой подход настолько распространён, многие производители СУБД оптимизировали свои реляционные движки под подобные запросы, включая Microsoft <strong>за счёт поддержки оптимизации соединений типа «звезда»</strong>.</p>
<p>Следующий оператор может быть использован для запроса к таблице фактов на рисунке 7.2:</p><pre class="urvanov-syntax-highlighter-plain-tag">SELECT
    OriginAirport.Code, AVG(DepartureDelay)
FROM 
    FactFlight
INNER JOIN
    DimAirport OriginAirport ON OriginAirport.AirportKey = FactFlight.OriginAirportKey
WHERE
    OriginAirport.State = 'CA'
GROUP BY
    OriginAirport.Code</pre><p>Этот оператор сначала соединяет таблицу измерений <code>DimAirport</code> с таблицей фактов, используя <code>OriginAirportKey</code>. Обратите внимание, что таблица <code>DimAirport</code> может быть использована дважды:</p>
<ul>
<li>сначала для аэропорта отправления,</li>
<li>затем для аэропорта назначения.</li>
</ul>
<p>Поэтому в операторе для таблицы размерности используется псевдоним <code>OriginAirport</code>.<br />
После того как размерность была присоединена, <strong>состояние аэропорта</strong> используется для фильтрации данных по всем аэропортам Калифорнии. <strong>Штат аэропорта</strong> является описательным атрибутом в таблице измерений. Кроме того, <strong>код аэропорта</strong> используется для группировки данных, чтобы представить пользователю список известных аэропортов Калифорнии со средней задержкой отправления для каждого аэропорта.</p>
<p>Оператор также показывает, как отдельные части SQL-оператора используются в запросах к Dimension модели:</p>
<ul>
<li><strong>Оператор <code>SELECT</code></strong> определяет меры и размерности, которые должны быть представлены конечному пользователю. Также указываются любые формулы, включая агрегатные функции, которые должны быть применены к результату.</li>
<li><strong>Оператор <code>FROM</code></strong> определяет таблицу фактов, к которой выполняется запрос. Во многих случаях это только одна таблица фактов. Однако также возможно выполнение запроса к нескольким таблицам фактов.</li>
<li><strong>Оператор <code>JOIN</code></strong> присоединяет контекст фактов к итоговому результату. Во многих случаях имеется несколько операторов JOIN, каждый из которых соединяет отдельную таблицу измерения.</li>
<li><strong>Оператор <code>WHERE</code></strong> ограничивает область фактов, используемых в результирующем наборе. Во многих случаях доступны данные из дополнительных записей размерности (например, регионы продаж), которые не имеют отношения к выполняемой задаче. Поэтому конечные пользователи обычно ограничивают данные интересующими их записями размерностей.</li>
<li><strong>Оператор <code>GROUP BY</code></strong> определяет, как данные группируются перед агрегацией и представлением конечному пользователю. Агрегация в операторе <strong>SELECT</strong> основана на этом <strong>GROUP BY</strong>. Таким образом, оператор <strong>GROUP BY</strong> используется для изменения гранулярности (grain) результата по сравнению с гранулярностью исходной таблицы фактов.</li>
</ul>
<p><strong>Хотя оператор GROUP BY</strong> может использоваться для повышения уровня гранулярности фактов, невозможно получить результат с более низким уровнем гранулярности. Рассмотрим таблицу фактов, содержащую данные об итогах рейсов: количество пассажиров на борту, аэропорт отправления и назначения, дата рейса и т.д. Если таблица фактов не содержит информации на уровне пассажиров, проанализировать такую информацию невозможно. Поэтому важно правильно выбрать гранулярность таблицы фактов при проектировании <strong>многомерной модели данных</strong>.</p>
<h1>Несколько звёзд (Multiple Stars)</h1>
<p>Оператор в предыдущем разделе использовал только одну таблицу фактов в качестве основы для результата. Однако уже упоминалось, что также возможно использование нескольких таблиц фактов в качестве источника запроса. Это поведение поддерживается <strong>согласованными измерениями (Conformed Dimensions)</strong>, которые используются несколькими звёздами (таблицей фактов с её таблицами измерений) и, следовательно, соединяют эти отдельные звёзды через согласованное измерение.</p>
<h2>Согласованные размерности/измерения (Conformed Dimensions)</h2>
<p><strong>Согласованные измерения</strong> &#8212; это размерности, которые используются несколькими звёздами. Они применяются для сравнения мер из каждой схемы звезда. Повторное использование согласованных размерностей является очень распространённым для «поддержки подлинного анализа бизнес-процессов в разных областях». Это возможно только в том случае, если все схемы звезда, которые должны анализироваться в рамках такого сквозного анализа, используют одну и ту же <strong>таблицу измерений</strong> с точно такими же значениями ключей (первичными ключами). Использование хеш-ключей из модели Data Vault 2.0 упрощает соблюдение этого требования. <strong>Такой анализ называется drill-across</strong> и объединяет информацию из нескольких бизнес-процессов или событий. Только тогда становится возможным анализ данных из различных таблиц фактов с помощью согласованного измерения. На рисунке 7.4 приведён пример.</p>
<p><strong>Рисунок 7.4 Две схемы звезда, соединённые согласованными измерениями (физический дизайн)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/image_7_4.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1795" src="https://datatalks.ru/wp-content/uploads/2025/07/image_7_4.jpeg" alt="" width="1494" height="810" srcset="https://datatalks.ru/wp-content/uploads/2025/07/image_7_4.jpeg 1494w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_4-300x163.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_4-1024x555.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_4-768x416.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_4-450x244.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_4-780x423.jpeg 780w" sizes="(max-width: 1494px) 100vw, 1494px" /></a></p>
<p><strong>Исходная картинка:</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/image_7_4_initial.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1798" src="https://datatalks.ru/wp-content/uploads/2025/07/image_7_4_initial.jpeg" alt="" width="1186" height="787" srcset="https://datatalks.ru/wp-content/uploads/2025/07/image_7_4_initial.jpeg 1186w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_4_initial-300x199.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_4_initial-1024x680.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_4_initial-768x510.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_4_initial-450x299.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_4_initial-780x518.jpeg 780w" sizes="(max-width: 1186px) 100vw, 1186px" /></a></p>
<p>В этом примере имеются две схемы звезда с их таблицами фактов в центре:<br />
<code>FactConnection</code> слева и <code>FactAirportVisit</code> с рисунка 7.1 — справа. Каждая из них имеет ряд подключённых измерений. Обе используют две общие таблицы согласованных измерений &#8212; <code>DimAirport</code> и <code>DimDate</code>, которые показаны в центре схемы. Для поддержки сквозного анализа между <code>FactConnection</code> и <code>FactAirportVisit</code> крайне важно, чтобы обе согласованные размерности имели абсолютно одинаковую структуру и данные.</p>
<p>Чтобы поддерживать такие согласованные размерности, необходимо, чтобы любые изменения в согласованной размерности не нарушали работу одной из размерных звёзд, использующих эту размерность. Это может — и, скорее всего, произойдёт — на последующих спринтах проекта. Всякий раз при изменении структуры или содержания согласованной размерности необходимо пересмотреть влияние на каждую зависимую схему звезда и провести соответствующее тестирование. Поэтому использование согласованных размерностей влечёт за собой влияние изменений, которое может ограничить гибкость команды разработки. Этот избыточный объём сопровождения согласованных размерностей часто приводит к практике, при которой разработчики не изменяют существующие согласованные размерности, чтобы избежать тестирования. Вместо этого они создают новые дополнительные согласованные размерности, чтобы избежать затрат на переинжиниринг, что приводит к несогласованным размерностям. В других случаях они копируют структуру и данные существующих согласованных размерностей в новые схемы звезда и расширяют их новыми функциями, оставляя старую согласованную размерность без изменений (и, следовательно, без необходимости тестирования), снова добавляя несогласованные размерности. Мы называем эту практику <strong>&#171;dimension-itis&#187;</strong>, что приводит к неконтролируемому количеству размерностей, которые вроде бы одинаковые, но… несогласованные.</p>
<p><strong>Обратная практика</strong> — это добавление большего количества атрибутов и данных в существующие согласованные размерности, чтобы избежать создания новых. Этот подход применяется, когда разработчики хотят избежать создания новых согласованных размерностей из-за объёма необходимого тестирования существующих фактов и измерений. Конечный результат такого подхода — так называемая <strong>«деформированная» размерность (“deformed” dimension):</strong> такая размерность не может больше устойчиво изменяться из-за неясных и неконтролируемых изменений в структуре и сложных или запутанных зависимостей, и становится кошмаром с огромными затратами на переинжиниринг при необходимости изменений в будущем. Команды, создающие такие деформированные размерности, как правило, избегают их документирования, что создаёт дополнительные сложности для их преемников.</p>
<p>Мы не рекомендуем отказываться от использования согласованных размерностей. То, что действительно необходимо — это способ быстро создавать и изменять их с низкими затратами на сопровождение. Наша рекомендация — использовать виртуальные информационные витрины.</p>
<h1>Проектирование измерений (Dimension Design)</h1>
<p>Последний раздел этой главы охватывает некоторые дополнительные концепции <strong>многомерного моделирования (Dimension Modeling)</strong>, включая медленно изменяющиеся измерения, иерархии и краткое введение в схему &#171;Снежинка&#187; — более расширенную размерную модель.</p>
<h2>Медленно изменяющиеся измерения (Slowly Changing Dimensions, SCD)</h2>
<p>До этого момента <strong>измерения (dimensions)</strong> рассматривались как сущности, обеспечивающие контекст для фактов. Это верно, но важно понимать, что этот контекст со временем меняется. Например, домашний адрес пассажиров может изменяться из-за переезда, фамилия — из-за брака, а обращение — из-за исправления ошибки. Поскольку связь между схемой звезда и измерением основана на значениях ключей, модель может учитывать изменения в системе-источнике наилучшим образом для удовлетворения требований анализа: изменения могут либо отслеживаться внутри измерения, либо перезаписывать существующие данные в измерении.</p>
<p><strong>Медленно изменяющиеся измерения</strong> используются для обработки изменений в таблицах измерений. Это связано с тем, что темп изменения размерностей относительно медленный, особенно по сравнению с быстро меняющимися таблицами фактов. Поскольку существует несколько способов отслеживания истории в измерениях, Кимбалл ввёл классификацию для таблиц измерений.</p>
<p><strong>Slowly Changing Dimension Type 0 (Медленно изменяющееся измерение Типа 0)</strong> сохраняет исходные значения атрибутов измерения. Если в системе-источнике происходит изменение, значение в таблице измерений не изменяется. Хотя этот тип встречается реже, чем следующие три, он может использоваться для хранения исходного кредитного рейтинга клиента или любого другого первоначального значения.</p>
<p>Изменения в системе-источнике перезаписывают данные в <strong>Slowly Changing Dimension Type 1 (Медленно изменяющемся измерении Типа 1)</strong>. Атрибут измерения всегда отражает наиболее актуальное значение. Следовательно, история не отслеживается. Если на этом атрибуте основана агрегация (например, в предложении <code>GROUP BY</code> оператора), результаты этих агрегаций будут меняться в зависимости от нового значения. В таблице 7.2 приведён пример SCD типа 1.</p>
<p><strong>Таблица 7.2 Медленно изменяющаяся размерность типа 1</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/table_7_2.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1781" src="https://datatalks.ru/wp-content/uploads/2025/07/table_7_2.png" alt="" width="1267" height="223" srcset="https://datatalks.ru/wp-content/uploads/2025/07/table_7_2.png 1267w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_2-300x53.png 300w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_2-1024x180.png 1024w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_2-768x135.png 768w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_2-450x79.png 450w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_2-780x137.png 780w" sizes="(max-width: 1267px) 100vw, 1267px" /></a></p>
<p>Таблица размерности, представлена в таблице 7.2, содержит адресную информацию о пассажирах.<br />
Каждый пассажир идентифицируется по ключу, который является первичным ключом и используется таблицей фактов, и по натуральному ключу — номеру паспорта. Все остальные атрибуты в измерении имеют описательный характер и подробно описывают текущий адрес.<br />
Когда пассажир переезжает, текущая запись перезаписывается. Таким образом, история в таблице измерения не сохраняется. Таблица отражает только текущий адрес, а не предыдущие адреса пассажира.</p>
<p>Вместо перезаписи существующих данных, изменения в системе-источнике добавляют новую строку в таблицу <strong>Slowly Changing Dimension Type 2 (Медленно изменяющееся измерение Типа 2)</strong>. Используя такой подход, часто можно корректно отслеживать историю. Поэтому это является преобладающей техникой отслеживания истории в информационных витринах. Пример размерности типа 2 представлен в таблице 7.3.</p>
<p><strong>Таблица 7.3. Медленно изменяющаяся размерность типа 2</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/table_7_3.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1783" src="https://datatalks.ru/wp-content/uploads/2025/07/table_7_3.png" alt="" width="1285" height="275" srcset="https://datatalks.ru/wp-content/uploads/2025/07/table_7_3.png 1285w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_3-300x64.png 300w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_3-1024x219.png 1024w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_3-768x164.png 768w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_3-450x96.png 450w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_3-780x167.png 780w" sizes="(max-width: 1285px) 100vw, 1285px" /></a></p>
<p>Таблица (модифицирована из таблицы 7.2 и адаптирована для цели) показывает, как изменения отслеживаются в медленно изменяющейся размерности типа 2: каждая новая версия записи добавляется как дополнительная строка в таблицу размерности.</p>
<p>В этом примере Эми Миллер, с ключом <code>1b3ba82...</code>, вышла замуж за Петера Хайнца, с ключом <code>28ab342...</code>, и переехала к нему в Калифорнию. Поэтому её новая запись с ключом <code>444bbaa...</code> отражает эти изменения. Старая запись остаётся нетронутой, чтобы сохранить историческую информацию. Старые факты продолжают использовать запись с ключом <code>1b3ba82...</code>, но новые факты ссылаются на запись размерности с ключом <code>444bbaa...</code>.</p>
<p>Изменения в <strong>медленно изменяющейся размерности типа 3</strong> не добавляют дополнительных строк, а отслеживают историю в дополнительных столбцах. Для каждого атрибута, подлежащего историзации, добавляется новый столбец для каждого изменения, произошедшего в системе-источнике и подлежащего отображению бизнес-пользователю. Это упрощает анализ изменений со временем. Пример приведён в таблице 7.4.</p>
<p><strong>Таблица 7.4. Медленно изменяющаяся размерность типа 3</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/table_7_4.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1784" src="https://datatalks.ru/wp-content/uploads/2025/07/table_7_4.png" alt="" width="1290" height="242" srcset="https://datatalks.ru/wp-content/uploads/2025/07/table_7_4.png 1290w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_4-300x56.png 300w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_4-1024x192.png 1024w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_4-768x144.png 768w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_4-450x84.png 450w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_4-780x146.png 780w" sizes="(max-width: 1290px) 100vw, 1290px" /></a></p>
<p>Этот пример показывает, как бизнес отслеживает предыдущее состояние пассажира с помощью дополнительного столбца. Когда пассажир переезжает, как в случае с Эми Миллер (теперь Эми Хайнц) в записи с ключом <code>1b3ba82...</code>, старый адрес перезаписывается, а атрибуты, которые должны быть исторически отслежены, копируются в дополнительные столбцы. В данном случае столбец <strong>Previous State</strong> обновляется, чтобы отразить предыдущее состояние пассажира.</p>
<p>История не ограничивается только одной записью. Обычно используется ограниченное количество столбцов для хранения нескольких изменений — <strong>в большинстве случаев только текущего и предыдущего значения</strong>. В других случаях ключевые показатели эффективности (KPI) отслеживаются со временем, как в примере в таблице 7.5.</p>
<p><strong>Таблица 7.5. Медленно изменяющаяся размерность типа 3 с несколькими столбцами</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/table_7_5.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1785" src="https://datatalks.ru/wp-content/uploads/2025/07/table_7_5.png" alt="" width="1198" height="201" srcset="https://datatalks.ru/wp-content/uploads/2025/07/table_7_5.png 1198w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_5-300x50.png 300w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_5-1024x172.png 1024w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_5-768x129.png 768w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_5-450x76.png 450w, https://datatalks.ru/wp-content/uploads/2025/07/table_7_5-780x131.png 780w" sizes="(max-width: 1198px) 100vw, 1198px" /></a></p>
<p>Таблица 7.5 показывает размерность, которая отслеживает доступные рейсы, их отправные точки и аэропорты назначения. В дополнение к этой основной информации, таблица измерения содержит три значения KPI, которые показывают, как изменялось среднее количество пассажиров за последние три года (включая текущий год).</p>
<p>В дополнение к представленным типам размерностей, в некоторых случаях встречаются и следующие:</p>
<ul>
<li><strong>Slowly changing dimension type 4 (Медленно изменяющаяся размерность типа 4):</strong> этот тип выносит изменчивые атрибуты в отдельную мини-размерность.</li>
<li><strong>Slowly changing dimension type 5 (Медленно изменяющаяся размерность типа 5):</strong> гибрид типов 4 и 1 (4 + 1 = 5). Позволяет получить доступ к текущим атрибутам мини-размерности вместе с другими из основной размерности без связывания через таблицу фактов.</li>
<li><strong>Slowly changing dimension type 6 (Медленно изменяющаяся размерность типа 6):</strong> этот тип добавляет текущие атрибуты к размерности типа 2.</li>
<li><strong>Slowly changing dimension type 7 (Медленно изменяющаяся размерность типа 7):</strong> этот тип обеспечивает ту же функциональность, что и тип 6, но с использованием двух внешних ключей в таблице фактов: один ссылается на размерность типа 2 с отслеживаемыми атрибутами, а другой — на текущую строку.</li>
</ul>
<h2>Иерархии</h2>
<p><strong>Иерархии (Hierarchies)</strong> &#8212; ещё одна важная концепция в размерном моделировании. Они позволяют производить детализацию данных для более глубокого анализа. Рассмотрим следующий пример:<br />
В Excel PivotTable представлена мировая выручка от пассажиров за несколько лет в виде общих значений (см. рисунок 7.5).</p>
<p><strong>Рисунок 7.5 Выручка от пассажиров по годам и регионам</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/image_7_5.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1801" src="https://datatalks.ru/wp-content/uploads/2025/07/image_7_5.jpeg" alt="" width="980" height="331" srcset="https://datatalks.ru/wp-content/uploads/2025/07/image_7_5.jpeg 980w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_5-300x101.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_5-768x259.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_5-450x152.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_5-780x263.jpeg 780w" sizes="(max-width: 980px) 100vw, 980px" /></a></p>
<p>Столбцы на рисунке 7.5 показывают финансовые годы (FY) из размерности даты, доступные в сводной таблице. Строки отображают географические регионы из размерности географии. Кроме того, присутствуют общие итоги, показывающие совокупное значение для каждого столбца или строки. Например, выручка от пассажиров за финансовый год 2008 в Соединённых Штатах составила $19,471,989.04.</p>
<p><strong>Географическая иерархия состоит из следующих уровней:</strong></p>
<ul>
<li>Страна</li>
<li>Штат/Провинция</li>
<li>Город</li>
<li>Почтовый индекс</li>
</ul>
<p>Возможно <strong>выполнение детализации (drill-down) до любого уровня</strong>, который доступен в сводной таблице (которая основана на OLAP-кубе), но не глубже. Рисунок 7.6 показывает логическую модель, в которой представлена размерность географии с её иерархией.</p>
<p><strong>Рисунок 7.6 Размерность географии (логическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/image_7_6.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1802" src="https://datatalks.ru/wp-content/uploads/2025/07/image_7_6.jpeg" alt="" width="220" height="644" srcset="https://datatalks.ru/wp-content/uploads/2025/07/image_7_6.jpeg 220w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_6-102x300.jpeg 102w" sizes="(max-width: 220px) 100vw, 220px" /></a></p>
<p>Обозначения следуют <strong>методологии моделирования ADAPT (Application Design for Analytical Processing Technologies)</strong> для размерных баз данных. Эта методология часто используется в индустрии для моделирования и документирования размерных моделей. Первый элемент изображает саму размерность Geography. Размерность включает одну иерархию, также называемую Geography. Остальные элементы представляют собой отдельные уровни иерархии и должны следовать в указанном порядке. Мы будем использовать методологию моделирования ADAPT на протяжении всей книги.</p>
<p>Аналогично иерархии Geography, иерархия Fiscal Calendar состоит из нескольких уровней:</p>
<ul>
<li>Финансовый год</li>
<li>Финансовое полугодие</li>
<li>Финансовый квартал</li>
<li>Месяц</li>
<li>Дата</li>
</ul>
<p>Эта иерархия очень распространена в системах хранилищ данных и часто используется конечными пользователями. Она использует другую дату начала года, что часто практикуется коммерческими организациями. Например, предприятия в сфере торговли часто начинают финансовый год не с 31 декабря. Это связано с большим числом возвратов после Рождества, совершаемых клиентами, недовольными подарками. Поскольку объём таких возвратов достаточно велик, он оказывает влияние на общую выручку за год. Однако в большинстве случаев возвраты происходят в январе следующего календарного года. Если компания закрывает отчётный год 31 декабря, возвраты будут отнесены к следующему финансовому периоду и исказят финансовые результаты. Поэтому такие компании часто выбирают другой месяц в качестве окончания финансового периода. Один из примеров — Best Buy, розничный продавец электроники в США. Финансовый год этой компании заканчивается 1 февраля. Рисунок 7.7 показывает логическую модель размерности Date.</p>
<p><strong>Рисунок 7.7 Размерность даты (логическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/image_7_7.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1803" src="https://datatalks.ru/wp-content/uploads/2025/07/image_7_7.jpeg" alt="" width="341" height="620" srcset="https://datatalks.ru/wp-content/uploads/2025/07/image_7_7.jpeg 341w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_7-165x300.jpeg 165w" sizes="(max-width: 341px) 100vw, 341px" /></a></p>
<p>Обратите внимание, что в размерности доступны две иерархии: Calendar и Fiscal Calendar. Обе имеют свои собственные уровни Год, Полугодие и Квартал, но разделяют уровни Месяц и Дата. Обе иерархии используют все атрибуты размерности, но организованы по-разному. В зависимости от потребностей бизнес-аналитика используется та или иная иерархия. Обе являются корректными; ценность каждой иерархии зависит от контекста бизнес-анализа.</p>
<p>Чтобы более подробно проанализировать информацию на рисунке 7.5, можно нажать знак «плюс» рядом с меткой строки и выполнить детализацию по иерархии географии, как показано на рисунке 7.8.</p>
<p><strong>Рисунок 7.8 Выручка от пассажиров в Соединённых Штатах по годам</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/image_7_8.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1804" src="https://datatalks.ru/wp-content/uploads/2025/07/image_7_8.jpeg" alt="" width="477" height="754" srcset="https://datatalks.ru/wp-content/uploads/2025/07/image_7_8.jpeg 477w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_8-190x300.jpeg 190w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_8-450x711.jpeg 450w" sizes="(max-width: 477px) 100vw, 477px" /></a></p>
<p>Общая выручка от пассажиров, которая всё ещё отображается в строке, выделенной полужирным шрифтом, разбивается по штатам — следующий географический уровень ниже уровня страны. Для каждого штата показывается выручка от пассажиров по годам. Можно дополнительно разбить эти данные, выполнив детализацию до следующего уровня (рисунок 7.9).</p>
<p><strong>Рисунок 7.9 Выручка от пассажиров в штате Алабама по годам</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/image_7_9.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1805" src="https://datatalks.ru/wp-content/uploads/2025/07/image_7_9.jpeg" alt="" width="477" height="799" srcset="https://datatalks.ru/wp-content/uploads/2025/07/image_7_9.jpeg 477w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_9-179x300.jpeg 179w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_9-450x754.jpeg 450w" sizes="(max-width: 477px) 100vw, 477px" /></a></p>
<p>На рисунке 7.9 проводится более глубокий анализ выручки от пассажиров для штата Алабама. Показан каждый город в Алабаме, и выручка от пассажиров для каждого города представлена по годам. Столбец даты представляет собой аналогичную иерархию. Также возможно выполнить детализацию этой иерархии.</p>
<p>На рисунке 7.10 показаны только данные за финансовый год 2007, но более детализировано. Обратите внимание, что отображаются первые три месяца финансового года, который начинается в июле. Для каждого месяца, квартала и полугодия в правой части таблицы показаны итоговые значения. Такой подход позволяет бизнес-аналитикам глубоко понять представленную информацию.</p>
<p><strong>Рисунок 7.10 Выручка от пассажиров в Алабаме по годам, в деталях</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/image_7_10.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1806" src="https://datatalks.ru/wp-content/uploads/2025/07/image_7_10.jpeg" alt="" width="980" height="872" srcset="https://datatalks.ru/wp-content/uploads/2025/07/image_7_10.jpeg 980w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_10-300x267.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_10-768x683.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_10-450x400.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_10-780x694.jpeg 780w" sizes="(max-width: 980px) 100vw, 980px" /></a></p>
<p>Иерархия географии реализована физически из таблицы размерности, как показано на рисунке 7.11.</p>
<p><strong>Рисунок 7.11 Размерность географии (физическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/image_7_11.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1807" src="https://datatalks.ru/wp-content/uploads/2025/07/image_7_11.jpeg" alt="" width="473" height="534" srcset="https://datatalks.ru/wp-content/uploads/2025/07/image_7_11.jpeg 473w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_11-266x300.jpeg 266w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_11-450x508.jpeg 450w" sizes="(max-width: 473px) 100vw, 473px" /></a></p>
<p>Каждый уровень иерархии основан на одном из физических атрибутов таблицы размерности. Связь между атрибутом и уровнем иерархии задаётся в Microsoft SQL Server Analysis Services. Аналогичные иерархии будут реализованы в этой главе при построении OLAP-куба и добавлении размерности даты как иерархии.</p>
<h2>Дизайн &#171;Снежинка&#187; (Snowflake Design)</h2>
<p>В этой главе была представлена схема «звезда», основанная на таблице фактов в центре и сопровождающих её таблицах размерностей, которые предоставляют контекст для фактов. Эти таблицы измерений напрямую соединяются с таблицей фактов. Косвенное соединение таблиц измерений &#8212; то есть, когда одна таблица измерения ссылается на другую таблицу измерения — невозможно в схеме звезда. Это справедливо даже в случае наличия связи между атрибутами измерений.</p>
<p>Рассмотрим пример корпоративных групп в авиационной индустрии и отдельных авиаперевозчиков. Каждая авиакомпания входит в состав более крупной группы, которая владеет этим перевозчиком. Например, United Continental Holdings, Inc. владеет как United Airlines, так и Continental Airlines, а также другими, более мелкими перевозчиками.</p>
<p>Если схема звезда должна отразить эту связь, обе размерности — <code>DimGroup</code> и <code>DimCarrier</code> — должны быть напрямую связаны с таблицей фактов, как показано на рисунке 7.12.</p>
<p><strong>Рисунок 7.12 Схема звезда с таблицей фактов в центре и только напрямую связанными размерностями (физическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/image_7_12.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1808" src="https://datatalks.ru/wp-content/uploads/2025/07/image_7_12.jpeg" alt="" width="691" height="806" srcset="https://datatalks.ru/wp-content/uploads/2025/07/image_7_12.jpeg 691w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_12-257x300.jpeg 257w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_12-450x525.jpeg 450w" sizes="(max-width: 691px) 100vw, 691px" /></a></p>
<p>Этот пример повторяет представленный на рисунке 7.4. Однако он показывает только одну схему звезда. Обратите внимание на две размерности <code>DimGroup</code> и <code>DimCarrier</code>, которые независимо связаны с таблицей фактов. Тем не менее, между этими двумя размерностями существует неявная связь. Эта связь реализована в ETL-задании, которое загружает таблицу. ETL-задание гарантирует, что в таблицу фактов загружаются только допустимые комбинации <code>CarrierKey</code> и <code>GroupKey</code>. Модель не реализует никаких правил, которые препятствовали бы загрузке недопустимых комбинаций. С другой стороны, эта модель проста в использовании для бизнес-пользователей, потому что они могут напрямую соединять всю необходимую контекстную информацию. Именно поэтому схема звезда допускает только напрямую связанные таблицы измерений.</p>
<p><strong>Например, чтобы получить среднюю задержку группы, можно использовать следующий оператор:</strong></p><pre class="urvanov-syntax-highlighter-plain-tag">SELECT
    DimGroup.Name, AVG(DepDelay)
FROM 
    FactConnection
INNER JOIN
    DimGroup ON DimGroup.GroupKey = FactConnection.GroupKey
GROUP BY
    DimGroup.Name</pre><p>Как видно из запроса, не требуется больших усилий, чтобы добавить группу в результирующий набор. Соединение осуществляется напрямую с использованием поля <code>GroupKey</code> в таблице фактов.</p>
<p><strong>Схема «снежинка»</strong>, с другой стороны, допускает косвенные таблицы измерений. Это полезно, если необходимо явно смоделировать отношения между атрибутами измерений. Если бы модель на рисунке 7.12 была реализована как схема «снежинка», она выглядела бы примерно как на рисунке 7.13.</p>
<p><strong>Рисунок 7.13 Схема снежинка с таблицей фактов в центре и косвенно связанными измерениями (физическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/image_7_13.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1809" src="https://datatalks.ru/wp-content/uploads/2025/07/image_7_13.jpeg" alt="" width="691" height="809" srcset="https://datatalks.ru/wp-content/uploads/2025/07/image_7_13.jpeg 691w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_13-256x300.jpeg 256w, https://datatalks.ru/wp-content/uploads/2025/07/image_7_13-450x527.jpeg 450w" sizes="(max-width: 691px) 100vw, 691px" /></a></p>
<p>Как видно из диаграммы, <strong>термин «снежинка»</strong> происходит от внешнего вида модели. Таблицы измерений отходят от центральной таблицы фактов, подобно лучам снежинки. Вместо того чтобы напрямую ссылаться на <code>DimGroup</code> из <code>FactConnection</code>, группа ссылается косвенно через <code>DimCarrier</code>. <code>GroupKey</code>, который идентифицирует группу в таблице фактов, перемещён в <code>DimCarrier</code>. Чтобы вернуть среднюю задержку группы, как в предыдущем запросе, необходимо сначала соединить <code>DimCarrier</code>, а затем <code>DimGroup</code>.</p>
<p>Это не представляет проблемы, если вы умеете писать SQL-запросы и не испытываете трудностей при косвенном соединении таблиц, как в этом случае. Для опытного разработчика баз данных такой запрос не представляет никакой угрозы. Однако если бизнес-аналитики с меньшими знаниями и опытом работы с SQL-запросами должны работать со схемами снежинка, они могут почувствовать себя перегруженными и не справиться с базой данных.</p>
<p>Несмотря на эту проблему, <strong>схемы снежинка</strong> на самом деле используются довольно часто.</p>
<p>Сообщение <a href="https://datatalks.ru/chapter-7-data-vault-2-0-dimensional-modeling/">Перевод 7 Главы &#8212; Dimensional Modeling (Data Vault 2.0)</a> появились сначала на <a href="https://datatalks.ru">DataTalks.RU. Data Engineering / DWH / Data Pipeline</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datatalks.ru/chapter-7-data-vault-2-0-dimensional-modeling/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Перевод 6 Главы &#8212; Продвинутое моделирование Data Vault 2.0 &#8212; Advanced Data Vault Modeling</title>
		<link>https://datatalks.ru/chapter-6-data-vault-advanced-data-vault-modeling/</link>
					<comments>https://datatalks.ru/chapter-6-data-vault-advanced-data-vault-modeling/#respond</comments>
		
		<dc:creator><![CDATA[Data Engineer (Admin)]]></dc:creator>
		<pubDate>Wed, 02 Jul 2025 13:19:58 +0000</pubDate>
				<category><![CDATA[Data Vault 2.0]]></category>
		<category><![CDATA[Advanced Data Vault Modeling]]></category>
		<category><![CDATA[bridge таблицы]]></category>
		<category><![CDATA[description tables]]></category>
		<category><![CDATA[PIT Window]]></category>
		<category><![CDATA[Query assistant tables]]></category>
		<category><![CDATA[reference tables]]></category>
		<guid isPermaLink="false">https://datatalks.ru/?p=1116</guid>

					<description><![CDATA[<p>Перевод книги &#171;Building a Scalable Data Warehouse with Data Vault 2.0&#187; подготовлен автором сайта Перевод 6 Главы &#8212; Продвинутое моделирование Data Vault 2.0 &#8212; Advanced Data Vault Modeling Предыдущие переводы Перевод книги «Building a Scalable Data Warehouse with Data Vault 2.0» Перевод 1 Главы — Введение в хранилища данных Перевод 2 Главы — Масштабируемая архитектура [&#8230;]</p>
<p>Сообщение <a href="https://datatalks.ru/chapter-6-data-vault-advanced-data-vault-modeling/">Перевод 6 Главы &#8212; Продвинутое моделирование Data Vault 2.0 &#8212; Advanced Data Vault Modeling</a> появились сначала на <a href="https://datatalks.ru">DataTalks.RU. Data Engineering / DWH / Data Pipeline</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>Перевод книги &#171;Building a Scalable Data Warehouse with Data Vault 2.0&#187; подготовлен автором сайта</em></p>
<h1>Перевод 6 Главы &#8212; Продвинутое моделирование Data Vault 2.0 &#8212; Advanced Data Vault Modeling</h1>
<h2>Предыдущие переводы</h2>
<p><em>Перевод книги «Building a Scalable Data Warehouse with Data Vault 2.0»</em></p>
<ul>
<li><a href="https://datatalks.ru/data-vault-2-0-chapter-1-introduction-to-data-warehousing/" target="_blank" rel="noopener">Перевод 1 Главы — Введение в хранилища данных</a></li>
<li><a href="https://datatalks.ru/data-vault-2-0-chapter-2-scalable-data-warehouse-architecture/" target="_blank" rel="noopener">Перевод 2 Главы — Масштабируемая архитектура хранилища данных</a></li>
<li><a href="https://datatalks.ru/chapter-3-data-vault-2-0-methodology/" target="_blank" rel="noopener">Перевод 3 Главы — Методология Data Vault 2.0</a></li>
<li><a href="https://datatalks.ru/chapter-4-data-vault-2-0-modeling/" target="_blank" rel="noopener">Перевод 4 Главы — Моделирование Data Vault 2.0 — Что такое Hub / Link / Satellite?</a></li>
<li><a href="https://datatalks.ru/data-vault-chapter-5-intermediate-data-vault-modeling/" target="_blank" rel="noopener">Перевод 5 Главы – Intermediate Моделирование Data Vault</a></li>
</ul>
<h2>Аннотация к 6 главе</h2>
<p>В этой главе рассматриваются два дополнительных аспекта моделирования Data Vault: вспомогательные таблицы для запросов и справочные таблицы. <strong>Вспомогательные таблицы для запросов (Query assistant tables)</strong> используются для снижения сложности запросов к Data Vault и повышения производительности. Рассматриваются два конкретных типа вспомогательных таблиц для запросов: <strong>point-in-time (PIT)</strong> таблицы и <strong>bridge таблицы</strong>. Также подробно рассматриваются <strong>справочные таблицы (reference tables)</strong>, включая справочные таблицы без истории, справочные таблицы с историей и таблицы с кодами и описаниями.</p>
<p><strong>Ключевые слова</strong></p>
<ul>
<li>вспомогательные таблицы для запросов (Query assistant tables)</li>
<li>справочные таблицы (reference tables)</li>
<li>point-in-time</li>
<li>bridge таблицы</li>
<li>таблицы с описаниями (description tables)</li>
</ul>
<p><strong>Таблицы Point-In-Time и Bridge</strong> объединяет то, что их основное назначение — упростить выполнение запросов к данным из Data Vault, а значит, повысить производительность выполнения запросов. Это особенно важно при использовании виртуальных информационных витрин для предоставления данных бизнес-пользователям.</p>
<h1>Таблицы Point-in-Time</h1>
<p>Проблема, которая может возникнуть при выполнении запросов к данным из Raw Data Vault, возникает, когда у хаба или связи имеется несколько спутников (см. рисунок 6.1).</p>
<p><strong>РИСУНОК 6.1 Хабы с несколькими спутниками и PIT-лента (логическая структура)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/6_1_data_vault_Hubs_multiple_satellites_PIT_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1684" src="https://datatalks.ru/wp-content/uploads/2025/06/6_1_data_vault_Hubs_multiple_satellites_PIT_logical_design.jpeg" alt="" width="811" height="435" srcset="https://datatalks.ru/wp-content/uploads/2025/06/6_1_data_vault_Hubs_multiple_satellites_PIT_logical_design.jpeg 811w, https://datatalks.ru/wp-content/uploads/2025/06/6_1_data_vault_Hubs_multiple_satellites_PIT_logical_design-300x161.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/6_1_data_vault_Hubs_multiple_satellites_PIT_logical_design-768x412.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/6_1_data_vault_Hubs_multiple_satellites_PIT_logical_design-450x241.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/6_1_data_vault_Hubs_multiple_satellites_PIT_logical_design-780x418.jpeg 780w" sizes="(max-width: 811px) 100vw, 811px" /></a></p>
<p>В этом примере на каждом хабе и связи, представленных на диаграмме, имеется несколько спутников. Это очень распространённая ситуация для решений в области хранилищ данных, поскольку они интегрируют данные из нескольких исходных систем. Однако такая ситуация увеличивает сложность выполнения запросов к данным из<strong> Raw Data Vault</strong>.</p>
<p><strong>Проблема возникает из-за того, что изменения бизнес-объектов, хранящихся в исходных системах, не происходят одновременно.</strong> Вместо этого бизнес-объект, например пассажир, обновляется в системе внутренних рейсов в определённый момент времени, затем — в системе международных рейсов и т.д. Обратите внимание, что таблица PIT уже привязана к хабам, как показано на ленте.</p>
<p><strong>Таблицы 6.1, 6.2, 6.3 и 6.4</strong> показывают представление данных об обновлениях хаба пассажира и связанных с ним спутников.</p>
<hr />
<blockquote><p>Все представленные таблицы со спутниками (satellites) относятся к типу <span style="color: #ff6600;"><strong>Slowly Changing Dimension Type 2 (SCD Type 2)</strong></span>.</p></blockquote>
<hr />
<p><strong>Таблица 6.1 Данные хаба пассажиров</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/table_6_1.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1675" src="https://datatalks.ru/wp-content/uploads/2025/06/table_6_1.jpeg" alt="" width="783" height="133" srcset="https://datatalks.ru/wp-content/uploads/2025/06/table_6_1.jpeg 783w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_1-300x51.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_1-768x130.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_1-450x76.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_1-780x132.jpeg 780w" sizes="(max-width: 783px) 100vw, 783px" /></a></p>
<p><strong>Таблица 6.2 Данные спутника с именем пассажира</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/07/table_6_2_fixed.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1725" src="https://datatalks.ru/wp-content/uploads/2025/07/table_6_2_fixed.jpeg" alt="" width="912" height="182" srcset="https://datatalks.ru/wp-content/uploads/2025/07/table_6_2_fixed.jpeg 912w, https://datatalks.ru/wp-content/uploads/2025/07/table_6_2_fixed-300x60.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/07/table_6_2_fixed-768x153.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/07/table_6_2_fixed-450x90.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/07/table_6_2_fixed-780x156.jpeg 780w" sizes="(max-width: 912px) 100vw, 912px" /></a></p>
<p><strong>Таблица 6.3 Спутник с данными о предпочитаемом блюде</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/table_6_3.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1677" src="https://datatalks.ru/wp-content/uploads/2025/06/table_6_3.jpeg" alt="" width="771" height="215" srcset="https://datatalks.ru/wp-content/uploads/2025/06/table_6_3.jpeg 771w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_3-300x84.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_3-768x214.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_3-450x125.jpeg 450w" sizes="(max-width: 771px) 100vw, 771px" /></a></p>
<p><strong>Таблица 6.4 Спутник с адресными данными пассажира</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/table_6_4.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1679" src="https://datatalks.ru/wp-content/uploads/2025/06/table_6_4.jpeg" alt="" width="1261" height="403" srcset="https://datatalks.ru/wp-content/uploads/2025/06/table_6_4.jpeg 1261w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_4-300x96.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_4-1024x327.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_4-768x245.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_4-450x144.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_4-780x249.jpeg 780w" sizes="(max-width: 1261px) 100vw, 1261px" /></a></p>
<p><strong>Пример показывает двух пассажиров и изменения в их данных с течением времени.</strong> Например, Эми Миллер, вероятно, вышла замуж за мистера Фримана и впоследствии сменила имя на Эми Фриман (см. таблицу 6.2). Она также меняла предпочитаемое блюдо со временем — от вегетарианской еды к мясу и обратно к вегетарианской (см. таблицу 6.3). Оба пассажира переезжали (или, по крайней мере, указывали разные адреса) с течением времени (см. таблицу 6.4).</p>
<p>Изменения поступали в разное время и не были связаны между собой. Большинство обновлений происходило при бронировании, но они не затрагивали все операционные системы одновременно. И, как следствие, изменение не влияло на все спутники. Вместо этого оно затрагивало только тот спутник, который должен был отразить изменение.</p>
<p>Кроме того, спутники не охватывают все изменения, происходящие в исходной системе. Вместо этого изменения или дельты, захватываемые спутниками, поступают с такой частотой, с какой их поставляют источники. Спутники отслеживают только те изменения, которые доставляются в хранилище данных. Если хранилищу данных необходимо сохранять все изменения, происходящие в исходной системе, то исходная система должна предоставлять журнал аудита, например, такой, какой создаётся Microsoft SQL Server 2014 с включённой функцией <strong>Change Data Capture (CDC)</strong>.</p>
<p>Другой вариант — предоставить данные в режиме реального времени с использованием <strong>Enterprise Service Bus (ESB)</strong> или <strong>Message Queue (MQ)</strong>. Если эти опции не используются, загружаются только те изменения, которые входят в выгрузки из источника. Например, если пакетная загрузка выполняется каждые шесть часов, то дельты в спутниках будут отслеживать запись такой, какой она была каждые шесть часов.</p>
<p>При построении информационной витрины на основе этих сырых данных выполнение запроса о состоянии пассажира на определённую дату, например 5 января 2006 года, становится сложной задачей: запрос должен возвращать данные клиента в том виде, в каком они были активны в соответствии с процессом обработки дельт в хранилище данных на выбранную дату.</p>
<p>Для достижения этой цели требуется использование <strong><code>OUTER JOIN</code>-запросов с обработкой сложных диапазонов времени</strong>. При наличии более трёх спутников на хабе или связи это становится сложно и медленно. Лучше использовать <strong><code>equal-join</code>-запросы</strong> для извлечения данных из Raw Data Vault. Для этого в моделировании Data Vault используется специальный тип сущности: <strong>point-in-time таблицы (PIT)</strong> и <strong>набор фиктивных записей</strong> в спутниковых таблицах, привязанных к фиксированным первичным ключам.</p>
<hr />
<blockquote><p><span style="color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: -0.02em;"><span style="color: #ff6600;">Equal-join-запросы</span> — это тип SQL-запросов, при которых объединение таблиц происходит по условию равенства значений в связанных столбцах. Чаще всего используются в операциях INNER JOIN, LEFT JOIN, и других видах JOIN, когда связываются строки из разных таблиц с одинаковыми значениями в указанных столбцах.</span></p></blockquote>
<hr />
<p>Эта сущность добавляется в модель Data Vault всякий раз, когда производительность выполнения запросов оказывается слишком низкой для заданного хаба или связи и окружающих спутников. В модели PIT-таблицы добавляются к каждому хабу или связи, для которых необходимо рассчитать PIT-таблицу. Поскольку данные в PIT-таблице рассчитываются системой и не поступают из исходной системы, они не подлежат аудиту. <span style="color: #ff6600;"><strong>Назначение PIT таблицы — исключительно обеспечение производительности.</strong></span></p>
<h2>Структура таблицы Point-in-Time</h2>
<p><strong>Структура Point-In-Time</strong> — это вспомогательная структура для запросов, ориентированная на производительность запросов. Следует рассматривать структуру PIT как часть слоя Business Vault или информационной витрины. Таким образом, структура может быть изменена, чтобы включать вычисляемые столбцы при необходимости для достижения максимальной производительности запросов.</p>
<p>Для достижения этой цели PIT-таблица создаёт снимки данных на даты, заданные потребителями данных выше по потоку. Например, некоторым компаниям требуется текущее состояние данных каждый день, другим — каждую секунду. Для удовлетворения этих требований PIT-таблица включает дату и время снимка в комбинации с PassengerHashKey в качестве уникального ключа сущности. Для каждой такой комбинации PIT-таблица содержит даты загрузки и соответствующие хэш-ключи из каждого спутника, которые наилучшим образом соответствуют дате снимка. Физическое представление PIT-таблицы для примера из предыдущего раздела показано на рисунке 6.2.</p>
<p><strong>РИСУНОК 6.2 Физическая PIT-таблица для пассажира (физическая структура)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/6_2_data_vault_Physical_PIT_Table_for_passenger.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1685" src="https://datatalks.ru/wp-content/uploads/2025/06/6_2_data_vault_Physical_PIT_Table_for_passenger.jpeg" alt="" width="323" height="559" srcset="https://datatalks.ru/wp-content/uploads/2025/06/6_2_data_vault_Physical_PIT_Table_for_passenger.jpeg 323w, https://datatalks.ru/wp-content/uploads/2025/06/6_2_data_vault_Physical_PIT_Table_for_passenger-173x300.jpeg 173w" sizes="(max-width: 323px) 100vw, 323px" /></a></p>
<p><strong>Каждая запись в таблице point-in-time идентифицируется хэш-ключом.</strong> Это хэш-значение может использоваться далее при загрузке Type 2 измерений информационной витрины. После заполнения PIT-таблицы из предыдущего примера данными она будет выглядеть, как таблица 6.5.</p>
<p><strong>Таблица 6.5 Представление данных PIT-таблицы для пассажира</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/table_6_5.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1680" src="https://datatalks.ru/wp-content/uploads/2025/06/table_6_5.jpeg" alt="" width="1258" height="432" srcset="https://datatalks.ru/wp-content/uploads/2025/06/table_6_5.jpeg 1258w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_5-300x103.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_5-1024x352.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_5-768x264.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_5-450x155.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_5-780x268.jpeg 780w" sizes="(max-width: 1258px) 100vw, 1258px" /></a></p>
<p>Как показано на рисунке, должна быть по одному столбцу с датой загрузки для каждого доступного спутника. Для каждой комбинации <strong>PassengerHashKey</strong> и <strong>SnapshotDate</strong> приводятся соответствующие даты загрузки по каждому спутнику.</p>
<p>Кроме того, хэш-ключ копируется из спутника. В большинстве случаев это значение будет совпадать со значением хэш-ключа в идентифицирующем ключе (в этом примере — PassengerHashKey). Однако в некоторых случаях соответствующая запись в спутнике для заданной даты снимка отсутствует: либо бизнес-ключ не был известен исходной системе на момент указанной даты снимка, либо он был удалён из исходной системы. В PIT-таблице, показанной в таблице 6.5, это соответствует записи номер 1. В отличие от спутника, хранящего имена пассажиров, спутники Preferred Dish и Passenger Address не содержат записи на дату снимка <code>1995-01-01</code>. <strong>Если исходная система не предоставляет соответствующую запись, PIT-таблица должна ссылаться на неизвестную запись.</strong> В моделировании Data Vault 2.0 такая запись называется <span style="color: #ff6600;"><strong>ghost-записью</strong></span>. Эта запись должна быть добавлена в каждый спутник (таблица 6.6).</p>
<p><strong>Таблица 6.6 Спутник с данными о пассажирах с использованием ghost-записи</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/table_6_6.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1681" src="https://datatalks.ru/wp-content/uploads/2025/06/table_6_6.jpeg" alt="" width="784" height="127" srcset="https://datatalks.ru/wp-content/uploads/2025/06/table_6_6.jpeg 784w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_6-300x49.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_6-768x124.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_6-450x73.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_6-780x126.jpeg 780w" sizes="(max-width: 784px) 100vw, 784px" /></a></p>
<p>Преимущество этой записи заключается в том, что она является допустимой во все моменты времени (то есть содержит самую раннюю дату загрузки и самую позднюю дату окончания загрузки, доступные для выбранного типа данных). Источник записи установлен как <code>SYSTEM</code>, чтобы указать, что запись создана искусственно. PIT-таблица из таблицы 6.5 будет модифицирована путём замены ссылок <code>NULL</code> на ссылки на <strong>ghost-запись</strong> в спутниковой таблице (таблица 6.7).</p>
<p><strong>Таблица 6.7 Представление данных PIT с ссылками на ghost-записи</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/table_6_7.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1702" src="https://datatalks.ru/wp-content/uploads/2025/06/table_6_7.jpeg" alt="" width="1249" height="436" srcset="https://datatalks.ru/wp-content/uploads/2025/06/table_6_7.jpeg 1249w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_7-300x105.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_7-1024x357.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_7-768x268.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_7-450x157.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_7-780x272.jpeg 780w" sizes="(max-width: 1249px) 100vw, 1249px" /></a></p>
<p><strong>NULL-значения</strong> из предыдущей версии этой PIT были заменены ссылками на ghost-запись в каждом спутнике. Обеспечив наличие ghost-записи в каждом спутнике, на который ссылается PIT-таблица, становится возможным использовать <span style="color: #000000;"><strong><span style="font-family: inherit; font-size: inherit; letter-spacing: -0.02em;">Equal</span>-join</strong></span> вместо <span style="color: #000000;"><strong>outer join</strong></span> при извлечении данных из неё. Поскольку ссылки на спутники в PIT-таблице больше не содержат значений NULL, их не нужно обрабатывать отдельно.</p>
<p>PIT-таблица не содержит других системно-сгенерированных атрибутов, таких как источник записи. Это связано с тем, что данные создаются системой и не имеют собственного источника записи или даты загрузки. Однако возможно добавление дополнительных вычисляемых атрибутов по необходимости. Например, можно добавить дату окончания загрузки, чтобы поддерживать запросы с использованием оператора BETWEEN. Другие атрибуты могут предоставлять агрегации или вычисления для дальнейшего повышения производительности запросов. Однако следует уделить особое внимание ширине PIT-таблицы. Если она станет слишком широкой, производительность снова снизится, и преимущество PIT-таблицы будет утрачено. Эта рекомендация особенно важна для Microsoft SQL Server 2014, поскольку он поддерживает только страницы базы данных размером 8 КБ. Если серверы баз данных поддерживают страницы размером более 32 КБ и соответствующий размер блока на уровне физического хранилища, это снижает указанную проблему.</p>
<p>Для поддержания высокой производительности PIT-таблиц есть две рекомендации. <strong>Первая — включить сжатие на уровне базы данных.</strong> Microsoft SQL Server поддерживает сжатие данных в таблицах базы данных.</p>
<p><strong>Сжатие данных в таблице имеет несколько преимуществ:</strong></p>
<ul>
<li>Сжатие уменьшает размер базы данных</li>
<li>Оно улучшает производительность ввода-вывода, поскольку сжатые данные занимают меньше страниц базы данных, которые нужно считывать с диска</li>
</ul>
<p><strong>Однако сжатие данных также требует больше ресурсов CPU для сжатия и распаковки данных.</strong></p>
<p><strong>Второе решение для поддержания высокой производительности PIT-таблиц — удаление неиспользуемых снимков.</strong></p>
<p>Стандартная PIT-таблица основана на регулярном снимке и принудительно создаётся в соответствии с соглашениями об уровне обслуживания (SLA) с бизнес-пользователями и требованиями к предоставлению данных. Следует отметить, что бывают случаи, когда требуется полная история, и тогда можно вычислить дату снимка на основе всех дат загрузки, хранящихся в спутниках, связанных с родительской сущностью. Таким образом, дата снимка не основана на регулярных интервалах, а определяется фактическими изменениями в исходной системе, охватывая полную историю данных. Однако полная история должна быть исключением, а не правилом.</p>
<h2>Управляемое PIT-окно (PIT Window)</h2>
<p>Хорошей практикой является введение управляемых окон в PIT-таблицы, чтобы предотвратить неконтролируемое потребление хранилища ими. В большинстве случаев существует необходимость в снимках PIT-таблицы только в течение ограниченного времени. Старые данные должны быть удалены, так как они больше не используются.</p>
<p>На рисунке 6.3 PIT-таблица сохраняет историю только за последние три месяца и удаляет все снимки, которые старше этих трёх месяцев. Наличие старых, неиспользуемых данных в PIT-таблицах снижает производительность запросов, если не выполнена дополнительная оптимизация, такая как партиционирование таблицы. Необходимо, чтобы бизнес определил, какую часть старых снимков следует сохранять в PIT-таблицах, и, следовательно, сделать доступными в виртуальных измерениях. Фактически, это «определение старых данных» указывается по-разному для каждой PIT-таблицы.</p>
<p><strong>РИСУНОК 6.3 Управление PIT-окном</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/6_3_data_vault_managing_PIT_window.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1686" src="https://datatalks.ru/wp-content/uploads/2025/06/6_3_data_vault_managing_PIT_window.jpeg" alt="" width="1275" height="287" srcset="https://datatalks.ru/wp-content/uploads/2025/06/6_3_data_vault_managing_PIT_window.jpeg 1275w, https://datatalks.ru/wp-content/uploads/2025/06/6_3_data_vault_managing_PIT_window-300x68.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/6_3_data_vault_managing_PIT_window-1024x231.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/06/6_3_data_vault_managing_PIT_window-768x173.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/6_3_data_vault_managing_PIT_window-450x101.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/6_3_data_vault_managing_PIT_window-780x176.jpeg 780w" sizes="(max-width: 1275px) 100vw, 1275px" /></a></p>
<p>Другой вариант предотвращения снижения производительности — это введение другой концепции, которая не удаляет все исторические снимки из PIT-таблиц. Вместо удаления всех данных из PIT-таблицы, которые старше заданного количества дней или месяцев, удаляется большая часть старых данных. Эта концепция называется логарифмическая PIT-таблица и показана на рисунке 6.4.</p>
<p><strong>РИСУНОК 6.4 Снимки логарифмической PIT-таблицы</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/6_4_data_vault_Logarithmic_PIT_table_snapshots.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1687" src="https://datatalks.ru/wp-content/uploads/2025/06/6_4_data_vault_Logarithmic_PIT_table_snapshots.jpeg" alt="" width="1484" height="991" srcset="https://datatalks.ru/wp-content/uploads/2025/06/6_4_data_vault_Logarithmic_PIT_table_snapshots.jpeg 1484w, https://datatalks.ru/wp-content/uploads/2025/06/6_4_data_vault_Logarithmic_PIT_table_snapshots-300x200.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/6_4_data_vault_Logarithmic_PIT_table_snapshots-1024x684.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/06/6_4_data_vault_Logarithmic_PIT_table_snapshots-768x513.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/6_4_data_vault_Logarithmic_PIT_table_snapshots-450x301.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/6_4_data_vault_Logarithmic_PIT_table_snapshots-780x521.jpeg 780w" sizes="(max-width: 1484px) 100vw, 1484px" /></a></p>
<p>Все снимки за текущий месяц сохраняются. Кроме того, по одному снимку в неделю хранится за текущий год. После этого PIT-таблица сохраняет только один снимок в месяц, но только за последние пять лет. Более старые данные удаляются. Такая таблица представляет собой компромисс между потреблением хранилища и производительностью запросов. Это позволяет относительно просто выполнять запросы к более старым данным. Если потребуются дополнительные снимки, их можно пересоздать с использованием того же алгоритма, который использовался ранее.</p>
<h1>Bridge Tables</h1>
<p>Существует ещё один тип вспомогательных таблиц для запросов в стандарте Data Vault 2.0 — <strong>bridge-таблица (соединительная таблица).</strong> Подобно PIT-таблицам, их <strong>цель — повысить производительность запросов к Raw Data Vault за счёт сокращения количества необходимых соединений (joins) в запросе.</strong></p>
<p>Они также являются <strong>частью Business Vault</strong>, поскольку данные в bridge-таблицах создаются системой и не подлежат аудиту по этой причине. <strong>Bridge-таблицы</strong> следует создавать только в том случае, если запросы к Raw Data Vault испытывают проблемы с производительностью.</p>
<p>В отличие от PIT-таблиц, которые охватывают несколько спутников хаба или линка, bridge-таблица охватывает несколько хабов и линков. Таким образом, она схожа со специализированной link-таблицей. Она не содержит никакой информации из спутников, в основном потому, что ширина таблицы стала бы слишком большой. На рисунке 6.5 показана логическая модель bridge-таблицы в Data Vault 2.0.</p>
<p><strong>РИСУНОК 6.5 Bridge-таблица для повышения производительности запросов к данным о пассажирах (логический дизайн)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/6_5_data_vault_Bridge_table_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1690" src="https://datatalks.ru/wp-content/uploads/2025/06/6_5_data_vault_Bridge_table_logical_design.jpeg" alt="" width="1251" height="322" srcset="https://datatalks.ru/wp-content/uploads/2025/06/6_5_data_vault_Bridge_table_logical_design.jpeg 1251w, https://datatalks.ru/wp-content/uploads/2025/06/6_5_data_vault_Bridge_table_logical_design-300x77.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/6_5_data_vault_Bridge_table_logical_design-1024x264.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/06/6_5_data_vault_Bridge_table_logical_design-768x198.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/6_5_data_vault_Bridge_table_logical_design-450x116.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/6_5_data_vault_Bridge_table_logical_design-780x201.jpeg 780w" sizes="(max-width: 1251px) 100vw, 1251px" /></a></p>
<p>В приведённом выше сценарии имеются данные о пассажирах, связанных с агентом по продажам через Booking-link. Спутники используются для большинства хабов и линков в этом примере. Bridge-таблица Passenger Bridge не охватывает Flight и Airline. Модель не показывает бизнес-ключи или другие атрибуты, являющиеся частью сущностей Data Vault. Bridge-таблица действует как более высокий уровень факт-таблицы без фактов (fact-less fact table) и содержит hash-ключи хабов и линков, которые она охватывает.</p>
<p>Ещё одного повышения производительности можно добиться, добавив в bridge-таблицу вычисления, которые занимают много времени. Это особенно важно при создании виртуальных информационных витрин на базе Data Vault, поскольку такие витрины требуют вычислений, которые замедляют доступ к виртуализированным сущностям витрины. Используя bridge-таблицы, можно значительно повысить производительность запросов.</p>
<p>Bridge-таблицы не обязаны иметь ту же степень детализации (grain), что и link-таблицы, которые они охватывают. В таких случаях bridge-таблица может содержать агрегированные значения, которые добавляются в структуру и загружаются с помощью операторов GROUP BY. В результате bridge-таблица имеет более высокий уровень агрегации (grain), чем линк-таблицы, включённые в неё. Таким образом, bridge-таблица становится очень похожей на exploration link.</p>
<p>Следует отметить, что при загрузке bridge-таблицы возникает декартово произведение всех бизнес-ключей, участвующих в соответствующих хабах. Поэтому в запросе необходимо использовать оператор WHERE. Вместо загрузки всех возможных комбинаций запрос должен быть сфокусирован на требуемом уровне детализации факт-таблицы, то есть, на основе bridge-таблицы. Если в информационной витрине существует несколько факт-таблиц с разной степенью детализации, должно быть несколько bridge-таблиц (по крайней мере одна bridge-таблица на определение каждого grain).</p>
<h2>Структура Bridge-таблицы</h2>
<p>Bridge-таблица содержит все hash-ключи из хабов и линков, которые являются частью bridge-таблицы, а также дату снимка и hash-ключ для каждой записи. Бизнес-ключи, вычисляемые или агрегированные поля — опциональны. На рисунке 6.6 показан пример bridge-таблицы.</p>
<p><strong>РИСУНОК 6.6 Физический дизайн bridge-таблицы (физическая структура)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/6_6_data_vault_physical_design_Bridge.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1692" src="https://datatalks.ru/wp-content/uploads/2025/06/6_6_data_vault_physical_design_Bridge.jpeg" alt="" width="288" height="322" srcset="https://datatalks.ru/wp-content/uploads/2025/06/6_6_data_vault_physical_design_Bridge.jpeg 288w, https://datatalks.ru/wp-content/uploads/2025/06/6_6_data_vault_physical_design_Bridge-268x300.jpeg 268w" sizes="(max-width: 288px) 100vw, 288px" /></a></p>
<p>Каждая запись в bridge-таблице BrPassenger идентифицируется по hash-ключам ссылочных хабов и линков. Атрибут SnapshotDate показывает, когда отдельная запись была загружена в bridge-таблицу. В некоторых случаях SnapshotDate включается в состав первичного ключа, например, при создании факт-таблиц для отслеживания запасов: в таком случае запасы отслеживаются по продукту, магазину и дате.</p>
<p><strong>Таблица 6.8 Информация из bridge-таблицы</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/table_6_8.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1704" src="https://datatalks.ru/wp-content/uploads/2025/06/table_6_8.jpeg" alt="" width="792" height="182" srcset="https://datatalks.ru/wp-content/uploads/2025/06/table_6_8.jpeg 792w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_8-300x69.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_8-768x176.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_8-450x103.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_8-780x179.jpeg 780w" sizes="(max-width: 792px) 100vw, 792px" /></a></p>
<p>Хотя можно добавить бизнес-ключи, такие как номер пассажира (как показано в таблице 6.8), в bridge-таблицу, делать это следует с осторожностью, поскольку это увеличивает ширину таблицы. Если ширина становится слишком большой, производительность резко падает, особенно при больших объемах данных. Это также приводит к фрагментации данных и чрезмерной индексации строк. Эти эффекты нейтрализуют преимущества bridge-таблицы и фактически вызывают снижение производительности. Поэтому важно, чтобы ширина bridge-таблицы оставалась как можно меньшей.</p>
<p>В некоторых случаях bridge-таблицы также могут содержать реальные данные из спутников, такие как значения ключевых показателей эффективности (KPI) или другие значения, используемые для создания метрик в факт-таблице. Однако детализация (grain) данных из спутника должна совпадать с детализацией ключей в bridge-таблице. В противном случае факты могут быть посчитаны дважды или трижды при последующей агрегации данных из bridge-таблицы.</p>
<h2>Сравнение PIT-таблиц и bridge-таблиц</h2>
<p>Хотя PIT-таблицы и bridge-таблицы служат одной цели — помогают выполнять запросы к Raw Data Vault, между ними есть различия. PIT-таблицы относятся только к одному хабу или линку. Они используются для создания снимка дат загрузки спутников. Для этого они сохраняют только hash-ключ хаба (или линка) и даты загрузки соответствующих спутников, а также дату снимка самой PIT-таблицы. Можно добавить дополнительные вычисляемые атрибуты, такие как бизнес-ключ хаба, что является распространённой практикой.</p>
<p>Bridge-таблицы, напротив, создаются из нескольких хабов и линков. Они содержат hash-ключи всех хабов и линков, которые они охватывают. Кроме того, распространённой практикой является добавление соответствующих бизнес-ключей. Также разрешено добавление вычисляемых полей. Они также идентифицируются по дате снимка.</p>
<p>Общие черты обоих сущностей заключаются в том, что они создаются системой и не являются частью основной архитектуры. Системно создаваемые поля делают их неподотчетными (nonauditable). Обе таблицы могут содержать вычисляемые поля. Они используются для повышения производительности запросов в Data Vault, особенно если используется виртуализированная информационная витрина выше по потоку. В этом случае они могут значительно повысить производительность запросов и являются ключевым компонентом виртуализации. Однако на практике, при использовании соответствующего оборудования, потребность в них может отсутствовать.</p>
<h1>Справочные таблицы (Reference Tables)</h1>
<p>Следующие разделы описывают другой тип сущностей, который не является частью основной архитектуры, но часто используется в Data Vault.</p>
<p>Мы представили хаб в главе 4 как уникальный список бизнес-ключей, идентифицирующих объекты, которые используются в бизнесе. Однако в корпоративных данных существует больше ключей и кодов, которые не обязательно являются бизнес-ключами, поскольку они не ссылаются на бизнес-объекты. Например, ISO-коды стран, такие как USA для Соединённых Штатов или DEU для Германии — это коды, которые используются в бизнесе, но сами страны не рассматриваются как бизнес-объекты внутри организации. Вместо этого они используются как описательные справочные данные, обозначающие определённое состояние информации. В случае кодов стран ISO-код может описывать страну, где была совершена продажа. Это описание обычно включает официальное название страны и другую описательную информацию, такую как континент или столица. Часто эти справочные данные не контролируются организацией, а поддерживаются внешними структурами. С другой стороны, тот же самый код страны может быть бизнес-ключом в другой организации, например, в Организации Объединённых Наций (ООН).</p>
<p>Справочные данные не являются исключительно описательными. Они существуют в контексте другой информации. Информация о стране без контекста транзакции продажи не имеет ценности для бизнеса. Или перефразируя: какова ценность для бизнеса от неиспользуемого списка кодов стран с их официальными названиями? Нулевая. Но если код страны используется в других данных, таких как транзакции продаж, он предоставляет дополнительную описательную информацию, добавляющую ценность бизнесу. Однако они не считаются бизнес-ключами, так как не используются бизнес-объектами; следовательно, они обычно не включаются в структуры хабов.</p>
<p>Здесь и вступают в игру справочные таблицы (reference tables). Справочные таблицы используются для хранения информации, которая обычно применяется для установления контекста и описания других бизнес-ключей. В большинстве случаев это стандартные коды и описания или классификации информации. Следующие разделы описывают некоторые варианты справочных таблиц.</p>
<h2>Справочные таблицы без истории (No-History Reference Tables)</h2>
<p><strong>Самая базовая справочная таблица — это обычная таблица во второй или третьей нормальной форме.</strong> Такая базовая таблица используется, когда нет необходимости хранить историю изменений справочных данных. Это часто относится к справочным данным, которые не будут изменяться или будут изменяться очень редко.</p>
<p><strong>Типичные примеры включают:</strong></p>
<ul>
<li>Коды и описания медицинских препаратов по рецепту</li>
<li>Биржевые символы</li>
<li>Коды медицинских диагнозов</li>
<li>Коды и описания VIN-номеров (например, коды производителей)</li>
<li>Календарные даты</li>
<li>Календарное время</li>
<li>Международные коды валют</li>
<li>Сокращения кодов штатов США</li>
</ul>
<p>Следует отметить, что всё зависит от конкретного проекта: например, в некоторых странах (в отличие от США) могут происходить частые изменения кодов медицинских диагнозов — по разным причинам.</p>
<p>Простая справочная таблица без истории не содержит полей begin-date и end-date, поскольку данные не меняются. Поэтому структура таблицы очень простая, как показано на рисунке 6.7.</p>
<p><strong>РИСУНОК 6.7 Логическая модель справочной таблицы без истории для календаря</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/6_7_data_vault_nonhistorized_reference_table_for_calendar_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1713" src="https://datatalks.ru/wp-content/uploads/2025/06/6_7_data_vault_nonhistorized_reference_table_for_calendar_logical_design.jpeg" alt="" width="713" height="711" srcset="https://datatalks.ru/wp-content/uploads/2025/06/6_7_data_vault_nonhistorized_reference_table_for_calendar_logical_design.jpeg 713w, https://datatalks.ru/wp-content/uploads/2025/06/6_7_data_vault_nonhistorized_reference_table_for_calendar_logical_design-300x300.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/6_7_data_vault_nonhistorized_reference_table_for_calendar_logical_design-150x150.jpeg 150w, https://datatalks.ru/wp-content/uploads/2025/06/6_7_data_vault_nonhistorized_reference_table_for_calendar_logical_design-450x449.jpeg 450w" sizes="(max-width: 713px) 100vw, 713px" /></a></p>
<p>Эта логическая модель показывает справочную таблицу для хранения простого календаря в Business Vault. Данные идентифицируются по ключу Date, который представляет собой поле типа Date в базе данных. Другие атрибуты в этом примере — Year, Month и Day, которые хранят соответствующие целые числа. Day of Week — это текстовое представление дня недели, например, «Monday».</p>
<p>Нет необходимости хранить историю изменений, поскольку в большинстве бизнесов отслеживать это не требуется. Это не означает, что данные в этой структуре не могут меняться. Однако большинство изменений — это исправления ошибок или обновления, которые должны быть отражены во всех витринах данных, включая исторические данные. Примеры таких изменений включают переводы значения Day of Week или его сокращения. На рисунке 6.8 представлена ER-модель этой справочной таблицы.</p>
<p><strong>РИСУНОК 6.8 Физическая модель справочной таблицы без истории для календаря</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/6_8_data_vault_nonhistorized_reference_table_for_calendar_physical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1714" src="https://datatalks.ru/wp-content/uploads/2025/06/6_8_data_vault_nonhistorized_reference_table_for_calendar_physical_design.jpeg" alt="" width="343" height="507" srcset="https://datatalks.ru/wp-content/uploads/2025/06/6_8_data_vault_nonhistorized_reference_table_for_calendar_physical_design.jpeg 343w, https://datatalks.ru/wp-content/uploads/2025/06/6_8_data_vault_nonhistorized_reference_table_for_calendar_physical_design-203x300.jpeg 203w" sizes="(max-width: 343px) 100vw, 343px" /></a></p>
<p><strong>Описательный бизнес-ключ используется как первичный ключ таблицы.</strong> Причина этого — ключ используется в спутниках и сущностях Business Vault для ссылки на данные из этой таблицы. Это делает данные более читаемыми и обеспечивает их аудируемость со временем. Если бизнес-ключ используется в качестве первичного ключа справочной таблицы, это даёт преимущество: его можно использовать в ER-моделях или для обеспечения ссылочной целостности (если включена), например, в целях отладки.</p>
<p><strong>Таблица 6.9 &#171;Календарные данные в справочной таблице без истории&#187; показывает пример данных из календарной справочной таблицы:</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/table_6_9.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1705" src="https://datatalks.ru/wp-content/uploads/2025/06/table_6_9.jpeg" alt="" width="960" height="365" srcset="https://datatalks.ru/wp-content/uploads/2025/06/table_6_9.jpeg 960w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_9-300x114.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_9-768x292.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_9-450x171.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_9-780x297.jpeg 780w" sizes="(max-width: 960px) 100vw, 960px" /></a></p>
<p>В этом примере снова используется атрибут <strong>RecordSource</strong>, поскольку данные поступают из <strong>Master Data Services (MDS)</strong>. Если пользователь изменяет данные в MDS, это перезаписывает содержимое справочной таблицы, так как история изменений не отслеживается. В других случаях данные могут не поступать ниоткуда извне — тогда поля <strong>LoadDate</strong> и <strong>RecordSource</strong> не нужны. Тем не менее, хорошей практикой считается брать данные из аналитического мастер-данных источника, так как это позволяет бизнес-пользователям редактировать данные без участия IT. Это является предпосылкой для управляемой самостоятельной аналитики (managed self-service BI).</p>
<p>После создания справочной таблицы в модели, её можно интегрировать в остальную модель, используя первичный ключ справочной таблицы там, где это уместно: чаще всего — в спутниках, но также и в сущностях Business Vault. На рисунке 6.9 показан типичный случай использования, когда спутник на хабе Passenger ссылается на первичный ключ справочной таблицы.</p>
<p><strong>РИСУНОК 6.9 Спутник со справочными данными (логическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/6_9_data_vault_Satellite_with_reference_data_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1715" src="https://datatalks.ru/wp-content/uploads/2025/06/6_9_data_vault_Satellite_with_reference_data_logical_design.jpeg" alt="" width="856" height="551" srcset="https://datatalks.ru/wp-content/uploads/2025/06/6_9_data_vault_Satellite_with_reference_data_logical_design.jpeg 856w, https://datatalks.ru/wp-content/uploads/2025/06/6_9_data_vault_Satellite_with_reference_data_logical_design-300x193.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/6_9_data_vault_Satellite_with_reference_data_logical_design-768x494.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/6_9_data_vault_Satellite_with_reference_data_logical_design-450x290.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/6_9_data_vault_Satellite_with_reference_data_logical_design-780x502.jpeg 780w" sizes="(max-width: 856px) 100vw, 856px" /></a></p>
<p>Спутник Address ссылается на справочную таблицу State через почтовые аббревиатуры штатов США (USPS). Таким образом, справочник указывает на наличие более описательной информации о штате в справочной таблице. Благодаря этому не теряется читаемость в спутнике, и при этом сохраняется базовый принцип использования сущностей Data Vault.</p>
<h2>Справочные таблицы с историей (History-Based Reference Tables)</h2>
<p>В предыдущем разделе были представлены простые справочные таблицы без истории. Однако существуют случаи, когда необходимо сохранять историю справочных данных — аналогично тому, как это делается со спутниками. Чтобы предложить альтернативу спутникам Data Vault при работе со справочными данными, можно использовать справочные таблицы с историей. Если бизнесу важно пересоздавать отчёты или возвращаться назад во времени, чтобы просматривать исторические справочные данные, такие таблицы могут удовлетворить эти требования.</p>
<p>Подход Data Vault к этой задаче заключается в добавлении стандартных спутников к справочной таблице, представленной в предыдущем разделе. В то время как базовая таблица содержит только неисторизированные атрибуты, спутник хранит справочные данные, требующие истории. Рисунок 6.10 показывает расширенную версию справочной таблицы из предыдущего раздела. Она дополнена спутником Fiscal Calendar, который добавляет два историзируемых атрибута к справочной таблице: Fiscal Year и Fiscal Quarter. Благодаря их историзации бизнес получает возможность изменять эти данные в будущем или учитывать изменения в прошлом. Это может быть необходимо, если, например, две организации с разными фискальными календарями объединились, и бизнесу нужно работать с историческими отчётами.</p>
<p><strong>РИСУНОК 6.10 Справочная таблица с историей для календаря (логическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/6_10_data_vault_History_based_reference_table_for_calendar_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1717" src="https://datatalks.ru/wp-content/uploads/2025/06/6_10_data_vault_History_based_reference_table_for_calendar_logical_design.jpeg" alt="" width="855" height="545" srcset="https://datatalks.ru/wp-content/uploads/2025/06/6_10_data_vault_History_based_reference_table_for_calendar_logical_design.jpeg 855w, https://datatalks.ru/wp-content/uploads/2025/06/6_10_data_vault_History_based_reference_table_for_calendar_logical_design-300x191.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/6_10_data_vault_History_based_reference_table_for_calendar_logical_design-768x490.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/6_10_data_vault_History_based_reference_table_for_calendar_logical_design-450x287.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/6_10_data_vault_History_based_reference_table_for_calendar_logical_design-780x497.jpeg 780w" sizes="(max-width: 855px) 100vw, 855px" /></a></p>
<p>Добавив спутник к справочной таблице для обеспечения историзации, можно следовать основным концепциям моделирования Data Vault 2.0, расширяя простую справочную таблицу, показанную в предыдущем разделе. Это отличный пример того, как можно комбинировать базовые сущности для создания более продвинутых.</p>
<p>Рисунок 6.11 показывает физическую модель, полученную из логической модели на рисунке 6.6.</p>
<p><strong>РИСУНОК 6.11 Физическая модель историзируемого календаря с использованием спутника Data Vault (физическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/6_11_data_vault_Physical_model_of_historized_calendar.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1718" src="https://datatalks.ru/wp-content/uploads/2025/06/6_11_data_vault_Physical_model_of_historized_calendar.jpeg" alt="" width="858" height="507" srcset="https://datatalks.ru/wp-content/uploads/2025/06/6_11_data_vault_Physical_model_of_historized_calendar.jpeg 858w, https://datatalks.ru/wp-content/uploads/2025/06/6_11_data_vault_Physical_model_of_historized_calendar-300x177.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/6_11_data_vault_Physical_model_of_historized_calendar-768x454.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/6_11_data_vault_Physical_model_of_historized_calendar-450x266.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/6_11_data_vault_Physical_model_of_historized_calendar-780x461.jpeg 780w" sizes="(max-width: 858px) 100vw, 858px" /></a></p>
<p>Спутник <strong>SatFiscalCalendar</strong> присоединяется к справочной таблице через её первичный ключ <strong>Date</strong>. Мы не используем хешированную версию ключа ради читаемости справочной таблицы. Если бы мы предпочли использовать хеш Date, это потребовало бы его использования в качестве первичного ключа, что, в свою очередь, повлияло бы на использование справочной таблицы. В остальном спутник очень похож на стандартные спутники Data Vault 2.0 — особенно это касается использования <strong>LoadDate</strong> в первичном ключе и <strong>LoadEndDate</strong> для задания окончания срока действия записей спутника.</p>
<h2>Коды и описания (Code and Descriptions)</h2>
<p>Часто в бизнесе используются стандартные коды, для которых требуется описание, чтобы конечные пользователи могли эффективно их использовать. Один из примеров — коды штатов, использовавшиеся в предыдущих разделах. Однако существует множество других случаев, когда используются аббревиатуры или иные коды, дополняемые описаниями.</p>
<p>Например, <strong>FAA (Федеральное авиационное управление США)</strong> использует коды операций, представленные в таблице 6.10, для классификации воздушных судов по предполагаемому назначению:</p>
<p><strong>Таблица 6.10 Список стандартных кодов операций FAA</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/table_6_10.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1706" src="https://datatalks.ru/wp-content/uploads/2025/06/table_6_10.jpeg" alt="" width="364" height="245" srcset="https://datatalks.ru/wp-content/uploads/2025/06/table_6_10.jpeg 364w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_10-300x202.jpeg 300w" sizes="(max-width: 364px) 100vw, 364px" /></a></p>
<p>Код стандартной операции используется во всех бизнес-процессах FAA как во внутренних, так и во внешних интерфейсах. Каждый, кто работает в авиационной индустрии и взаимодействует с FAA, знает значение этих кодов. Однако существуют также глоссарии, которые переводят эти коды в описания, обеспечивая больше смысла для тех пользователей, которые не используют эти коды каждый день. И поскольку эти коды настолько широко используются в бизнес-процессах, существует 100% вероятность того, что код или описание появится в пользовательском интерфейсе, например в отчёте или OLAP-измерении.</p>
<p>Например, их часто используют для группировки информации в отчёте или агрегации показателей по этим кодам. Интеграция описания в пользовательский интерфейс (дополнительно к коду или вместо него) значительно повышает удобство использования отчёта или OLAP-представления для случайных пользователей отображаемой информации.</p>
<p>Очевидно, что существует множество подобных списков кодов или аббревиатур и их соответствующих описаний. Вместо создания отдельной справочной таблицы (с историей или без неё) для каждого из таких списков, мы вводим таблицу кодов и описаний, которая группирует эти списки в одну категоризированную таблицу (рисунок 6.12).</p>
<p><strong>РИСУНОК 6.12 Таблица справочных кодов и описаний (логическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/6_12_data_vault_code_and_descriptions_reference_table_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1719" src="https://datatalks.ru/wp-content/uploads/2025/06/6_12_data_vault_code_and_descriptions_reference_table_logical_design.jpeg" alt="" width="862" height="488" srcset="https://datatalks.ru/wp-content/uploads/2025/06/6_12_data_vault_code_and_descriptions_reference_table_logical_design.jpeg 862w, https://datatalks.ru/wp-content/uploads/2025/06/6_12_data_vault_code_and_descriptions_reference_table_logical_design-300x170.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/6_12_data_vault_code_and_descriptions_reference_table_logical_design-768x435.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/6_12_data_vault_code_and_descriptions_reference_table_logical_design-450x255.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/6_12_data_vault_code_and_descriptions_reference_table_logical_design-780x442.jpeg 780w" sizes="(max-width: 862px) 100vw, 862px" /></a></p>
<p>Рисунок 6.12 показывает минимальную справочную таблицу для кодов и описаний. Обычно в такой таблице присутствуют дополнительные описательные атрибуты, например:</p>
<ul>
<li><strong>Краткое описание (Short description):</strong> используется в диаграммах и других графиках, поскольку в столбчатых, круговых и прочих диаграммах имеется ограниченное место для подписей.</li>
<li><strong>Порядок сортировки (Sort order):</strong> большинство справочных данных не сортируются в алфавитном порядке при использовании в отчётах. Вместо этого бизнес хочет самостоятельно определять порядок вывода записей в измерениях.</li>
<li><strong>Внешняя ссылка (External reference):</strong> часто это URL-адрес, где можно найти больше информации о записи справочных данных. Полезно для интеграции справочных данных с Wiki в корпоративной сети.</li>
<li><strong>Владелец (Owner):</strong> указывает функциональное подразделение, ответственное за поддержание записи.</li>
<li><strong>Комментарий (Comment):</strong> произвольный текст, описывающий запись справочных данных для бизнес-пользователя, который её обслуживает.</li>
</ul>
<p>ER-модель справочной таблицы кодов и описаний представлена на рисунке 6.13.</p>
<p><strong>РИСУНОК 6.13 Справочная таблица кодов и описаний (физическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/6_13_data_vault_Code_and_descriptions_reference_table_physical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1720" src="https://datatalks.ru/wp-content/uploads/2025/06/6_13_data_vault_Code_and_descriptions_reference_table_physical_design.jpeg" alt="" width="346" height="266" srcset="https://datatalks.ru/wp-content/uploads/2025/06/6_13_data_vault_Code_and_descriptions_reference_table_physical_design.jpeg 346w, https://datatalks.ru/wp-content/uploads/2025/06/6_13_data_vault_Code_and_descriptions_reference_table_physical_design-300x231.jpeg 300w" sizes="(max-width: 346px) 100vw, 346px" /></a></p>
<p>Структура сущности следует шаблону других справочных таблиц, используя комбинацию описательных бизнес-ключей в качестве первичного ключа таблицы.</p>
<p>Следует отметить, что этот подход применим только в том случае, если справочные данные используют одинаковые типы данных и одни и те же атрибуты для описания кода. Если структура справочных данных отличается, тогда используются индивидуальные справочные таблицы.</p>
<p>Данные FAA, представленные в таблице 6.10, будут храниться в физической таблице, как показано в таблице 6.11.</p>
<p><strong>Таблица 6.11 Таблица кодов и описаний</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/table_6_11.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1707" src="https://datatalks.ru/wp-content/uploads/2025/06/table_6_11.jpeg" alt="" width="455" height="431" srcset="https://datatalks.ru/wp-content/uploads/2025/06/table_6_11.jpeg 455w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_11-300x284.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/table_6_11-450x426.jpeg 450w" sizes="(max-width: 455px) 100vw, 455px" /></a></p>
<p>Таблица 6.11 включает данные из двух групп: <strong>стандартные коды операций (StdOpCode)</strong> и <strong>ограниченные коды операций (RstOpCode)</strong> от FAA. Обе группы определяются с помощью атрибута Group и содержат одну или несколько записей, идентифицируемых уникальным атрибутом Code. Поэтому первичный ключ таблицы должен быть составным — по столбцам Group и Code.</p>
<p>Существует два варианта использования справочной таблицы кодов и описаний в спутниках. Возможно использовать составной первичный ключ, состоящий из атрибутов <strong>Group</strong> и <strong>Code</strong>, как внешний ключ (с обеспечением ссылочной целостности или без неё) в спутнике. Или, если внешние ключи не используются в модели, можно использовать только атрибут Code в спутнике и определять Group неявно через атрибут спутника. Это означает добавление жёстко заданных фильтров в предложения <strong>WHERE</strong> при получении или объединении данных для их разрешения. Это допустимая практика — модель при этом «типизирует» коды и описания, позволяя всем кодам существовать в обобщённой таблице на уровне подтипа. Однако второй подход требует документации, чтобы понимать, какая Group соответствует какому атрибуту спутника, без необходимости анализа кода из виртуальных фактов и измерений или ETL-кода.</p>
<h3>Коды и описания с историей (Code and Descriptions with History)</h3>
<p>Также возможно хранить историю в справочной таблице кодов и описаний. Это реализуется аналогично справочной таблице с историей, представленной в разделе 6.3.2. Логическая модель такой таблицы показана на рисунке 6.14.</p>
<p><strong>РИСУНОК 6.14 Справочная таблица кодов и описаний со спутником для отслеживания истории (логическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/6_14_data_vault_reference_table_with_history_tracking_satellite.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1721" src="https://datatalks.ru/wp-content/uploads/2025/06/6_14_data_vault_reference_table_with_history_tracking_satellite.jpeg" alt="" width="860" height="312" srcset="https://datatalks.ru/wp-content/uploads/2025/06/6_14_data_vault_reference_table_with_history_tracking_satellite.jpeg 860w, https://datatalks.ru/wp-content/uploads/2025/06/6_14_data_vault_reference_table_with_history_tracking_satellite-300x109.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/6_14_data_vault_reference_table_with_history_tracking_satellite-768x279.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/6_14_data_vault_reference_table_with_history_tracking_satellite-450x163.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/6_14_data_vault_reference_table_with_history_tracking_satellite-780x283.jpeg 780w" sizes="(max-width: 860px) 100vw, 860px" /></a></p>
<p>Как видно на рисунке, эта концепция снова основана на использовании спутника, который хранит атрибуты, требующие отслеживания истории. В этом примере это <strong>Short Description</strong> и <strong>Long Description</strong>. Если есть атрибуты, для которых не нужно хранить историю, их можно добавить в саму справочную таблицу. Атрибут <strong>Sort Order</strong> следует именно такому подходу.</p>
<p>ER-диаграмма таблицы кодов и описаний с историей представлена на рисунке 6.15.</p>
<p><strong>РИСУНОК 6.15 Справочная таблица кодов и описаний со спутником для отслеживания истории (физическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/6_15_data_vault_reference_table_with_history_tracking_satellite_physical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1722" src="https://datatalks.ru/wp-content/uploads/2025/06/6_15_data_vault_reference_table_with_history_tracking_satellite_physical_design.jpeg" alt="" width="859" height="468" srcset="https://datatalks.ru/wp-content/uploads/2025/06/6_15_data_vault_reference_table_with_history_tracking_satellite_physical_design.jpeg 859w, https://datatalks.ru/wp-content/uploads/2025/06/6_15_data_vault_reference_table_with_history_tracking_satellite_physical_design-300x163.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/6_15_data_vault_reference_table_with_history_tracking_satellite_physical_design-768x418.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/6_15_data_vault_reference_table_with_history_tracking_satellite_physical_design-450x245.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/6_15_data_vault_reference_table_with_history_tracking_satellite_physical_design-780x425.jpeg 780w" sizes="(max-width: 859px) 100vw, 859px" /></a></p>
<p>Наличие составного первичного ключа в справочной таблице требует, чтобы спутник ссылался на оба атрибута первичного ключа. Атрибуты, не требующие отслеживания истории — в данном случае <strong>SortOrder</strong> — добавляются в родительскую таблицу, а атрибуты, по которым нужна история, — в спутник. Атрибуты <strong>ShortDescription</strong> и <strong>LongDescription</strong> являются такими полями.</p>
<p>Сообщение <a href="https://datatalks.ru/chapter-6-data-vault-advanced-data-vault-modeling/">Перевод 6 Главы &#8212; Продвинутое моделирование Data Vault 2.0 &#8212; Advanced Data Vault Modeling</a> появились сначала на <a href="https://datatalks.ru">DataTalks.RU. Data Engineering / DWH / Data Pipeline</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datatalks.ru/chapter-6-data-vault-advanced-data-vault-modeling/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Перевод 5 Главы &#8212; Intermediate Моделирование Data Vault</title>
		<link>https://datatalks.ru/data-vault-chapter-5-intermediate-data-vault-modeling/</link>
					<comments>https://datatalks.ru/data-vault-chapter-5-intermediate-data-vault-modeling/#respond</comments>
		
		<dc:creator><![CDATA[Data Engineer (Admin)]]></dc:creator>
		<pubDate>Sat, 28 Jun 2025 09:28:13 +0000</pubDate>
				<category><![CDATA[Data Vault 2.0]]></category>
		<category><![CDATA[Business Vault]]></category>
		<category><![CDATA[Computed Satellites]]></category>
		<category><![CDATA[Effectivity Satellites]]></category>
		<category><![CDATA[HUB]]></category>
		<category><![CDATA[LINK]]></category>
		<category><![CDATA[link-to-link]]></category>
		<category><![CDATA[Multi-Active Satellites]]></category>
		<category><![CDATA[Overloaded Satellites]]></category>
		<category><![CDATA[Raw Data Vault]]></category>
		<category><![CDATA[Record Tracking Satellites]]></category>
		<category><![CDATA[SAL same-as links]]></category>
		<category><![CDATA[SAT]]></category>
		<category><![CDATA[Status-Tracking Satellites]]></category>
		<guid isPermaLink="false">https://datatalks.ru/?p=1113</guid>

					<description><![CDATA[<p>Перевод книги &#171;Building a Scalable Data Warehouse with Data Vault 2.0&#187; подготовлен автором сайта ГЛАВА 5 – Intermediate Моделирование Data Vault Вспомним про структуру Data Vault и ключевые термины Этот раздел не является частью книги, он содержит краткую выдержку по структуре Data Vault (для того, чтобы освежить в памяти структуру DV и основные термины). Структура [&#8230;]</p>
<p>Сообщение <a href="https://datatalks.ru/data-vault-chapter-5-intermediate-data-vault-modeling/">Перевод 5 Главы &#8212; Intermediate Моделирование Data Vault</a> появились сначала на <a href="https://datatalks.ru">DataTalks.RU. Data Engineering / DWH / Data Pipeline</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>Перевод книги &#171;Building a Scalable Data Warehouse with Data Vault 2.0&#187; подготовлен автором сайта</em></p>
<h1><strong>ГЛАВА 5 – Intermediate Моделирование Data Vault</strong></h1>
<h2>Вспомним про структуру Data Vault и ключевые термины</h2>
<p>Этот раздел не является частью книги, он содержит краткую выдержку по структуре Data Vault (для того, чтобы освежить в памяти структуру DV и основные термины).</p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/data_vault_terminology.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1579" src="https://datatalks.ru/wp-content/uploads/2025/06/data_vault_terminology.jpeg" alt="" width="1114" height="707" srcset="https://datatalks.ru/wp-content/uploads/2025/06/data_vault_terminology.jpeg 1114w, https://datatalks.ru/wp-content/uploads/2025/06/data_vault_terminology-300x190.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/data_vault_terminology-1024x650.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/06/data_vault_terminology-768x487.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/data_vault_terminology-450x286.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/data_vault_terminology-780x495.jpeg 780w" sizes="(max-width: 1114px) 100vw, 1114px" /></a></p>
<p><strong>Структура Data Vault</strong></p>
<ul>
<li><strong>Raw Data Vault </strong>&#8212; это сырой слой данных, где хранятся исходные данные:
<ul>
<li><strong>HUB</strong> — таблица, содержащая связку бизнес-ключа сущности и суррогатного ключа хранилища</li>
<li><strong>LINK</strong> &#8212; таблица связей сущностей по суррогатным ключам</li>
<li><strong>SAT</strong> &#8212; таблица атрибутов сущности</li>
</ul>
</li>
<li><strong>Business Vault </strong>&#8212; содержит бизнес-правила и преобразования, применяемые к исходным данным:
<ul>
<li><strong>SAL</strong> &#8212; таблицы унификации ключей сущности</li>
<li><strong>PIT</strong> &#8212; таблица расчета полной истории сущности (опционально)</li>
<li><strong>Bridge/Calculation tables</strong> &#8212; таблицы с любыми видами расчетов</li>
</ul>
</li>
<li><strong>Information Mart / Data Mart</strong> — это аналитический слой данных. Он предназначен для построения отчётов и визуализации данных для пользователей.</li>
<li><strong>Генерация ключей</strong>
<ul>
<li><strong>Sequence</strong> &#8212; надежно и синхронно</li>
<li><strong>Hash</strong> &#8212; коллизии и ассинхрон (шанс коллизии у md5 50% на 2^64 записей). Используем hash, если у вас нет явных требований на 100% точность в DWH. А если они есть, переубеждаем тех, кто их поставил.</li>
</ul>
</li>
</ul>
<p><strong>Пример связей между таблицами:</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/data_vault_model.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1584" src="https://datatalks.ru/wp-content/uploads/2025/06/data_vault_model.jpeg" alt="" width="1027" height="512" srcset="https://datatalks.ru/wp-content/uploads/2025/06/data_vault_model.jpeg 1027w, https://datatalks.ru/wp-content/uploads/2025/06/data_vault_model-300x150.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/data_vault_model-1024x511.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/06/data_vault_model-768x383.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/data_vault_model-450x224.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/data_vault_model-780x389.jpeg 780w" sizes="(max-width: 1027px) 100vw, 1027px" /></a></p>
<hr />
<p>Презентация с конференции <strong><a href="https://datatalks.ru/wp-content/uploads/2025/06/SmartData2024_data_vault.pdf" target="_blank" rel="noopener">SmartData 2024 Data Vault</a></strong>.</p>
<hr />
<p><strong>Переводы 1-4 глав книги по Data Vault 2.0:</strong></p>
<ul>
<li><a href="https://datatalks.ru/data-vault-2-0-chapter-1-introduction-to-data-warehousing/" target="_blank" rel="noopener">Перевод 1 Главы — Введение в хранилища данных</a></li>
<li><a href="https://datatalks.ru/data-vault-2-0-chapter-2-scalable-data-warehouse-architecture/" target="_blank" rel="noopener">Перевод 2 Главы — Масштабируемая архитектура хранилища данных</a></li>
<li><a href="https://datatalks.ru/chapter-3-data-vault-2-0-methodology/" target="_blank" rel="noopener">Перевод 3 Главы — Методология Data Vault 2.0</a></li>
<li><a href="https://datatalks.ru/chapter-4-data-vault-2-0-modeling/" target="_blank" rel="noopener">Перевод 4 Главы — Моделирование Data Vault 2.0 — Что такое Hub / Link / Satellite?</a></li>
</ul>
<hr />
<h2>Аннотация к главе 5</h2>
<p>В этой главе рассматриваются более сложные сущности Data Vault. Они расширяют базовые сущности. Здесь будут затронуты различные специальные типы спутников (Satellite), включая:</p>
<ul>
<li>перегруженные спутники (<strong>Overloaded Satellites</strong>),</li>
<li>мультиактивные спутники (<strong>Multi-Active Satellites</strong>),</li>
<li>спутники отслеживания статуса (<strong>Status-Tracking Satellites</strong>),</li>
<li>спутники актуальности (<strong>Effectivity Satellites</strong>),</li>
<li>спутники отслеживания записей (<strong>Record Tracking Satellites</strong>) и</li>
<li>вычисляемые спутники (<strong>Computed Satellites</strong>).</li>
</ul>
<p>Также рассматриваются расширенные сущности связей, включая <strong>связи между связями (link-to-link)</strong>, <strong>связи «same-as» (same-as links)</strong>, <strong>иерархические связи</strong>, <strong>неисторические связи (nonhistorized links)</strong>, недескриптивные связи, вычисляемые агрегатные связи и исследовательские связи.</p>
<p>Для каждой сущности связи будет объяснена техническая или бизнес-причина её добавления в Data Vault.</p>
<p><strong>Ключевые слова:</strong></p>
<ul>
<li>хранилище данных</li>
<li>data vault</li>
<li>спутники</li>
<li>сущности связей</li>
<li>моделирование данных</li>
</ul>
<p>Типы сущностей, представленные в предыдущей главе, являются основой для других сущностей Data Vault, представленных в этой главе. Многие из этих примеров — это просто применения существующих сущностей связи или спутников без изменения структуры самой сущности. Они часто используются в Business Vault.</p>
<h1>Применение хабов</h1>
<p>Глава 4, Моделирование Data Vault 2.0, представила <span style="color: #ff6600;"><strong>хабы Data Vault</strong></span> как центральные сущности, используемые для хранения бизнес-ключей, идентифицирующих бизнес-объекты. В теории в предприятии должна быть одна ведущая операционная система, отслеживающая конкретный бизнес-объект.</p>
<p><strong>Системы управления взаимоотношениями с клиентами (CRM)</strong> являются хорошими примерами таких операционных систем, которые являются основным источником всей информации, связанной с клиентами. Однако на практике бизнес-объекты, такие как клиенты, хранятся в нескольких операционных системах, например, в ритейл-базах данных, e-commerce приложениях, системах управления счетами и так далее. Предприятия пытаются консолидировать эту информацию с помощью концепции, называемой управлением мастер-данными (master data management).</p>
<p>На Рисунке 5.1 показано, что все данные, включая бизнес-ключи, сначала загружаются в слой Data Vault через <strong>staging-область</strong>. Консолидация происходит при обработке сложных бизнес-правил и построении <strong>витрин данных (information marts)</strong>. Специалисты по хранилищам данных сталкиваются с множественными источниками для одного и того же бизнес-объекта.</p>
<p>Основная проблема при наличии нескольких источников заключается в том, что каждый из них имеет различные возможности по определению бизнес-объекта. Это связано с тем, что в момент создания этих систем в прошлом бизнес выдвигал к ним разные требования. В результате даже типы данных бизнес-ключей могут отличаться: в некоторых случаях буквенно-цифровой номер клиента (например, US4317 для клиента из США), определённый на уровне предприятия, не может быть использован в другой операционной системе, поскольку она не допускает буквенные символы в номере клиента. В таком случае бизнес будет полагаться на какие-либо маппинговые таблицы, которые отображают клиента US4317 из CRM-системы в клиента 132842 в e-commerce приложении.</p>
<p><strong>Рисунок 5.1 Консолидация различных источников в хранилище данных</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/01_data_valult_enterprise_bi_solution.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1571" src="https://datatalks.ru/wp-content/uploads/2025/06/01_data_valult_enterprise_bi_solution.jpeg" alt="" width="1156" height="648" srcset="https://datatalks.ru/wp-content/uploads/2025/06/01_data_valult_enterprise_bi_solution.jpeg 1156w, https://datatalks.ru/wp-content/uploads/2025/06/01_data_valult_enterprise_bi_solution-300x168.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/01_data_valult_enterprise_bi_solution-1024x574.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/06/01_data_valult_enterprise_bi_solution-768x431.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/01_data_valult_enterprise_bi_solution-450x252.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/01_data_valult_enterprise_bi_solution-780x437.jpeg 780w" sizes="(max-width: 1156px) 100vw, 1156px" /></a></p>
<p>Поскольку такая ситуация встречается чаще всего, в Data Vault предусмотрено решение. Рекомендуемая практика — загружать все бизнес-ключи, независимо от их конкретного формата, в один общий хаб (в данном случае — хаб клиентов) и создавать специальную связь, называемую <strong>same-as link (SAL)</strong>, чтобы указать бизнес-ключи, которые идентифицируют один и тот же бизнес-объект.</p>
<h2>Консолидация бизнес-ключей</h2>
<p><strong>Business Vault</strong> представляет собой расширение <strong>Data Vault RAW</strong> и позволяет разработчикам хранилищ данных добавлять вычисляемые данные в слой Data Vault. В этой главе будут представлены <strong>вычисляемые агрегатные связи (computed aggregate links), исследовательские связи (exploration links) и вычисляемые спутники (computed satellites)</strong> в качестве примеров типов сущностей, входящих в состав Business Vault. Эти типы сущностей моделируются аналогично основным сущностям Data Vault, следуя концепциям моделирования Data Vault, особенно для связей и спутников.</p>
<p>Тем не менее, каждую стандартную сущность Data Vault можно кастомизировать в соответствии с потребностями организации. Эти модификации, которые становятся частью Business Vault, получают данные из стандартных сущностей <strong>сырого (RAW) Data Vault</strong> (хабы, связи и спутники) и часто оптимизируются для повышения производительности при выполнении запросов к данным в Data Vault.</p>
<p>Распространённый вариант использования — консолидация бизнес-ключей из различных источников, как показано в Таблицах 5.1 и 5.2 и на Рисунке 5.2.</p>
<p><strong>Таблица 5.1 Хаб «Пассажир»</strong></p>
<table>
<thead>
<tr>
<th><strong>Passenger HashKey</strong></th>
<th><strong>Load Date</strong></th>
<th><strong>Record Source</strong></th>
<th><strong>Passenger Number</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>8473d2a…</td>
<td>2014-06-26</td>
<td>DomesticFlight</td>
<td>1234</td>
</tr>
<tr>
<td>9d8e72a…</td>
<td>2014-06-26</td>
<td>DomesticFlight</td>
<td>1257</td>
</tr>
<tr>
<td>1a4e2c2…</td>
<td>2014-06-26</td>
<td>InternationalFlight</td>
<td>C21X9</td>
</tr>
<tr>
<td>238aaff…</td>
<td>2014-06-26</td>
<td>InternationalFlight</td>
<td>C43Z8</td>
</tr>
</tbody>
</table>
<p><strong>Таблица 5.2 Same-as-Link для пассажира</strong></p>
<table>
<thead>
<tr>
<th><strong>SALPassenger HashKey</strong></th>
<th><strong>Load Date</strong></th>
<th><strong>Record Source</strong></th>
<th><strong>Master Passenger HashKey</strong></th>
<th><strong>Duplicate Passenger HashKey</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>38dfa8…</td>
<td>2014-06-26</td>
<td>Dedupe</td>
<td>238aaff…</td>
<td>8473d2a…</td>
</tr>
<tr>
<td>937aae…</td>
<td>2014-06-26</td>
<td>Dedupe</td>
<td>1a4e2c2…</td>
<td>9d8e72a…</td>
</tr>
</tbody>
</table>
<p><strong>Рисунок 5.2 Хаб со структурой Same-as-Link (SAL) для устранения дубликатов бизнес-ключей пассажиров</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_2_data_vault_same_as_link_SAL_structure.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1602" src="https://datatalks.ru/wp-content/uploads/2025/06/5_2_data_vault_same_as_link_SAL_structure.jpeg" alt="" width="958" height="520" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_2_data_vault_same_as_link_SAL_structure.jpeg 958w, https://datatalks.ru/wp-content/uploads/2025/06/5_2_data_vault_same_as_link_SAL_structure-300x163.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_2_data_vault_same_as_link_SAL_structure-768x417.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_2_data_vault_same_as_link_SAL_structure-450x244.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_2_data_vault_same_as_link_SAL_structure-780x423.jpeg 780w" sizes="(max-width: 958px) 100vw, 958px" /></a></p>
<p>В данном случае в <strong>сыром Data Vault</strong> существует <strong>хаб (hub) Passenger</strong>, получаемый из нескольких исходных таблиц, содержащих номера пассажиров. Во многих организациях используются исходные системы, которые не интегрированы между собой. В результате один и тот же пассажир может присутствовать в нескольких операционных системах с разными идентификаторами (например, номер водительского удостоверения или номер паспорта). Ещё одной причиной данной проблемы является поддержка различными системами разных форматов для одного и того же бизнес-ключа.</p>
<p>В этом примере исходная система Domestic Flight допускает (и использует) только числовые номера водительских удостоверений, в то время как система International Flight допускает буквенно-цифровые бизнес-ключи. Такая ситуация далека от идеальной, но часто возникает, когда две организации объединяются и продолжают использовать свои старые системы без должной интеграции.</p>
<p>Проблема решается <strong>путём добавления к хабу структуры <span style="color: #ff6600;">Same-as-Link (SAL)</span></strong>, которая указывает, какие номера клиентов соответствуют одному и тому же клиенту. Существует несколько способов вычислить записи для Same-as-Link, и они могут быть результатом <strong><span style="color: #ff6600;">алгоритмов дедупликации</span> клиентов</strong>, как в данном примере. Соответствующая диаграмма «сущность-связь» (ER-диаграмма) представлена на Рисунке 5.3.</p>
<p><strong>Рисунок 5.3 ER-диаграмма структуры Same-as-Link для устранения дубликатов бизнес-ключей пассажиров (физическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_3_data_vault_er_diagram_same_as_link_SAL.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1603" src="https://datatalks.ru/wp-content/uploads/2025/06/5_3_data_vault_er_diagram_same_as_link_SAL.jpeg" alt="" width="1156" height="579" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_3_data_vault_er_diagram_same_as_link_SAL.jpeg 1156w, https://datatalks.ru/wp-content/uploads/2025/06/5_3_data_vault_er_diagram_same_as_link_SAL-300x150.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_3_data_vault_er_diagram_same_as_link_SAL-1024x513.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/06/5_3_data_vault_er_diagram_same_as_link_SAL-768x385.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_3_data_vault_er_diagram_same_as_link_SAL-450x225.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_3_data_vault_er_diagram_same_as_link_SAL-780x391.jpeg 780w" sizes="(max-width: 1156px) 100vw, 1156px" /></a></p>
<p>Этот подход, основанный на Same-as-Link и хабе с единственным бизнес-ключом, работает только в том случае, если диапазоны значений ключей в обеих системах не пересекаются. Если же они пересекаются, один и тот же бизнес-ключ может идентифицировать разные бизнес-объекты в разных системах. Вместо того чтобы использовать один хаб для всех бизнес-ключей из всех исходных систем в сыром Data Vault, существует два варианта решения этой ситуации.</p>
<p><strong>Во-первых,</strong> можно расширить хаб, добавив ещё один бизнес-ключ, идентифицирующий систему-источник. Этот искусственный ключ становится частью составного бизнес-ключа хаба. Недостатком этого решения является то, что оно не приводит к интеграции исходных систем.</p>
<p><strong>Другой вариант</strong> — создать несколько хабов и связать их между собой с помощью таблицы связей (link). Это решение документирует различное использование бизнес-ключей в модели, но требует создания большего числа сущностей в сыром Data Vault.</p>
<p>С точки зрения моделирования оба решения далеки от идеала, но они отражают реальное использование бизнес-ключей в системах-источниках и бизнес-практиках. Однако в обоих случаях это правильный подход, поскольку моделирование в Data Vault 2.0 ориентировано на бизнес. Если организация использует неидеальные методы ведения бизнеса, это также должно быть отражено в модели Data Vault.</p>
<p>Когда данные трансформируются в Business Vault, всё ещё возможно объединить бизнес-ключи в одном бизнес-хабе, включая структуру Same-as-Link, как показано на Рисунке 5.3. На самом деле, Same-as-Link является сущностью Business Vault, при условии, что информация не извлекается напрямую из системы-источника, а поддерживается вручную или с помощью алгоритмов. Однако если бизнес-ключи объединяются в бизнес-хаб, они не должны пересекаться и должны идентифицировать только один бизнес-объект. Это соответствует стандарту Data Vault 2.0 и может быть достигнуто с помощью префиксов или постфиксов (или форматирующих элементов) для бизнес-ключей, которые не поступают из ведущей системы-источника.</p>
<p>Например, если ведущей системой является CRM-приложение и оно не предоставляет бизнес-ключ для конкретного бизнес-объекта, идентифицирующий бизнес-ключ берётся из вторичной системы-источника и загружается в бизнес-хаб. Примером такой вторичной системы может быть система тикетов (ticketing), где клиент был добавлен, но никогда не синхронизировался и не реплицировался в CRM-приложение. Чтобы указать на этот неидеальный случай и избежать путаницы, бизнес-ключ из ticketing-системы заключают в скобки, например, <strong>“(4711)”</strong>. Этот бизнес-ключ затем используется в аналитических отчётах, и бизнес-пользователю становится очевидно, что ключ не из CRM-системы и его там не найти. Также возможно добавлять к ключу имя системы-источника, например, <strong>“(TCK:4711)”</strong>, чтобы пользователь знал, откуда поступил данный ключ.</p>
<p>Запросы к таким двум таблицам в некоторых случаях могут быть довольно сложными. Кроме того, в большинстве случаев бизнесу требуется консолидированный вид клиентских номеров, а не сырые данные — за исключением случаев анализа качества данных. Поэтому целесообразно предоставить консолидированный список, получаемый в результате сложного запроса, в виде нового материализованного хаба. Этот хаб имеет ту же структуру, что и хаб в сыром Data Vault, но содержит другие данные. Таким образом, утверждение из начала этого раздела остаётся верным: в Business Vault нет специальной сущности типа «хаб». Однако логично создавать хабы Business Vault, чтобы предоставлять разные наборы бизнес-ключей и улучшать последующую выборку данных. В этом случае атрибут <strong>record source</strong> изменяется на <strong>“SYSTEM”</strong> или <strong>“SYS”</strong>, чтобы указать, что значение было сгенерировано системой хранилища данных.</p>
<p>Этот пример является типичным случаем, когда бизнес-правила применяются в Business Vault. Хотя бизнес-правила обычно реализуются при загрузке витрин данных, хорошей практикой является их реализация в Business Vault, если они используются более чем в 80% отчётов или если их выполнение требует значительных ресурсов. В данном случае <strong>«heavy lifting»</strong> означает долгие по времени или сложные бизнес-правила. Таким образом можно избежать повторной реализации бизнес-правил для каждой витрины данных. Это становится особенно важным в случае сложных и ресурсоёмких правил, которые используются в нескольких витринах.</p>
<p>Глава 6, Продвинутое моделирование Data Vault, <strong>рассматривает ещё две сущности Business Vault (таблицу PIT и таблицу bridge), которые используются для упрощения запросов к данным из сырого Data Vault и повышения производительности запросов.</strong> По этой причине они также называются <strong>query assistant tables</strong> (вспомогательные таблицы для запросов).</p>
<h1>Применение связей (Link Applications)</h1>
<p>В следующих разделах представлены распространённые структуры связей и сценарии их применения, которые специалисты по Data Vault часто используют в своих проектах.</p>
<h2>Link-on-link</h2>
<p>Один из часто задаваемых вопросов на этапе проектирования Data Vault — возможно ли создание связей, которые ссылаются на другие связи (так называемые структуры <strong>link-on-link</strong>).<br />Рассмотрим пример отклонения рейса в авиационной отрасли. Вместо того чтобы прибыть в исходный аэропорт, рейс перенаправляется из-за неблагоприятных погодных условий или инцидента, связанного с безопасностью. Первая идея по моделированию этой ситуации в Data Vault представлена на логической схеме на рисунке 5.4.</p>
<p><strong>Рисунок 5.4 Логическая модель Data Vault с link-on-link структурой</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_4_data_vault_Link_on_link_Data_Vault_model_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1604" src="https://datatalks.ru/wp-content/uploads/2025/06/5_4_data_vault_Link_on_link_Data_Vault_model_logical_design.jpeg" alt="" width="962" height="385" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_4_data_vault_Link_on_link_Data_Vault_model_logical_design.jpeg 962w, https://datatalks.ru/wp-content/uploads/2025/06/5_4_data_vault_Link_on_link_Data_Vault_model_logical_design-300x120.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_4_data_vault_Link_on_link_Data_Vault_model_logical_design-768x307.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_4_data_vault_Link_on_link_Data_Vault_model_logical_design-450x180.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_4_data_vault_Link_on_link_Data_Vault_model_logical_design-780x312.jpeg 780w" sizes="(max-width: 962px) 100vw, 962px" /></a></p>
<p>Связь в центре модели <strong>LinkFlight</strong> представляет собой исходную информацию о рейсе, запланированную авиаперевозчиком. Каждый рейс имеет исходный и конечный аэропорт (поэтому <strong>LinkFlight</strong> связан дважды с <strong>HubAirport</strong>), а также ссылку на номер рейса и номер борта. Обратите внимание, что на схеме не показаны спутники.</p>
<p>Отклонение рейса моделируется как ещё одна связь — <strong>LinkDiversionFlight</strong>. Она ссылается на исходный рейс в <strong>LinkFlight</strong> и добавляет ссылку на новый аэропорт прибытия. Хотя эта модель выглядит достаточно эффективной, она вводит нежелательную зависимость между двумя связями. Такая зависимость плохо масштабируется и не обеспечивает должной производительности в условиях высоких объёмов и скоростей обработки данных (big data).</p>
<p>Чем больше подобных <strong>link-to-link</strong> структур необходимо обработать на уровне СУБД, тем более экспоненциальным становится объём работы для неё. Для обеспечения гибкости и масштабируемости с большими объёмами данных модель необходимо перепроектировать на раннем этапе.</p>
<p><strong>Функциональность, необходимая бизнес-пользователю, поставляется итеративно в рамках отдельных спринтов.</strong> Цель — поставлять небольшие инкременты хранилища данных и внедрять эти изменения в продакшн по завершении каждого спринта. Проблема с <strong>link-to-link</strong> структурами в том, что изменение родительской связи (в данном случае <strong>LinkFlight</strong>) требует изменения всех зависимых дочерних связей (например, <strong>LinkDiversionFlight</strong>).</p>
<p>Такие каскадные изменения увеличивают время, необходимое на модификацию компонентов хранилища данных по запросу на изменение, и могут не позволить завершить внедрение запроса в рамках одного спринта. Следовательно, подобные связи следует избегать для сохранения гибкости команды ИТ. Рекомендуемая практика — отказаться от ссылок между связями и реализовать связи независимо (см. рисунок 5.5); в кругах моделирования данных это известно как <strong>денормализация</strong>.</p>
<p><strong>Рисунок 5.5 Логическая модель с независимыми связями</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_5_data_vault_independent_links_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1606" src="https://datatalks.ru/wp-content/uploads/2025/06/5_5_data_vault_independent_links_logical_design.jpeg" alt="" width="957" height="494" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_5_data_vault_independent_links_logical_design.jpeg 957w, https://datatalks.ru/wp-content/uploads/2025/06/5_5_data_vault_independent_links_logical_design-300x155.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_5_data_vault_independent_links_logical_design-768x396.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_5_data_vault_independent_links_logical_design-450x232.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_5_data_vault_independent_links_logical_design-780x403.jpeg 780w" sizes="(max-width: 957px) 100vw, 957px" /></a></p>
<p>Теперь каждая связь является независимой и может изменяться отдельно в случае необходимости изменений в её структуре в будущем.</p>
<h2>Same-as Links (SAL)</h2>
<p><strong>Same-as-Link</strong> используются для указания на дублирующиеся бизнес-ключи внутри сущности хаба в Data Vault. Это необходимо в случаях, когда один и тот же бизнес-объект идентифицируется несколькими бизнес-ключами.</p>
<p>Например, в таблице 5.3 представлен фрагмент списка клиентов, загруженного из различных источников.</p>
<p><strong>Таблица 5.3 Хаб клиентов (Customer Hub)</strong></p>
<table>
<thead>
<tr>
<th>#</th>
<th><strong>CustomerHashKey</strong></th>
<th><strong>LoadDate</strong></th>
<th><strong>RecordSource</strong></th>
<th><strong>CustomerNo</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>b7b0a554b9…</td>
<td>2014-01-17 08:20:15.000</td>
<td>CRM</td>
<td>DE4711</td>
</tr>
<tr>
<td>2</td>
<td>dd2c1f2d8d…</td>
<td>2014-01-17 08:20:15.000</td>
<td>CRM</td>
<td>US4317</td>
</tr>
<tr>
<td>3</td>
<td>e138c1d3c9c…</td>
<td>2014-01-17 08:20:15.000</td>
<td>CRM</td>
<td>UK8876</td>
</tr>
<tr>
<td>4</td>
<td>d1360901d7…</td>
<td>2014-01-17 09:05:43.000</td>
<td>SHOP</td>
<td>764912</td>
</tr>
<tr>
<td>5</td>
<td>74b3a3c01…</td>
<td>2014-01-17 09:05:43.000</td>
<td>SHOP</td>
<td>124784</td>
</tr>
<tr>
<td>6</td>
<td>a11593aea…</td>
<td>2014-01-17 09:05:43.000</td>
<td>SHOP</td>
<td>132842</td>
</tr>
</tbody>
</table>
<p><strong>Хаб</strong> был загружен из нескольких источников, использующих разные форматы хранения номера клиента. В то время как CRM-система хранит клиентские номера как <strong>составной ключ (так называемый <span style="color: #ff6600;">“smart-key”</span>)</strong>, интернет-магазин способен хранить только числовые значения для клиентских номеров. Поэтому бизнес предоставляет таблицу сопоставления между номерами клиентов в CRM-системе и системе интернет-магазина (таблица 5.4).</p>
<p><strong>Таблица 5.4 Сопоставление клиентских номеров между системами-источниками</strong></p>
<table>
<thead>
<tr>
<th>CRM Customer Number</th>
<th>SHOP Customer Number</th>
</tr>
</thead>
<tbody>
<tr>
<td>DE4711</td>
<td>124784</td>
</tr>
<tr>
<td>US4317</td>
<td>132842</td>
</tr>
<tr>
<td>UK8876</td>
<td>764912</td>
</tr>
</tbody>
</table>
<p>Имея таблицу соответствия клиентских номеров, можно создать структуру связи, изображённую на рисунке 5.6.</p>
<p><strong>Рисунок 5.6 Физическая модель Same-as-Link для клиентов</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_6_data_vault_Same_as_Link_SAL_physical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1608" src="https://datatalks.ru/wp-content/uploads/2025/06/5_6_data_vault_Same_as_Link_SAL_physical_design.jpeg" alt="" width="795" height="435" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_6_data_vault_Same_as_Link_SAL_physical_design.jpeg 795w, https://datatalks.ru/wp-content/uploads/2025/06/5_6_data_vault_Same_as_Link_SAL_physical_design-300x164.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_6_data_vault_Same_as_Link_SAL_physical_design-768x420.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_6_data_vault_Same_as_Link_SAL_physical_design-450x246.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_6_data_vault_Same_as_Link_SAL_physical_design-780x427.jpeg 780w" sizes="(max-width: 795px) 100vw, 795px" /></a></p>
<p>Эта связь заполняется записями, подобными тем, что представлены в таблице 5.5.</p>
<p><strong>Таблица 5.5 Same-as-Link для клиентских номеров</strong></p>
<table>
<thead>
<tr>
<th>#</th>
<th>SAICustomerHashKey</th>
<th>LoadDate</th>
<th>RecordSource</th>
<th>CustomerMasterHashKey</th>
<th>CustomerDuplicateHashKey</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>c5cd634e4a… {DE4711;124784}</td>
<td>2014-01-17 09:08:27.000</td>
<td>MDM</td>
<td>b7b0a554b9… {DE4711}</td>
<td>74f33a3c01… {124784}</td>
</tr>
<tr>
<td>2</td>
<td>69777c1b5b… {US4317;132842}</td>
<td>2014-01-17 09:08:27.000</td>
<td>MDM</td>
<td>dd2c1f2d8d… {US4317}</td>
<td>a11593aeaa… {132842}</td>
</tr>
<tr>
<td>3</td>
<td>ae7324fa23… {UK8876;764912}</td>
<td>2014-01-17 09:08:27.000</td>
<td>MDM</td>
<td>e138c1d3c9… {UK8876}</td>
<td>d1360901d7… {764912}</td>
</tr>
</tbody>
</table>
<p>С точки зрения загрузки данных, <strong>хэш-ключи</strong> в столбце <strong>CustomerMasterHashKey</strong> должны формироваться на основе ключей из ведущей (master) системы — например, CRM. Это позволяет выполнять поиск клиентского номера из системы интернет-магазина (SHOP) путём выборки записи из таблицы <strong>Same-as-Link</strong>, где <strong>Customer1HashKey</strong> соответствует номеру из CRM. Таким образом обеспечивается консолидация клиентских идентификаторов при анализе данных.</p>
<h2>Иерархические связи (Hierarchical Links)</h2>
<p><strong>Иерархические связи</strong> используются для моделирования отношений родитель-дочерний в Data Vault. Один из распространённых примеров — иерархия спецификаций <strong>(BOM, bill of materials)</strong>, описывающая, из каких деталей состоит изделие. Например, самолёт состоит из компонентов, представленных на рисунке 5.7.</p>
<p><strong>Рисунок 5.7 Части самолёта</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_7_data_vault_parts_of_airplane.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1610" src="https://datatalks.ru/wp-content/uploads/2025/06/5_7_data_vault_parts_of_airplane.jpeg" alt="" width="966" height="647" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_7_data_vault_parts_of_airplane.jpeg 966w, https://datatalks.ru/wp-content/uploads/2025/06/5_7_data_vault_parts_of_airplane-300x201.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_7_data_vault_parts_of_airplane-768x514.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_7_data_vault_parts_of_airplane-450x301.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_7_data_vault_parts_of_airplane-780x522.jpeg 780w" sizes="(max-width: 966px) 100vw, 966px" /></a></p>
<p>Каждая часть самолёта состоит из других, более мелких деталей. Компоненты типового турбореактивного двигателя изображены на рисунке 5.8. Все они оформлены в структуре спецификаций (BOM), показанной на рисунке 5.9.</p>
<p><strong>Рисунок 5.8 Сечение турбореактивного двигателя</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_8_data_vault_engine.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1613" src="https://datatalks.ru/wp-content/uploads/2025/06/5_8_data_vault_engine.jpeg" alt="" width="670" height="333" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_8_data_vault_engine.jpeg 670w, https://datatalks.ru/wp-content/uploads/2025/06/5_8_data_vault_engine-300x149.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_8_data_vault_engine-450x224.jpeg 450w" sizes="(max-width: 670px) 100vw, 670px" /></a></p>
<p><strong>Рисунок 5.9 Структура спецификации (BOM)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_9_data_vault_bill_of_material.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1614" src="https://datatalks.ru/wp-content/uploads/2025/06/5_9_data_vault_bill_of_material.jpeg" alt="" width="794" height="465" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_9_data_vault_bill_of_material.jpeg 794w, https://datatalks.ru/wp-content/uploads/2025/06/5_9_data_vault_bill_of_material-300x176.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_9_data_vault_bill_of_material-768x450.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_9_data_vault_bill_of_material-450x264.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_9_data_vault_bill_of_material-780x457.jpeg 780w" sizes="(max-width: 794px) 100vw, 794px" /></a></p>
<p>Каждый элемент BOM имеет название, номер детали, количество, необходимое для сборки, и указание источника.</p>
<p>Модель Data Vault для представления такой иерархии приведена на рисунке 5.10.</p>
<p><strong>Рисунок 5.10 Логическая модель иерархической связи</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_10_data_vault_Hierarchical_link_bill_of_material_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1615" src="https://datatalks.ru/wp-content/uploads/2025/06/5_10_data_vault_Hierarchical_link_bill_of_material_logical_design.jpeg" alt="" width="795" height="361" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_10_data_vault_Hierarchical_link_bill_of_material_logical_design.jpeg 795w, https://datatalks.ru/wp-content/uploads/2025/06/5_10_data_vault_Hierarchical_link_bill_of_material_logical_design-300x136.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_10_data_vault_Hierarchical_link_bill_of_material_logical_design-768x349.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_10_data_vault_Hierarchical_link_bill_of_material_logical_design-450x204.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_10_data_vault_Hierarchical_link_bill_of_material_logical_design-780x354.jpeg 780w" sizes="(max-width: 795px) 100vw, 795px" /></a></p>
<p>Вместо того чтобы моделировать каждый уровень иерархии отдельным хабом, предпочтительно создать один хаб, поскольку бизнес рассматривает уровни иерархии как однотипные. С технической точки зрения они могут иметь разную степень детализации/гранулярности, но в бизнес-контексте каждый уровень — это просто часть иерархии.</p>
<p>Таким образом, <strong>иерархическая связь</strong> — это просто применение стандартной связи (link) в Data Vault. Она не нарушает модель и не требует особых правил.</p>
<h2>Неисторические связи (Nonhistorized Links)</h2>
<p>Все предыдущие примеры связей сохраняют историю отношений между бизнес-объектами. Обычно, если что-то изменилось в источнике, это отражается добавлением новой версии в спутник (satellite). Однако бывают ситуации, когда данные не должны быть изменены вообще — например, транзакционные данные или данные с датчиков. В таких случаях используется неисторическая связь.</p>
<p>Это особый тип связи, также называемый транзакционной (хотя этот термин уже считается устаревшим). Такие связи не обновляются. Если транзакция отменена, в систему загружается обратная транзакция. Исправления задним числом не допускаются.</p>
<p><strong>Примеры:</strong></p>
<ul>
<li>Транзакции продаж</li>
<li>Поток данных с камер видеонаблюдения (CCTV)</li>
<li>Сенсорные данные от IoT-устройств</li>
</ul>
<p>Видео или изображения, поступающие в Data Vault, не будут обновляться — они просто фиксируются как есть. Поэтому термин &#171;транзакционная&#187; связь заменён на неисторическая.</p>
<p><strong>Рисунок 5.11 Логическая модель неисторической связи</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_11_data_vault_Nonhistorized_link_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1616" src="https://datatalks.ru/wp-content/uploads/2025/06/5_11_data_vault_Nonhistorized_link_logical_design.jpeg" alt="" width="459" height="148" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_11_data_vault_Nonhistorized_link_logical_design.jpeg 459w, https://datatalks.ru/wp-content/uploads/2025/06/5_11_data_vault_Nonhistorized_link_logical_design-300x97.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_11_data_vault_Nonhistorized_link_logical_design-450x145.jpeg 450w" sizes="(max-width: 459px) 100vw, 459px" /></a></p>
<p>Символ аналогичен стандартной связи, за исключением индикатора рядом с иконкой, который ясно показывает, что это неисторическая связь. По историческим причинам индикатором служит буква T, как в слове <strong>transactional link (транзакционная связь)</strong>. Обратите внимание, что невозможно добавлять спутники (satellites) к неисторическим связям в логической модели (хотя существуют варианты добавления спутников в физической реализации, как мы узнаем немного позже в этом разделе). Атрибуты, являющиеся частью транзакции, добавляются непосредственно в неисторическую связь.</p>
<p>Существует два варианта физического моделирования неисторических связей в Data Vault. Первый вариант включает стандартную сущность связи и спутник без атрибута <strong>LoadEndDate</strong>. Таким образом, невозможно вставлять новые версии записей в этот спутник, поскольку нельзя установить дату окончания действия записи и заменить её другой версией. Рисунок 5.12 показывает электронный счёт-фактуру за авиаперелёт — типичную транзакцию в авиационной отрасли.</p>
<p><strong>Рисунок 5.12 Электронный счёт-фактура за авиаперелёт</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_12_data_vault_Electronic_invoice_for_flight.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1617" src="https://datatalks.ru/wp-content/uploads/2025/06/5_12_data_vault_Electronic_invoice_for_flight.jpeg" alt="" width="663" height="414" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_12_data_vault_Electronic_invoice_for_flight.jpeg 663w, https://datatalks.ru/wp-content/uploads/2025/06/5_12_data_vault_Electronic_invoice_for_flight-300x187.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_12_data_vault_Electronic_invoice_for_flight-450x281.jpeg 450w" sizes="(max-width: 663px) 100vw, 663px" /></a></p>
<p>Транзакция идентифицируется <strong>номером счёта-фактуры 0198536</strong> и была выдана 21 января 2014 года. Также указана другая информация, такая как клиент и продавец. Обратите внимание, что невозможно обновить бронирование рейса. Если информация, предоставленная во время бронирования, неверна (например, указан неправильный аэропорт назначения), единственный способ изменить бронирование — заплатить сбор за изменение и приобрести новое бронирование. Старое бронирование будет аннулировано. Поэтому обновление старого счёта-фактуры невозможно без создания нового счёта.</p>
<p><strong>Логическая модель Data Vault</strong> на рисунке 5.13 фиксирует транзакцию электронного счёта-фактуры.</p>
<p><strong>Рисунок 5.13 Неисторическая связь (физическая реализация)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_13_data_vault_Nonhistorized_link_physical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1618" src="https://datatalks.ru/wp-content/uploads/2025/06/5_13_data_vault_Nonhistorized_link_physical_design.jpeg" alt="" width="798" height="369" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_13_data_vault_Nonhistorized_link_physical_design.jpeg 798w, https://datatalks.ru/wp-content/uploads/2025/06/5_13_data_vault_Nonhistorized_link_physical_design-300x139.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_13_data_vault_Nonhistorized_link_physical_design-768x355.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_13_data_vault_Nonhistorized_link_physical_design-450x208.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_13_data_vault_Nonhistorized_link_physical_design-780x361.jpeg 780w" sizes="(max-width: 798px) 100vw, 798px" /></a></p>
<p>Связь <strong>LinkInvoice</strong> фиксирует основную транзакцию с ссылкой на клиента, ссылкой на продавца и идентификатором транзакции <strong>InvoiceNumber</strong>. По определению, этот идентификатор транзакции добавляется непосредственно в неисторическую связь. <strong>Хэш-ключ неисторической связи</strong> создаётся из бизнес-ключей ссылочных хабов и идентификатора транзакции. <strong>Спутник SatInvoice</strong> содержит все описательные атрибуты, такие как <strong>Record Locator</strong> и дата выдачи счёта-фактуры (<strong>Invoice Issue Date</strong>). Обратите внимание, что дата выдачи счёта отличается от даты загрузки записи, и поэтому она должна быть добавлена в модель.</p>
<p>Однако возможно использовать дату транзакции в качестве даты загрузки, если момент загрузки транзакции в Data Vault совпадает с фактической датой транзакции или происходит в пределах нескольких секунд. Обратите внимание, что сущности на рисунке 5.13 не отображают все описательные атрибуты, показанные в счёте-фактуре на рисунке 5.12.</p>
<p>В некоторых случаях можно отказаться от использования <strong>атрибута LoadDate</strong> в записи спутника, потому что обе записи (запись связи и сопровождающая её запись спутника) будут иметь одинаковую временную метку загрузки. Таким образом, <strong>атрибут LoadDate</strong> в спутнике хранит дублирующие данные, которые занимают место на диске. Однако бывают случаи, когда данные для обеих сущностей поступают из разных источников и доставляются последовательно, с разницей в миллисекунды. Это часто происходит, например, в сценариях реального времени, которые не рассматриваются в этой книге. В любом случае, в таких случаях <strong>атрибут LoadDate</strong> должен быть смоделирован в обеих сущностях для фиксации разницы во времени поступления данных. Ещё одной причиной моделирования атрибута в обеих сущностях является стандартизация, которая упрощает понимание сущностей для новых участников проекта.</p>
<p>Второй вариант, которого следует избегать в большинстве случаев, — это добавление атрибутов транзакции непосредственно в структуру связи и отказ от использования структуры спутника вообще. Рисунок 5.14 показывает пример такой неисторической связи.</p>
<p><strong>Рисунок 5.14 Альтернатива неисторической связи без спутника (физическая реализация)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_14_data_vault_Nonhistorized_link_alternative_without_satellite_physical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1619" src="https://datatalks.ru/wp-content/uploads/2025/06/5_14_data_vault_Nonhistorized_link_alternative_without_satellite_physical_design.jpeg" alt="" width="267" height="387" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_14_data_vault_Nonhistorized_link_alternative_without_satellite_physical_design.jpeg 267w, https://datatalks.ru/wp-content/uploads/2025/06/5_14_data_vault_Nonhistorized_link_alternative_without_satellite_physical_design-207x300.jpeg 207w" sizes="(max-width: 267px) 100vw, 267px" /></a></p>
<p><strong>Атрибуты InvoiceIssueDate и RecordLocator</strong> были перемещены из спутника в связь <strong>LinkInvoice</strong>. Спутник <strong>SatInvoice</strong> с рисунка 5.13 был полностью удалён, так как больше не требуется.</p>
<p>Этот вариант не рекомендуется, поскольку он изменяет архитектурный дизайн модели Data Vault путём внесения решений в процесс проектирования. Тем самым он увеличивает сложность модели и расходы на сопровождение. Кроме того, он усложняет автоматическую загрузку неисторических связей. Тем не менее, бывают случаи, когда второй вариант оправдан: если производительность имеет критическое значение, то есть требуется загрузка данных за миллисекунды или быстрее, может потребоваться смоделировать неисторическую связь, как показано на рисунке 5.14. Однако имейте в виду, что чрезмерная ширина таблицы связи может негативно повлиять на оптимизацию производительности. Если данные в одной строке становятся слишком широкими, это снижает количество записей на одну страницу базы данных (по крайней мере, в СУБД с построчной ориентацией, таких как Microsoft SQL Server). Физическая реализация может варьироваться в зависимости от выбранной платформы, и, как следствие, производительность загрузки и запросов к структуре связи может снижаться. Хотя это также может происходить и при использовании первого варианта, в нём можно распределить данные по нескольким спутникам, чтобы сохранить компактный размер строк.</p>
<p>Рисунок 5.15 показывает, что атрибуты транзакции распределены между спутниками. Оба спутника соответствуют определению неисторических спутников, изложенному в этом разделе. Перенос описательных данных из неисторической связи в зависимый спутник следует рассматривать, если количество фиксируемых атрибутов достаточно велико. Проблема в том, что Microsoft SQL Server хранит данные в файловых страницах размером 8 КБ, без возможности изменить этот параметр. Потенциальная ширина связи ограничена этим ограничением по размеру. По этой причине в структуру неисторической связи следует добавлять лишь ограниченное количество описательных полей для поддержания производительности.</p>
<p><strong>Рисунок 5.15 Неисторическая связь с несколькими спутниками (физическая реализация)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_15_data_vault_Nonhistorized_link_with_multiple_satellites.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1620" src="https://datatalks.ru/wp-content/uploads/2025/06/5_15_data_vault_Nonhistorized_link_with_multiple_satellites.jpeg" alt="" width="1142" height="385" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_15_data_vault_Nonhistorized_link_with_multiple_satellites.jpeg 1142w, https://datatalks.ru/wp-content/uploads/2025/06/5_15_data_vault_Nonhistorized_link_with_multiple_satellites-300x101.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_15_data_vault_Nonhistorized_link_with_multiple_satellites-1024x345.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/06/5_15_data_vault_Nonhistorized_link_with_multiple_satellites-768x259.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_15_data_vault_Nonhistorized_link_with_multiple_satellites-450x152.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_15_data_vault_Nonhistorized_link_with_multiple_satellites-780x263.jpeg 780w" sizes="(max-width: 1142px) 100vw, 1142px" /></a></p>
<p>Обратите внимание, что <strong>Data Vault 2.0 не зависит от используемой системы баз данных.</strong> Примеры в этой книге основаны на Microsoft SQL Server, но могут быть легко перенесены в другие системы баз данных.</p>
<h2>Непояснённые связи (Nondescriptive Links)</h2>
<p><strong>Во многих случаях связи Data Vault будут иметь один или несколько спутников для предоставления контекста связи.</strong> Однако в некоторых случаях связи не будут иметь спутников. Это может происходить, если нужно указать только отношение между двумя бизнес-ключами, например, если клиент авиакомпании выразил интерес к определённому предложению, щёлкнув по рекламе на веб-сайте авиакомпании.</p>
<p>На рисунке 5.16 <strong>низкоценная связь Interest</strong> соединяет хабы <strong>Customer</strong> и <strong>Offering</strong> без предоставления дополнительного контекста.</p>
<p><strong>Рисунок 5.16 Low-value link &#8212; Низкоценная связь (логическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_16_data_vault_Low_value_link_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1621" src="https://datatalks.ru/wp-content/uploads/2025/06/5_16_data_vault_Low_value_link_logical_design.jpeg" alt="" width="958" height="92" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_16_data_vault_Low_value_link_logical_design.jpeg 958w, https://datatalks.ru/wp-content/uploads/2025/06/5_16_data_vault_Low_value_link_logical_design-300x29.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_16_data_vault_Low_value_link_logical_design-768x74.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_16_data_vault_Low_value_link_logical_design-450x43.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_16_data_vault_Low_value_link_logical_design-780x75.jpeg 780w" sizes="(max-width: 958px) 100vw, 958px" /></a></p>
<p><strong>Непояснённые связи также используются для хранения одного состояния в многостадийной (multistate) или ролевой (role-playing) связи.</strong> Если мы расширим предыдущий пример, мы можем создать другую связь, чтобы смоделировать другое состояние — например, что клиент был выбран для маркетинговой кампании.</p>
<p>Рисунок 5.17 показывает, что это второе состояние добавлено в модель через другую связь — Mailing. Обратите внимание, что существуют и другие способы моделирования многостадийных связей, например, с использованием комбинации спутника и таблицы кодов.</p>
<p><strong>Рисунок 5.17 Multistate low-value link &#8212; Многостадийная низкоценная связь (логическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_17_data_vault_Multistate_low_value_link_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1622" src="https://datatalks.ru/wp-content/uploads/2025/06/5_17_data_vault_Multistate_low_value_link_logical_design.jpeg" alt="" width="957" height="233" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_17_data_vault_Multistate_low_value_link_logical_design.jpeg 957w, https://datatalks.ru/wp-content/uploads/2025/06/5_17_data_vault_Multistate_low_value_link_logical_design-300x73.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_17_data_vault_Multistate_low_value_link_logical_design-768x187.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_17_data_vault_Multistate_low_value_link_logical_design-450x110.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_17_data_vault_Multistate_low_value_link_logical_design-780x190.jpeg 780w" sizes="(max-width: 957px) 100vw, 957px" /></a></p>
<h2>Вычисленные агрегатные связи (Computed Aggregate Links)</h2>
<p>Этот тип связи Business Vault удаляет один хаб из связи и агрегирует данные по оставшимся отношениям. Например, рассмотрим модель Data Vault, показанную на рисунке 5.18.</p>
<p><strong>Рисунок 5.18 Вычисленная агрегатная связь с вычисленным спутником (логическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_18_data_vault_computed_aggregated_link_with_computed_satellite.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1623" src="https://datatalks.ru/wp-content/uploads/2025/06/5_18_data_vault_computed_aggregated_link_with_computed_satellite.jpeg" alt="" width="961" height="502" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_18_data_vault_computed_aggregated_link_with_computed_satellite.jpeg 961w, https://datatalks.ru/wp-content/uploads/2025/06/5_18_data_vault_computed_aggregated_link_with_computed_satellite-300x157.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_18_data_vault_computed_aggregated_link_with_computed_satellite-768x401.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_18_data_vault_computed_aggregated_link_with_computed_satellite-450x235.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_18_data_vault_computed_aggregated_link_with_computed_satellite-780x407.jpeg 780w" sizes="(max-width: 961px) 100vw, 961px" /></a></p>
<p><strong>Оригинальная связь LinkFlight</strong> соединяет три хаба: <strong>HubAirport</strong>, <strong>HubFlight</strong> и <strong>HubCarrier</strong>. Она обозначает рейс, запланированный авиаперевозчиком между двумя соединяющимися аэропортами с заданным номером рейса. Когда номер рейса удаляется из связи, новая связь <strong>LinkService</strong> теряет информацию о рейсе, потому что больше не содержит ссылки на <strong>HubFlight</strong>. Эта связь только указывает, какие перевозчики обслуживают какие аэропортовые соединения. Количество отдельных номеров рейсов агрегируется в атрибут <strong>FlightCount</strong> в спутнике <strong>SatService</strong>. И <strong>LinkService</strong>, и связанный спутник <strong>SatService</strong> не поступают из исходной системы. Вместо этого данные, хранящиеся в этих сущностях, рассчитываются на основе агрегатных функций.</p>
<p>Поскольку эти данные рассчитаны, а не являются «сырыми», <span style="color: #ff6600;"><strong>вычисленные агрегатные связи являются частью Business Vault.</strong></span> Сущность не подлежит аудиту, но может быть воссоздана из исходных данных <strong>LinkFlight</strong> в любой момент времени. В этом смысле вычисленная агрегатная связь является вариантом использования <strong>таблицы-моста (bridge table)</strong>.</p>
<p>Поскольку вычисленная агрегатная связь в этом примере является частью Business Vault, можно также изменить её структуру при необходимости, например, переместив вычисленный атрибут в структуру связи, как показано на рисунке 5.19.</p>
<p><strong>Рисунок 5.19 Вычисленная агрегатная связь с вычисленным атрибутом в связи (логическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_19_data_vault_computed_aggregate_link_with_computed_attribute.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1624" src="https://datatalks.ru/wp-content/uploads/2025/06/5_19_data_vault_computed_aggregate_link_with_computed_attribute.jpeg" alt="" width="961" height="502" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_19_data_vault_computed_aggregate_link_with_computed_attribute.jpeg 961w, https://datatalks.ru/wp-content/uploads/2025/06/5_19_data_vault_computed_aggregate_link_with_computed_attribute-300x157.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_19_data_vault_computed_aggregate_link_with_computed_attribute-768x401.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_19_data_vault_computed_aggregate_link_with_computed_attribute-450x235.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_19_data_vault_computed_aggregate_link_with_computed_attribute-780x407.jpeg 780w" sizes="(max-width: 961px) 100vw, 961px" /></a></p>
<p>Эта опция доступна только в том случае, если вычисленная агрегатная связь является сущностью Business Vault, то есть сама связь рассчитывается из сырых данных с использованием бизнес-логики, например, оператора GROUP BY. Если данные связи вычисленной агрегатной связи поступают из исходной системы, сущность связи остаётся в Raw Data Vault (рисунок 5.20).</p>
<p><strong>Рисунок 5.20 Агрегация, вычисленная на связи Raw Data Vault (логическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_20_data_vault_Computed_aggregation_on_Raw_Data_Vault_link.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1625" src="https://datatalks.ru/wp-content/uploads/2025/06/5_20_data_vault_Computed_aggregation_on_Raw_Data_Vault_link.jpeg" alt="" width="961" height="502" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_20_data_vault_Computed_aggregation_on_Raw_Data_Vault_link.jpeg 961w, https://datatalks.ru/wp-content/uploads/2025/06/5_20_data_vault_Computed_aggregation_on_Raw_Data_Vault_link-300x157.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_20_data_vault_Computed_aggregation_on_Raw_Data_Vault_link-768x401.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_20_data_vault_Computed_aggregation_on_Raw_Data_Vault_link-450x235.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_20_data_vault_Computed_aggregation_on_Raw_Data_Vault_link-780x407.jpeg 780w" sizes="(max-width: 961px) 100vw, 961px" /></a></p>
<p>В этом случае агрегация, которая по-прежнему рассчитывается из других данных в исходной системе, сохраняется в вычисленных спутниках и прикрепляется к сырой связи. Такая ситуация может возникнуть, если сама связь доступна в исходной системе, но агрегация — нет. В этом случае агрегация основана на других сырых данных и прикрепляется к правильному уровню детализации, которым является <strong>LinkService</strong> в примере на рисунке 5.20. Таким образом, определяющей характеристикой обеих моделей является источник данных связи: поступают ли они из исходной системы или уже являются рассчитанными. В первом случае данные моделируются как сырая связь с прикреплённым вычисленным спутником, как на рисунке 5.20. Если связь уже рассчитана из сырых данных, например с помощью оператора GROUP BY, сущность связи становится частью Business Vault, как на рисунке 5.18.</p>
<h2>Исследовательские связи (Exploration Links)</h2>
<p><strong>Исследовательские связи</strong> — это вычисленные связи, созданные исключительно по бизнес-причинам. Поэтому <strong>они являются частью Business Vault.</strong> Хотя связь между двумя хабами отсутствует в исходной системе, бизнес может принять решение создать исследовательскую связь для изучения данных (рисунок 5.21).</p>
<p><strong>Рисунок 5.21 Исследовательские связи (логическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_21_data_vault_Exploration_links_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1626" src="https://datatalks.ru/wp-content/uploads/2025/06/5_21_data_vault_Exploration_links_logical_design.jpeg" alt="" width="961" height="234" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_21_data_vault_Exploration_links_logical_design.jpeg 961w, https://datatalks.ru/wp-content/uploads/2025/06/5_21_data_vault_Exploration_links_logical_design-300x73.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_21_data_vault_Exploration_links_logical_design-768x187.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_21_data_vault_Exploration_links_logical_design-450x110.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_21_data_vault_Exploration_links_logical_design-780x190.jpeg 780w" sizes="(max-width: 961px) 100vw, 961px" /></a></p>
<p>Три хаба (<strong>HubAirplane</strong>, <strong>HubEngine</strong> и <strong>HubManufacturer</strong>) на рисунке 5.21 соединены друг с другом двумя связями (<strong>LinkAirplanePart</strong>, <strong>LinkManufacturer</strong>). Бизнес может принять решение проанализировать связь между этими тремя хабами, добавив <strong>LinkAirplanePartsWithManufacturer</strong>, которая является денормализованной версией обеих связей. В других случаях бизнес может решить проанализировать связь между двумя хабами, которые соединены только косвенно — в данном случае <strong>HubAirplane</strong> и <strong>HubManufacturer</strong>. Получившаяся связь <strong>LinkAirplaneWithManufacturer</strong> предоставляет такую возможность, как показано на рисунке.</p>
<p>Связи, являющиеся стандартными связями Data Vault, создаются и поддерживаются вручную, хотя бизнес может принять решение автоматизировать процесс создания такой связи. Исследовательские связи являются частью Business Vault и, следовательно, не подлежат аудиту.</p>
<p><strong> Причины создания исследовательских связей включают:</strong></p>
<ul>
<li>Определение связей и динамических сетей между бизнес-сущностями (хабами), которых нет в исходной системе</li>
<li>Представление связей, которые в противном случае были бы только косвенными</li>
<li>Объединение связей между бизнес-объектами, если один из ссылаемых хабов содержит дублирующиеся записи (см. same-as link)</li>
<li>Идентификация кластеров схожих записей внутри хабов (опять же, с использованием same-as links)</li>
<li>Автоматическое выявление шаблонов, например при обнаружении мошенничества</li>
</ul>
<h1>Применение спутников (Satellite Applications)</h1>
<p>После завершения обсуждения связей специального назначения, следующие разделы рассматривают аналогичные случаи для спутников Data Vault.</p>
<h2>Перегруженные спутники (Overloaded Satellites)</h2>
<p>Мы рекомендовали в главе 4, «Моделирование Data Vault 2.0», чтобы для каждого источника данных использовался отдельный спутник, отслеживающий атрибуты из этого источника. В некоторых случаях реализационные специалисты Data Vault пытаются объединить данные из нескольких источников в один спутник. Хотя иногда для этого есть веские причины, такой подход также несёт в себе риски.</p>
<p>Первая проблема возникает, если формат данных у каждого отдельного источника отличается, например, длина символов в атрибутах имени или адреса. Если данные различаются — а это весьма вероятно — данные очень быстро становятся «грязными».</p>
<p>Другие проблемы становятся очевидными при анализе таблицы 5.6, которая показывает извлечённые данные из перегруженного спутника.</p>
<p><strong>Таблица 5.6 Перегруженный спутник с данными из нескольких источников</strong></p>
<table>
<thead>
<tr>
<th>#</th>
<th>PassengerHashKey</th>
<th>LoadDate</th>
<th>LoadEndDate</th>
<th>Record Source</th>
<th>HashDiff</th>
<th>Name</th>
<th>Addr</th>
<th>Phone</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>86f8sa7b3c…</td>
<td>2014-01-17 09:05:43.000</td>
<td> </td>
<td>TICKETING</td>
<td>10daeb8564…</td>
<td>Dan Linstedt</td>
<td>26 Prospect St</td>
<td>802-524-8566</td>
</tr>
<tr>
<td>2</td>
<td>86f8sa7b3c…</td>
<td>2014-01-17 09:05:43.000</td>
<td> </td>
<td>ONLINE</td>
<td>00ebf10b9e…</td>
<td>Daniel L</td>
<td>28 Root Beer</td>
<td>827-295-1212</td>
</tr>
<tr>
<td>3</td>
<td>86f8sa7b3c…</td>
<td>2014-01-17 09:05:43.000</td>
<td> </td>
<td>BILLING</td>
<td>ef843ac01e…</td>
<td>Dan Linste</td>
<td>26 Prospect</td>
<td>999-111-1111</td>
</tr>
<tr>
<td>4</td>
<td>86f8sa7b3c…</td>
<td>2014-01-17 09:05:43.000</td>
<td> </td>
<td>SECURITY</td>
<td>a7c8a5e9f1…</td>
<td>Dan Linstedt</td>
<td>26 Prospect St</td>
<td>802-555-152</td>
</tr>
<tr>
<td>5</td>
<td>86f8sa7b3c…</td>
<td>2014-01-17 09:05:43.000</td>
<td> </td>
<td>BAGGAGE</td>
<td>a723eca93f…</td>
<td>Dan Linstedt</td>
<td>1 Richland</td>
<td>802-555-1215</td>
</tr>
</tbody>
</table>
<p>Согласно <strong>атрибуту RecordSource,</strong> данные поступают из пяти различных источников. Поскольку каждый источник имел одинаковую структуру и использовал одни и те же типы данных, бизнес решил загружать все данные в один и тот же спутник. При анализе данных возникают следующие вопросы:</p>
<ul>
<li>Какую из исходных систем следует считать основной, если данные противоречат друг другу (как в таблице 5.6)?</li>
<li>Есть ли строки, которые замещают другие строки?</li>
<li>Какая из строк является самой актуальной?</li>
<li>Первичным ключом этого спутника должна быть комбинация <strong>PassengerHashKey</strong> и <strong>LoadDate</strong>. Однако эта комбинация полей в данном спутнике не уникальна. Следует ли включить <strong>атрибут RecordSource</strong> в первичный ключ, чтобы сделать его допустимым?</li>
<li>Если некоторые источники данных предоставляют значения NULL или вовсе не предоставляют значения для некоторых атрибутов, как нам с ними поступать?</li>
<li>Следует ли объединять или сливать данные из источников при загрузке, или оставить их как есть?</li>
</ul>
<p>Некоторые из этих вопросов подводят нас к другой проблеме, которая заключается в <strong>обнаружении изменений (delta-detection)</strong> в спутнике. Напомним, что спутники должны хранить только изменения атрибутов, а не состояние атрибута при каждой загрузке. Однако из-за описанных выше проблем обнаружение изменений становится очень сложным (поскольку мы хотим сохранять каждое изменение из каждой исходной системы, а не только из основной системы).</p>
<h2>Мультиактивные спутники (Multi-Active Satellites)</h2>
<p><strong>Мультиактивные спутники</strong> похожи на перегруженные спутники: они хранят несколько записей на один родительский ключ. Однако эти записи поступают не из разных источников, а из денормализованного источника данных, такого как <strong>COBOL copybooks</strong> или <strong>XML-файлы</strong>. Существует множество примеров допустимого использования. Например, у сотрудников может быть неограниченное количество телефонных номеров, как показано на рисунке 5.22.</p>
<p><strong>Рисунок 5.22 Пример мультиактивного спутника</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_22_data_vault_Multi_active_satellite.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1627" src="https://datatalks.ru/wp-content/uploads/2025/06/5_22_data_vault_Multi_active_satellite.jpeg" alt="" width="962" height="432" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_22_data_vault_Multi_active_satellite.jpeg 962w, https://datatalks.ru/wp-content/uploads/2025/06/5_22_data_vault_Multi_active_satellite-300x135.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_22_data_vault_Multi_active_satellite-768x345.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_22_data_vault_Multi_active_satellite-450x202.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_22_data_vault_Multi_active_satellite-780x350.jpeg 780w" sizes="(max-width: 962px) 100vw, 962px" /></a></p>
<p>XML-файл слева на рисунке 5.22 представляет сотрудника с рядом телефонных номеров. Структура XML-файла преобразуется в сущность спутника Data Vault справа. Описательный атрибут (телефонный номер) — это <strong>атрибут PhoneNumber</strong>, который является единственным описательным атрибутом в этом примере. Единственное отличие от предложенной структуры в главе 4 — <strong>это PhoneSeq</strong>, номер последовательности, который представляет собой индекс, идентифицирующий телефонный номер в левой структуре. Полученные данные спутника представлены в таблице 5.7.</p>
<p><strong>Таблица 5.7 Данные мультиактивного спутника</strong></p>
<table>
<thead>
<tr>
<th>#</th>
<th>EmployeeHashKey</th>
<th>PhoneSeq</th>
<th>LoadDate</th>
<th>LoadEndDate</th>
<th>RecordSource</th>
<th>HashDiff</th>
<th>PhoneNumber</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>33aa…</td>
<td>1</td>
<td>2013-07-14 03:10:15</td>
<td>(Null)</td>
<td>Employee.xml</td>
<td>12fb…</td>
<td>1-405-1234123</td>
</tr>
<tr>
<td>2</td>
<td>33aa…</td>
<td>2</td>
<td>2013-07-14 03:10:15</td>
<td>(Null)</td>
<td>Employee.xml</td>
<td>76ca…</td>
<td>1-213-1561234</td>
</tr>
<tr>
<td>3</td>
<td>33aa…</td>
<td>3</td>
<td>2013-07-14 03:10:15</td>
<td>(Null)</td>
<td>Employee.xml</td>
<td>8cb1…</td>
<td>49-511-55349873</td>
</tr>
<tr>
<td>4</td>
<td>33aa…</td>
<td>4</td>
<td>2013-07-14 03:10:15</td>
<td>(Null)</td>
<td>Employee.xml</td>
<td>9944…</td>
<td>49-30-12345678</td>
</tr>
</tbody>
</table>
<p>Данные показывают, что существует одна запись на каждый номер телефона из XML-источника. Каждая запись идентифицируется по</p>
<ul>
<li><strong>EmployeeHashKey</strong> — хеш-ключу родительского элемента спутника;</li>
<li><strong>PhoneSeq</strong> — позиции телефонного номера в XML-файле;</li>
<li>и <strong>LoadDate</strong> — метке времени первого появления данных в исходном файле.</li>
</ul>
<p>Тем не менее, с мультиактивными спутниками связаны определённые проблемы, поскольку существует зависимость от порядка детализированных записей. Если порядок номеров телефонов в XML-файле изменится, все данные по сотруднику будут восприниматься как дельта, даже если просто два номера поменялись местами без изменения самих номеров. Таблица 5.8 показывает пример таких данных.</p>
<p><strong>Таблица 5.8 Данные мультиактивного спутника с изменённым порядком в источнике</strong></p>
<table>
<thead>
<tr>
<th>#</th>
<th>EmployeeHashKey</th>
<th>PhoneSeq</th>
<th>LoadDate</th>
<th>LoadEndDate</th>
<th>RecordSource</th>
<th>HashDiff</th>
<th>PhoneNumber</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>33aa…</td>
<td>1</td>
<td>2013-07-14 03:10:15</td>
<td>2013-07-20 02:54:04</td>
<td>Employee.xml</td>
<td>12fb…</td>
<td>1-405-1234123</td>
</tr>
<tr>
<td>2</td>
<td>33aa…</td>
<td>2</td>
<td>2013-07-14 03:10:15</td>
<td>2013-07-20 02:54:04</td>
<td>Employee.xml</td>
<td>76ca…</td>
<td>1-213-4561234</td>
</tr>
<tr>
<td>3</td>
<td>33aa…</td>
<td>3</td>
<td>2013-07-14 03:10:15</td>
<td>2013-07-20 02:54:04</td>
<td>Employee.xml</td>
<td>8cb1…</td>
<td>49-511-55349873</td>
</tr>
<tr>
<td>4</td>
<td>33aa…</td>
<td>4</td>
<td>2013-07-14 03:10:15</td>
<td>2013-07-20 02:54:04</td>
<td>Employee.xml</td>
<td>9944…</td>
<td>49-30-12345678</td>
</tr>
<tr>
<td>5</td>
<td>8321…</td>
<td>1</td>
<td>2013-07-14 03:10:15</td>
<td>(Null)</td>
<td>Employee.xml</td>
<td>93ca…</td>
<td>1-205-1234123</td>
</tr>
<tr>
<td>6</td>
<td>8321…</td>
<td>2</td>
<td>2013-07-14 03:10:15</td>
<td>(Null)</td>
<td>Employee.xml</td>
<td>328a…</td>
<td>49-40-12345678</td>
</tr>
<tr>
<td>7</td>
<td>33aa…</td>
<td>1</td>
<td>2013-07-20 02:54:05</td>
<td>(Null)</td>
<td>Employee.xml</td>
<td>12fb…</td>
<td>1-405-1234123</td>
</tr>
<tr>
<td>8</td>
<td>33aa…</td>
<td>2</td>
<td>2013-07-20 02:54:05</td>
<td>(Null)</td>
<td>Employee.xml</td>
<td>8cb1…</td>
<td>49-511-55349873</td>
</tr>
<tr>
<td>9</td>
<td>33aa…</td>
<td>3</td>
<td>2013-07-20 02:54:05</td>
<td>(Null)</td>
<td>Employee.xml</td>
<td>76ca…</td>
<td>1-213-4561234</td>
</tr>
<tr>
<td>10</td>
<td>33aa…</td>
<td>4</td>
<td>2013-07-20 02:54:05</td>
<td>(Null)</td>
<td>Employee.xml</td>
<td>9944…</td>
<td>49-30-12345678</td>
</tr>
</tbody>
</table>
<p>Первые четыре записи (записи №1–4) представляют первый порядок в исходной системе, в то время как последние четыре записи (записи №7–10) представляют порядок тех же, неизменённых записей при второй загрузке пакета. Однако старые записи из первого пакета помечены как удалённые по значению <strong>LoadEndDate</strong>, которое в этих случаях не равно null (напомним, это означает, что они были заменены).</p>
<p>Для решения этой проблемы можно использовать сам номер телефона в качестве номера последовательности. Субпоследовательность, как в таблице 5.7, должна использоваться только как архитектурный резервный вариант и только с активным сжатием таблицы. Таблица 5.9 приводит пример. Это устраняет зависимость от порядка при проверке дельт, но исключает возможность воссоздать набор данных в правильном порядке поступления. Если это важно, субпоследовательность, как показано в предыдущем примере — единственный способ. Другой вариант — перед вставкой включать существование телефонного номера в спутнике как текущей активной строки. Однако этот вариант не проверяет удалённые номера, которые могли исчезнуть из входящего набора данных.</p>
<p><strong>Таблица 5.9 Данные мультиактивного спутника с альтернативным атрибутом последовательности</strong></p>
<table>
<thead>
<tr>
<th>#</th>
<th>EmployeeHashKey</th>
<th>PhoneSeq</th>
<th>LoadDate</th>
<th>LoadEndDate</th>
<th>RecordSource</th>
<th>HashDiff</th>
<th>PhoneNumber</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>33aa…</td>
<td>1-405-1234123</td>
<td>2013-07-14 03:10:15</td>
<td>(Null)</td>
<td>Employee.xml</td>
<td>12fb…</td>
<td>1-405-1234123</td>
</tr>
<tr>
<td>2</td>
<td>33aa…</td>
<td>1-213-4561234</td>
<td>2013-07-14 03:10:15</td>
<td>2013-07-20 02:54:04</td>
<td>Employee.xml</td>
<td>76ca…</td>
<td>1-213-4561234</td>
</tr>
<tr>
<td>3</td>
<td>33aa…</td>
<td>49-511-55349873</td>
<td>2013-07-14 03:10:15</td>
<td>2013-07-20 02:54:04</td>
<td>Employee.xml</td>
<td>8cb1…</td>
<td>49-511-55349873</td>
</tr>
<tr>
<td>4</td>
<td>33aa…</td>
<td>49-30-12345678</td>
<td>2013-07-14 03:10:15</td>
<td>(Null)</td>
<td>Employee.xml</td>
<td>9944…</td>
<td>49-30-12345678</td>
</tr>
<tr>
<td>5</td>
<td>33aa…</td>
<td>1-213-4561235</td>
<td>2013-07-20 02:54:05</td>
<td>(Null)</td>
<td>Employee.xml</td>
<td>776a…</td>
<td>1-213-4561235</td>
</tr>
</tbody>
</table>
<p>Таблица показывает, что запись №2 была обновлена записью №5 во втором пакете. Запись №3 была удалена и больше не существует. Поэтому она получила <strong>конечную дату (end-dated)</strong> в спутнике. Обратите внимание, что описательный атрибут <strong>PhoneNumber</strong> дублируется в первичном ключе спутника (<strong>атрибут PhoneSeq</strong>), а не просто перемещается. Это упрощает понимание спутника для следующего пользователя, которому необходимо извлекать описательные атрибуты из спутника для бизнеса.</p>
<p>Если используется описанное решение, могут возникнуть две проблемы: во-первых, альтернативный атрибут должен быть <strong>NOT NULL</strong> и уникальным в контексте родителя, и во-вторых, производительность может значительно пострадать. Проблема с производительностью возникает, если альтернативный столбец последовательности является строкой, а не числом. Однако последовательность, составленная из символов, является лучшим решением из двух плохих (наилучший вариант из худших).</p>
<h2>Спутники отслеживания статусов (Status Tracking Satellites)</h2>
<p>Спутники отслеживания статусов используются для загрузки журналов аудита или данных из <strong>систем фиксации изменений (Change Data Capture, CDC)</strong>. Эти методы отслеживают информацию об <strong>операциях CRUD (также SCRUD)</strong> в исходной системе. Информация должна предоставляться исходной системой и включает сведения о создании (<strong>C</strong>), чтении (<strong>R</strong>), обновлении (<strong>U</strong>), удалении (<strong>D</strong>) и поиске (<strong>S</strong>) данных в исходной системе. Часто эта информация сохраняется операционной системой каждый раз, когда пользователь выполняет одну из этих операций в приложении. Таблица 5.10 предоставляет пример такой SCRUD-таблицы. Это результат функции CDC и показывает все изменения в исходной таблице.</p>
<p><strong>Таблица 5.10 Таблица фиксации изменений (CDC) для сотрудников</strong></p>
<table>
<thead>
<tr>
<th>#</th>
<th>__$start_lsn</th>
<th>__$seqval</th>
<th>__$operation</th>
<th>__$update_mask</th>
<th>Employee ID</th>
<th>First Name</th>
<th>Last Name</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>0x0000001C00000610004</td>
<td>0x0000001C00000610002</td>
<td>1</td>
<td>0x07</td>
<td>5</td>
<td>Chris</td>
<td>Miller</td>
</tr>
<tr>
<td>2</td>
<td>0x0000001C00000620004</td>
<td>0x0000001C00000620003</td>
<td>2</td>
<td>0x07</td>
<td>3</td>
<td>Jane</td>
<td>Brown</td>
</tr>
<tr>
<td>3</td>
<td>0x0000001C000006D0004</td>
<td>0x0000001C000006D0002</td>
<td>4</td>
<td>0x02</td>
<td>1</td>
<td>Mike</td>
<td>Freeman</td>
</tr>
<tr>
<td>4</td>
<td>0x0000001C000006E0004</td>
<td>0x0000001C000006E0002</td>
<td>4</td>
<td>0x02</td>
<td>1</td>
<td>Michael</td>
<td>Freeman</td>
</tr>
</tbody>
</table>
<div class="flex max-w-full flex-col grow">
<div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&amp;]:mt-5" dir="auto" data-message-author-role="assistant" data-message-id="dace826c-c7d6-4510-8e0b-4ca12c9f5754" data-message-model-slug="gpt-4o">
<div class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]">
<div class="markdown prose dark:prose-invert w-full break-words dark"><span style="font-size: revert;">Столбец <code>__$operation</code> указывает тип операции над данными. Реализация CDC в Microsoft SQL Server допускает следующие значения:</span></div>
</div>
</div>
</div>
<div class="flex min-h-[46px] justify-start">
<div class="touch:-me-2 touch:-ms-3.5 -ms-2.5 -me-1 flex flex-wrap items-center gap-y-4 p-1 select-none touch:w-[calc(100%+--spacing(3.5))] -mt-1 w-[calc(100%+--spacing(2.5))] duration-[1.5s] focus-within:transition-none hover:transition-none pointer-events-none [mask-image:linear-gradient(to_right,black_33%,transparent_66%)] [mask-size:300%_100%] [mask-position:100%_0%] motion-safe:transition-[mask-position] group-hover/turn-messages:pointer-events-auto group-hover/turn-messages:[mask-position:0_0] group-focus-within/turn-messages:pointer-events-auto group-focus-within/turn-messages:[mask-position:0_0] has-data-[state=open]:pointer-events-auto has-data-[state=open]:[mask-position:0_0]">
<ul>
<li>Удаление</li>
<li>Вставка</li>
<li>Обновление (старые значения)</li>
<li>Обновление (новые значения).</li>
</ul>
<p>Обратите внимание, что, в зависимости от приложения, журналирование операций чтения (что не поддерживается реализацией CDC в Microsoft SQL Server) может потребовать большого объёма хранения. То же самое может относиться к операциям поиска (снова, не поддерживается). Однако некоторые среды требуют этого по соображениям безопасности, чтобы предоставлять информацию о том, кто получал доступ к каким данным.</p>
<p>Спутник отслеживания статуса определяется, как на рисунке 5.23.</p>
<p><strong>Рисунок 5.23 Спутник отслеживания статуса (логическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_23_data_vault_Status_tracking_satellite_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1628" src="https://datatalks.ru/wp-content/uploads/2025/06/5_23_data_vault_Status_tracking_satellite_logical_design.jpeg" alt="" width="956" height="408" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_23_data_vault_Status_tracking_satellite_logical_design.jpeg 956w, https://datatalks.ru/wp-content/uploads/2025/06/5_23_data_vault_Status_tracking_satellite_logical_design-300x128.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_23_data_vault_Status_tracking_satellite_logical_design-768x328.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_23_data_vault_Status_tracking_satellite_logical_design-450x192.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_23_data_vault_Status_tracking_satellite_logical_design-780x333.jpeg 780w" sizes="(max-width: 956px) 100vw, 956px" /></a></p>
<p>Спутник отслеживания статуса на рисунке 5.23, <code>SatEmployeeStatus</code>, состоит только из одного описательного атрибута — атрибута Status, где хранятся данные из <code>__$operation</code>. Кроме того, имеется только метаданные, которые не отображаются на логических диаграммах Data Vault.<br />Данные в таблице, полученные из данных таблицы 5.10, представлены в таблице 5.11.</p>
<p><strong>Таблица 5.11 Данные спутника отслеживания статуса</strong></p>
<table>
<thead>
<tr>
<th>#</th>
<th>EmployeeHashKey</th>
<th>LoadDate</th>
<th>LoadEndDate</th>
<th>RecordSource</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>5a5…</td>
<td>2013-07-14 03:10:15</td>
<td>(Null)</td>
<td>Employee</td>
<td>D</td>
</tr>
<tr>
<td>2</td>
<td>389a…</td>
<td>2013-07-14 03:10:15</td>
<td>(Null)</td>
<td>Employee</td>
<td>C</td>
</tr>
<tr>
<td>3</td>
<td>1121…</td>
<td>2013-07-14 03:10:15</td>
<td>2013-07-20 02:54:04</td>
<td>Employee</td>
<td>U</td>
</tr>
<tr>
<td>4</td>
<td>1121…</td>
<td>2013-07-20 02:54:05</td>
<td>(Null)</td>
<td>Employee</td>
<td>U</td>
</tr>
</tbody>
</table>
<p>Обратите внимание, что <strong>описательные данные (например, бизнес-ключ) не хранятся в спутнике отслеживания статуса.</strong> Отслеживаются только статус и метка времени изменения статуса. Кроме того, исходные значения этих записей не отображаются (они устарели). Описательные данные загружаются в соответствующие стандартные спутники, предназначенные для захвата этих данных.<br />Кроме того, данные в спутниках отслеживания статуса должны быть нормализованы и соответствовать стандартному макету и правилам спутников. В этих таблицах должно быть включено сжатие, чтобы экономить дисковое пространство.</p>
<p>Если несколько исходных систем предоставляют информацию о статусе, следует отслеживать только информацию от основной системы (ведущей системы).<br />Хорошей практикой также является использование нескольких спутников отслеживания статуса для бизнес-ключа или отношения, тем самым разделяя спутник отслеживания статуса по источникам данных.</p>
<h2>Спутники эффективности (Effectivity Satellites)</h2>
<p><strong>Спутники эффективности часто прикреплены к сущностям-связям Data Vault</strong> и представлены на рисунке 5.24. Они отслеживают эффективность (актуальность) связи между двумя бизнес-объектами среди других применений (например, может быть полезно отслеживать актуальность бизнес-ключа в хабе). <strong>Их цель — отслеживать, когда связь активна с точки зрения бизнеса, и предоставлять даты начала и окончания для этой цели.</strong> Эти данные часто представляют собой организационно-ориентированную точку зрения, то есть когда связь (или бизнес-ключ) считается удалённой в организации.</p>
<p><strong>Рисунок 5.24 Спутник эффективности (логическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_24_data_vault_Effectivity_satellite_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1629" src="https://datatalks.ru/wp-content/uploads/2025/06/5_24_data_vault_Effectivity_satellite_logical_design.jpeg" alt="" width="953" height="382" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_24_data_vault_Effectivity_satellite_logical_design.jpeg 953w, https://datatalks.ru/wp-content/uploads/2025/06/5_24_data_vault_Effectivity_satellite_logical_design-300x120.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/06/5_24_data_vault_Effectivity_satellite_logical_design-768x308.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/06/5_24_data_vault_Effectivity_satellite_logical_design-450x180.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/06/5_24_data_vault_Effectivity_satellite_logical_design-780x313.jpeg 780w" sizes="(max-width: 953px) 100vw, 953px" /></a></p>
<p>Связь <strong>LinkMembership</strong> на рисунке 5.24 соединяет два хаба в модели. Хотя связь состоит только из стандартных атрибутов, которые фиксируют метаданные отношения между авиакомпанией и альянсом, таких как <strong>LoadDateTime</strong> и <strong>RecordSource</strong>, сама связь не имеет даты окончания внутри структуры связи.<br />Начало и окончание членства авиакомпании фиксируются спутником <strong>SatMembership</strong>, который зависит от связи. Для этой цели добавлены атрибуты <strong>MembershipBegin</strong> и <strong>MembershipEnd</strong>.</p>
<p>Даты начала и окончания не генерируются системой. Вместо этого они должны быть предоставлены из источника данных, например из журнала аудита Microsoft Master Data Services, дат актуальности в мастер-данных, CDC или любого другого журнала аудита из операционных систем. Чтобы пройти аудит хранилища данных, должно быть возможно отследить эти даты до исходной системы.</p>
<p>Спутники эффективности имеют смысл только в том случае, если исходная система предоставляет даты эффективности. Избегайте создания искусственных дат эффективности, если только система не предоставляет эти данные. Обычно это касается только подмножества таблиц данных или потоков. Однако чем больше источников предоставляет даты эффективности, тем лучше. Обязательно фиксируйте их в Data Vault, поскольку они часто могут использоваться для целей анализа данных (data mining).</p>
<p>Реляционная структура, показанная на рисунке 5.25, реализует пример с рисунка 5.24 и используется для отслеживания актуальности членства авиакомпаний в авиационных альянсах.</p>
<p><strong>Рисунок 5.25 Спутник эффективности (физическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_25_data_vault_Effectivity_satellite_physical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1630" src="https://datatalks.ru/wp-content/uploads/2025/06/5_25_data_vault_Effectivity_satellite_physical_design.jpeg" alt="" width="320" height="471" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_25_data_vault_Effectivity_satellite_physical_design.jpeg 320w, https://datatalks.ru/wp-content/uploads/2025/06/5_25_data_vault_Effectivity_satellite_physical_design-204x300.jpeg 204w" sizes="(max-width: 320px) 100vw, 320px" /></a></p>
<p>Для каждой записи в таблице связей существует одна активная запись в спутнике эффективности. Также возможно вставлять обновлённые записи, например, если членство было продлено.</p>
<p>Обратите внимание, что спутники эффективности не отслеживают доступность данных в исходной системе. Это отслеживается спутниками отслеживания записей (record tracking satellites), которые фиксируют статус данных в исходных системах.</p>
<h2>Спутники отслеживания записей (Record Tracking Satellites)</h2>
<p>Иногда требуется отслеживать, какие прикладные системы-источники подают какие ключи и связи в какие циклы загрузки. Например, многие системы предоставляют данные в виде полных дампов каждый день. В некоторых случаях не все записи включаются каждый день. Вместо этого они появляются и исчезают изо дня в день без какой-либо фиксированной закономерности. Это особенно верно для устаревших мейнфрейм-систем, поскольку записи в них часто блокируются при редактировании бизнес-пользователем. Если записи выгружаются в экспортный файл одновременно с тем, как бизнес-пользователь блокирует запись для редактирования, то запись пропускается и, соответственно, не экспортируется. В экспортном файле этой записи просто нет вовсе.</p>
<p>Другая проблема заключается в том, что такие системы редко предоставляют информацию о <strong>захвате изменённых данных (CDC)</strong>. Следовательно, невозможно с уверенностью определить удалённые записи. Однако, чтобы загрузить Data Vault, нам нужно выяснить, какие записи были удалены из системы-источника (чтобы задать им дату окончания с помощью атрибута <strong>LoadEndDate</strong> в спутниках), а какие просто исчезли из экспортного файла, но появятся в одном из следующих экспортов. Последние не должны иметь дату окончания. Это похоже на <strong>LastSeenDate</strong> хабов и связей, где отмечается последняя временная метка, когда бизнес-ключ или связь в последний раз встречались в системе-источнике — по тем же самым причинам.</p>
<p>Чтобы различать случаи «отсутствует несколько дней» и «удалено», бизнес обычно устанавливает бизнес-правило для различения этих двух классов. Например, бизнес может принять решение, что все записи, которые не появлялись в течение 7 последовательных дней, следует считать удалёнными. Количество дней часто различается для разных типов данных и источников данных. Это также похоже на методы обработки и обновления <strong>LastSeenDate</strong> хабов и связей. Рисунок 5.26 показывает логическую диаграмму спутника отслеживания записей.</p>
<p><strong>РИСУНОК 5.26 Спутник отслеживания записей (логическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_26_data_vault_Record_tracking_satellite_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1631" src="https://datatalks.ru/wp-content/uploads/2025/06/5_26_data_vault_Record_tracking_satellite_logical_design.jpeg" alt="" width="555" height="613" srcset="https://datatalks.ru/wp-content/uploads/2025/06/5_26_data_vault_Record_tracking_satellite_logical_design.jpeg 555w, https://datatalks.ru/wp-content/uploads/2025/06/5_26_data_vault_Record_tracking_satellite_logical_design-272x300.jpeg 272w, https://datatalks.ru/wp-content/uploads/2025/06/5_26_data_vault_Record_tracking_satellite_logical_design-450x497.jpeg 450w" sizes="(max-width: 555px) 100vw, 555px" /></a></p>
<p>В этом примере хаб <strong>HubPassenger</strong> расширяется спутником отслеживания записей <strong>SatPassengerTrack</strong>. Диаграмма показывает, что отслеживаются следующие источники записей для появления ключа клиента: рейсы, финансы, программа лояльности и бронирования.</p>
<p>Для наличия каждого бизнес-ключа или связи в системе-источнике в определённый момент времени вставляется запись в спутник отслеживания записей (если он существует для хаба или связи). Следовательно, спутник указывает, что данный ключ или связь присутствовали в момент отслеживания (<strong>время записи LoadDate</strong>). Таблица 5.12 показывает пример данных в спутнике с рисунка 5.26.</p>
<p><strong>Таблица 5.12 Денормализованные данные спутника отслеживания записей</strong></p>
<table>
<thead>
<tr>
<th>#</th>
<th>CustomerHashKey</th>
<th>LoadDate</th>
<th>Manufacturing</th>
<th>Finance</th>
<th>Contracts</th>
<th>Sales</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>5af3…</td>
<td>2013-07-14 03:10:15</td>
<td>1</td>
<td>1</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>2</td>
<td>5af3…</td>
<td>2013-07-15 03:10:15</td>
<td>1</td>
<td>1</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>3</td>
<td>5af3…</td>
<td>2013-07-16 03:10:15</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>4</td>
<td>5af3…</td>
<td>2013-07-17 03:10:15</td>
<td>1</td>
<td>1</td>
<td>0</td>
<td>1</td>
</tr>
</tbody>
</table>
<p>В отличие от других спутников, спутник отслеживания записей не имеет атрибутов <strong>RecordSource</strong> и <strong>LoadEndDate</strong>. Это связано с тем, что все записи создаются системой (поэтому нет атрибута <strong>RecordSource</strong>) и записи никогда не обновляются (поэтому нет <strong>LoadEndDate</strong>). Вместо обновления записей при каждом цикле загрузки, каждый раз вставляется новая запись. Значение 1 в описательных атрибутах указывает, что ключ клиента присутствовал в системе-источнике, а значение 0 — что бизнес-ключ отсутствовал. В результате таких изменений спутники отслеживания записей не подлежат аудиту. Однако это не проблема, поскольку позволяет отклоняться от правил сущностей Data Vault, не нарушая всю модель.</p>
<p>Макет записи оптимизирован для разбиения, фильтрации и запросов. Он обеспечивает быстрый доступ к этим компонентам и определение, какие источники данных «появляются и исчезают». Однако недостатком является то, что для каждого нового источника данных, добавляемого в эту таблицу, происходит вставка, за которой следует обновление.</p>
<p>Обратите внимание, что для предотвращения взрыва объема данных каждый столбец или вся таблица должны быть сжаты. Также рекомендуется суммировать старые данные и удалять их из спутника отслеживания записей, чтобы сэкономить больше дискового пространства. Старые данные определяются бизнесом и должны включать все данные, которые не требуются для основной цели спутника — идентификации удалённых данных в системе-источнике. Альтернатива удалению таких данных — переместить их на более медленные (и потому более дешёвые) носители или на резервные ленты. <strong>Разбиение на разделы (partitioning) также может помочь в этом случае.</strong></p>
<p>Структура в таблице 5.12 показывает, что спутник отслеживания записей не управляется данными, как все сущности в Data Vault. Вместо этого он управляется структурой систем-источников: каждый раз, когда система-источник добавляется в хранилище данных и подаёт данные в родительскую таблицу этого спутника, для целей отслеживания должен быть добавлен новый столбец. Это может быть правильным подходом для вашего Data Vault, если вы готовы принимать такие частые структурные изменения. Если это не вариант, также можно нормализовать данные, как показано в таблице 5.13.</p>
<p><strong>Таблица 5.13 Нормализованные данные спутника отслеживания записей</strong></p>
<table>
<thead>
<tr>
<th>#</th>
<th>CustomerHashKey</th>
<th>LoadDate</th>
<th>RecordSource</th>
<th>Appearance</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>5af3…</td>
<td>2013-07-14 03:10:15</td>
<td>Manufacturing</td>
<td>1</td>
</tr>
<tr>
<td>2</td>
<td>5af3…</td>
<td>2013-07-14 03:10:15</td>
<td>Finance</td>
<td>1</td>
</tr>
<tr>
<td>3</td>
<td>5af3…</td>
<td>2013-07-14 03:10:15</td>
<td>Contracts</td>
<td>1</td>
</tr>
<tr>
<td>4</td>
<td>5af3…</td>
<td>2013-07-14 03:10:15</td>
<td>Sales</td>
<td>0</td>
</tr>
<tr>
<td>5</td>
<td>5af3…</td>
<td>2013-07-15 03:10:15</td>
<td>Manufacturing</td>
<td>1</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="mt-3 w-full empty:hidden">
<div class="text-center">
<div>
<div class="inline-flex border border-gray-100 dark:border-gray-700 rounded-xl">
<div class="text-token-text-secondary flex items-center justify-center gap-4 px-4 py-2.5 text-sm whitespace-nowrap">
<p>В этом случае источник записи указывается в атрибуте <strong>RecordSource</strong>, а появление отслеживаемого бизнес-ключа или связи фиксируется в <strong>Appearance</strong>. Такая структура не требует изменений в структуре таблицы для добавления новых источников записей, поскольку новый источник требует только вставки данных в спутник отслеживания записей. Однако анализ данных спутника становится более сложным, но может быть выполнен с помощью оператора PIVOT в SQL, который доступен в Microsoft SQL Server и других СУБД.</p>
<p>Если бизнес предоставляет детализированные источники записей (чего мы стараемся придерживаться в этой книге как можно чаще), также возможно отслеживать перемещения данных внутри системы-источника: где впервые появился бизнес-ключ или связь в системе, куда он переместился и т.д. Детализированный источник записи максимально точно указывает источник. Например, <strong>источник записи &#171;CRM/Contact/Lead&#187;</strong> указывает на сущность <strong>Lead</strong> в области <strong>Contact</strong> в Microsoft CRM. Сравните эту подразумеваемую информацию с недетализированным источником записи &#171;CRM&#187;, где не указана никакая конкретная информация о происхождении данных. Чтобы извлечь максимум пользы из источника записи и тем самым предоставить как можно больше ценности для бизнеса, старайтесь использовать максимально детализированные источники записей.</p>
<p>Также рекомендуется использовать иерархическую систему, чтобы агрегировать данные на отдельных уровнях для анализа.</p>
<h2>Вычисляемые спутники (Computed Satellites)</h2>
<p>Согласно определению Data Vault хранит необработанные (сырые) данные. Однако в некоторых случаях может быть полезно хранить вычисленные данные.</p>
<p>В модели Data Vault для этого предусмотрено место — Business Vault. В разделе 2.2 главы 2 мы представили Business Vault как набор таблиц, следующих модели Data Vault и содержащих данные, изменённые согласно бизнес-правилам. Эти таблицы называются вычисляемыми спутниками и предназначены для хранения вычисленных данных — то есть данных, являющихся результатом агрегации, суммирования, корректировки, оценки и т.п. Это может быть результат процедур проверки качества данных, очистки данных или корректировки адресов.</p>
<p>Обычно бизнес хочет выполнять такие операции только один раз перед распространением в <strong>информационные витрины (information marts)</strong>, чтобы сэкономить вычислительные ресурсы. Вычисляемый спутник предназначен именно для этой цели: он хранит данные до их распространения. При этом структура вычисляемого спутника такая же, как у стандартного спутника. Единственное отличие — источник записи указывает, что данные сгенерированы системой. Также можно указать функцию, операцию или приложение, выполняющее вычисления для спутника, особенно если существует несколько источников данных, загружающих один и тот же вычисляемый спутник.</p>
<p>Поскольку для вычисленных данных нет прямого сырого источника, они по своей природе не подлежат аудиту. Однако возможно, что аудитор захочет изучить логику вычислений или, по крайней мере, увидеть, как, когда и что представляли собой данные до передачи их в информационные витрины. Вычисляемый спутник — это место, где можно это показать.</p>
<p>Логический символ вычисляемых спутников представлен на рисунке 5.27.</p>
<p><strong>Рисунок 5.27 Вычисляемый спутник (логический символ)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/06/5_27_data_vault_Computed_satellite_logical_symbol.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1632" src="https://datatalks.ru/wp-content/uploads/2025/06/5_27_data_vault_Computed_satellite_logical_symbol.jpeg" alt="" width="267" height="89" /></a></p>
<p>Кроме значка на фигуре, отличий от стандартных спутников нет. Как уже упоминалось, структура такая же. Снова, различие заключается в источнике данных, поскольку в этом типе сущности хранятся вычисленные данные.</p>
</div>
</div>
</div>
</div>
</div>


<p class="wp-block-paragraph"></p>
<p>Сообщение <a href="https://datatalks.ru/data-vault-chapter-5-intermediate-data-vault-modeling/">Перевод 5 Главы &#8212; Intermediate Моделирование Data Vault</a> появились сначала на <a href="https://datatalks.ru">DataTalks.RU. Data Engineering / DWH / Data Pipeline</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datatalks.ru/data-vault-chapter-5-intermediate-data-vault-modeling/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Перевод 4 Главы &#8212; Моделирование Data Vault 2.0 &#8212; Что такое Hub / Link / Satellite?</title>
		<link>https://datatalks.ru/chapter-4-data-vault-2-0-modeling/</link>
					<comments>https://datatalks.ru/chapter-4-data-vault-2-0-modeling/#respond</comments>
		
		<dc:creator><![CDATA[Data Engineer (Admin)]]></dc:creator>
		<pubDate>Sat, 08 Mar 2025 18:30:00 +0000</pubDate>
				<category><![CDATA[Data Vault 2.0]]></category>
		<category><![CDATA[Business Key]]></category>
		<category><![CDATA[Data modeling]]></category>
		<category><![CDATA[Hash key]]></category>
		<category><![CDATA[Hub Entities]]></category>
		<category><![CDATA[Intelligent Keys]]></category>
		<category><![CDATA[Link Entities]]></category>
		<category><![CDATA[Load date]]></category>
		<category><![CDATA[Record source]]></category>
		<category><![CDATA[Satellites]]></category>
		<category><![CDATA[Smart Keys]]></category>
		<category><![CDATA[Surrogate Key]]></category>
		<category><![CDATA[Модель данных Data Vault 2.0]]></category>
		<guid isPermaLink="false">https://datatalks.ru/?p=1110</guid>

					<description><![CDATA[<p>Перевод книги &#171;Building a Scalable Data Warehouse with Data Vault 2.0&#187; подготовлен автором сайта Глава 4 &#8212; Моделирование Data Vault 2.0 Аннотация В этой главе рассматриваются сущности, используемые в моделировании Data Vault, включая хабы (Hubs), линки/связи (Links) и сателлиты (Satellites). Показано, как идентифицировать бизнес-ключи в исходных данных и связывать их с другими бизнес-ключами в Data [&#8230;]</p>
<p>Сообщение <a href="https://datatalks.ru/chapter-4-data-vault-2-0-modeling/">Перевод 4 Главы &#8212; Моделирование Data Vault 2.0 &#8212; Что такое Hub / Link / Satellite?</a> появились сначала на <a href="https://datatalks.ru">DataTalks.RU. Data Engineering / DWH / Data Pipeline</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>Перевод книги &#171;Building a Scalable Data Warehouse with Data Vault 2.0&#187; подготовлен автором сайта</em></p>
<h1>Глава 4 &#8212; Моделирование Data Vault 2.0</h1>
<h2>Аннотация</h2>
<p>В этой главе рассматриваются сущности, используемые в моделировании Data Vault, включая <strong>хабы (Hubs)</strong>, <strong>линки/связи (Links)</strong> и <strong>сателлиты (Satellites)</strong>. Показано, как идентифицировать бизнес-ключи в исходных данных и связывать их с другими бизнес-ключами в Data Vault с помощью линк-сущностей. Также рассмотрено, как выделять дополнительные атрибуты из исходных данных и моделировать их в виде сателлитных сущностей.</p>
<p>Обсуждение сателлитов затрагивает необходимость их разделения на основе различных аспектов, например, <strong>по классификации</strong> или <strong>типу данных</strong>, <strong>по скорости изменения</strong> или <strong>по исходной системе</strong>. Для каждой сущности перечислены и подробно объяснены общие атрибуты, которые следует добавлять при моделировании Data Vault. Это включает в себя рекомендации по использованию хеш-ключей, временных меток и идентификаторов источников записей.</p>
<p><strong>Ключевые слова</strong></p>
<ul>
<li>Моделирование данных (Data modeling)</li>
<li>Сателлиты (Satellites)</li>
<li>Хаб-сущности (Hub Entities)</li>
<li>Линк-сущности (Link Entities)</li>
<li>Бизнес-ключ (Business Key)</li>
<li>Смарт-ключи (Smart Keys)</li>
<li>Интеллектуальные ключи (Intelligent Keys)</li>
<li>Бизнес-ключи (Business Keys)</li>
<li>Суррогатный ключ (Surrogate Key)</li>
<li>Временные метки (Time Stamps)</li>
<li>Идентификаторы источников записей (Record Source Identifiers)</li>
</ul>
<p>В этой главе представлен подход Data Vault, включая основные типы сущностей, используемые при моделировании хранилищ данных на основе Data Vault. Данная модель ориентирована на масштабируемые сети (scale-free networks), которые часто встречаются в природе, поэтому перед определением типов сущностей кратко рассматриваются такие сети. Каждое определение сопровождается примерами рассматриваемого типа сущности.</p>
<p>Обратите внимание, что данная глава частично основана на книге <strong>Super Charge Your Data Warehouse</strong> Дэна Линстедта.</p>
<p>Также стоит отметить, что в этой главе используется логический язык моделирования, называемый <strong>Visual Data Vault</strong>. Дополнительную информацию, включая белую книгу и набор шаблонов для Microsoft Visio, можно найти на сайте <strong><a href="https://visualdatavault.com" target="_blank" rel="noopener">https://www.visualdatavault.com/</a></strong>.</p>
<hr />
<ul>
<li><a href="https://datatalks.ru/wp-content/uploads/2025/03/VisualDataVault.v11.zip">VisualDataVault.v11.zip</a></li>
</ul>
<hr />
<h1>Введение в моделирование Data Vault</h1>
<p><strong>Модель Data Vault</strong> была изобретена Дэном Линстедтом в 1990-х годах и ориентирована на сложные сети, которые часто встречаются в природе. Многие из этих природных систем можно описать с помощью моделей сложных сетей, представляющих собой структуры, состоящие из узлов (вершин), соединенных связями (ребрами).</p>
<p>Примеры таких сетей включают <strong>человеческий мозг</strong>, который представляет собой сеть нейронов. Другой пример из природы — <strong>организация</strong>, которая является сетью людей. Еще один пример — <strong>глобальная экономика</strong>, которая представляет собой сеть национальных экономик, состоящих из сетей рынков. В свою очередь, рынки состоят из сетей производителей и потребителей. Общим для этих сетей является наличие <strong>хабов</strong>, таких как люди или другие объекты, <strong>связей</strong> между этими объектами и информации, описывающей контекст объектов.</p>
<p>В прошлом ученые предполагали, что эти сети имеют случайную природу, то есть расположение связей между хабами является случайным, а большинство хабов имеет примерно одинаковое количество связей. Такой тип случайной сети представлен на Рисунке 4.1.</p>
<p><strong>Рисунок 4.1. Дорожная сеть США: случайная сеть</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_1_us_highway_system_random_network.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1321" src="https://datatalks.ru/wp-content/uploads/2025/03/4_1_us_highway_system_random_network.jpeg" alt="" width="1137" height="794" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_1_us_highway_system_random_network.jpeg 1137w, https://datatalks.ru/wp-content/uploads/2025/03/4_1_us_highway_system_random_network-300x209.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_1_us_highway_system_random_network-1024x715.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/03/4_1_us_highway_system_random_network-768x536.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_1_us_highway_system_random_network-450x314.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_1_us_highway_system_random_network-780x545.jpeg 780w" sizes="(max-width: 1137px) 100vw, 1137px" /></a></p>
<p>В случайной сети, такой как дорожная сеть США, большинство хабов имеет всего несколько соединений. Эта характеристика является результатом множества исторических решений, обусловленных географическими, политическими и экономическими факторами. Например, стоимость строительства автомагистралей, как правило, ограничивает количество дорог, добавляемых в систему. То же самое относится к авиационной системе США, представленной на Рисунке 4.2.</p>
<p>Однако разница в том, что расширить сеть авиасообщения намного проще за счет добавления новых соединений между аэропортами, которые являются хабами этой сети. Общая структура сети в основном определяется одновременными действиями авиакомпаний, стремящихся максимизировать свою прибыль. Таким образом, сеть авиаперевозок формируется самостоятельно объектами внутри сети.</p>
<p><strong>Рисунок 4.2. Авиационная сеть США: сеть без масштаба</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_2_airline_system_scale_free_network.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1322" src="https://datatalks.ru/wp-content/uploads/2025/03/4_2_airline_system_scale_free_network.jpeg" alt="" width="943" height="657" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_2_airline_system_scale_free_network.jpeg 943w, https://datatalks.ru/wp-content/uploads/2025/03/4_2_airline_system_scale_free_network-300x209.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_2_airline_system_scale_free_network-768x535.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_2_airline_system_scale_free_network-450x314.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_2_airline_system_scale_free_network-780x543.jpeg 780w" sizes="(max-width: 943px) 100vw, 943px" /></a></p>
<p>Мы увидим, что хранилище данных, построенное с использованием модели Data Vault, так же легко расширять, как и любую другую сеть без масштаба (scale-free network).</p>
<h2>Терминология моделирования Data Vault</h2>
<p>Модель Data Vault представляет собой преобразование естественной модели в <strong>ориентированную на бизнес модель (business-centric model)</strong> для хранилищ данных. Эта модель отражает бизнес-процессы и связана с бизнесом через <strong>бизнес-ключи</strong>. Это важное свойство модели Data Vault, поскольку <strong><span style="color: #ff6600;">бизнес-ключи</span> определяют, как компании интегрируют, связывают и получают доступ к информации в своих системах</strong>. Благодаря ориентации модели Data Vault на бизнес-ключи, мы наследуем возможность интеграции, соединения и доступа к информации так же, как это делает бизнес в своей повседневной деятельности.</p>
<p><strong>Цель модели Data Vault</strong> — максимально точно представить бизнес. Исходя из этой цели, рассмотрим критически важные характеристики бизнеса:</p>
<ul>
<li>Способность реагировать на быстро меняющиеся бизнес-требования, также известная как гибкость.</li>
<li>Интеграция различных источников информации для создания новых знаний.</li>
<li>Сложность бизнес-среды и, в некоторых случаях, самой организации.</li>
<li>Гибкость для использования новых рыночных возможностей.</li>
<li>Необходимость прозрачности и подотчетности, по крайней мере, перед аудиторами компании.</li>
<li>Способность отвечать на запросы информации с помощью специализированных и адаптированных отчетов.</li>
<li>Возможность масштабирования бизнеса после достижения успеха.</li>
</ul>
<p>Эти ключевые характеристики позволяют компании выживать в современных конкурентных рынках. Модель Data Vault разработана таким образом, чтобы поддерживать все эти ключевые характеристики при построении системы хранилища данных. Используя модель Data Vault, вы сможете максимально точно адаптировать хранилище данных под бизнес и использовать Data Vault в своих интересах.</p>
<p>Для достижения целей модели Data Vault она основана на трех базовых типах сущностей, которые были выделены из естественной модели. Эти типы сущностей включают хабы, линк-и (связи) и сателлиты.</p>
<p><strong>Каждая сущность выполняет определенную функцию:</strong></p>
<ul>
<li><strong>Хаб</strong> отделяет бизнес-ключи от остальной модели.</li>
<li>Линк хранит связи между бизнес-ключами (и/или хабами).</li>
<li>Сателлит хранит контекст (атрибуты бизнес-ключа или отношений).</li>
</ul>
<h3><strong>Хаб-сущности (Hub Entities)</strong></h3>
<p>Когда бизнес-пользователи получают доступ к информации в операционной системе, они используют бизнес-ключ для обращения к бизнес-объектам. Это может быть номер клиента, номер счета-фактуры или идентификационный номер транспортного средства. Иногда система требует от пользователя указать комбинацию ключей, например, номер клиента и код региона, такой как код страны. В других случаях для бизнес-объектов не определен бизнес-ключ, но пользователь может найти нужный объект, выполняя поиск по имени или другому идентифицирующему атрибуту.</p>
<p>Из-за центральной роли этих бизнес-ключей в идентификации бизнес-объектов модель Data Vault отделяет их от остальной модели. Назначение хаб-сущности — хранить бизнес-ключи бизнес-объектов вместе с некоторыми другими данными, называемыми метаданными.</p>
<p>В модели Data Vault существуют хабы для каждого типа бизнес-ключа. В авиационном сценарии существуют отдельные хабы для хранения кодов аэропортов, кодов авиаперевозчиков и номеров рейсов, а также других хабов. Поскольку они содержат бизнес-ключи бизнеса, хабы являются основой модели Data Vault.</p>
<p>Сравнивая хаб Data Vault с примером воздушных перевозок, можно заметить, что аэропорты являются хабами. Они являются центральными элементами сети. В Data Vault бизнес-ключи являются центральными и поэтому размещаются в хабах.</p>
<h3><strong>Линк-сущности (Link Entities)</strong></h3>
<p>Так же, как аэропорты соединены авиарейсами на Рисунке 4.2, бизнес-объекты связаны друг с другом в бизнесе. Ни один бизнес-объект не существует отдельно от других бизнес-объектов. Напротив, они соединены между собой операционными бизнес-процессами, которые используют бизнес-объекты при выполнении своих задач. В Data Vault эти связи моделируются с помощью линков, которые соединяют два или более хаба.</p>
<p>Типичные бизнес-процессы включают закупки, производство, рекламу, маркетинг и продажи. <strong>Поскольку эти процессы часто (но не всегда) представляют собой транзакции<span style="color: #ff6600;">, линк (Link) часто также представляет собой транзакцию.</span></strong> Таким образом, <strong>он часто служит основой для создания фактов в размерной модели</strong> (подробнее об этом в главах 7 и 14). Однако это всего лишь эмпирическое правило.</p>
<p>В авиационном сценарии (Рисунок 4.3), существует линк между хабами авиаперевозчика, аэропорта и номера рейса для представления рейса. Кроме того, этот линк может включать ссылку на бортовой номер самолета. Другие линки могут отслеживать доступные инциденты безопасности, продажи на борту или бронирование мест.</p>
<p>Некоторые возможные линки могут не представлять транзакции (что нарушает эмпирическое правило). Например, может существовать линк, указывающий, что между двумя аэропортами существует соединение (Рисунок 4.4).</p>
<p><strong>Рисунок 4.3. Линк, соединяющий три хаба (логический дизайн)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_3_link_connecting_three_hubs_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1324" src="https://datatalks.ru/wp-content/uploads/2025/03/4_3_link_connecting_three_hubs_logical_design.jpeg" alt="" width="799" height="528" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_3_link_connecting_three_hubs_logical_design.jpeg 799w, https://datatalks.ru/wp-content/uploads/2025/03/4_3_link_connecting_three_hubs_logical_design-300x198.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_3_link_connecting_three_hubs_logical_design-768x508.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_3_link_connecting_three_hubs_logical_design-450x297.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_3_link_connecting_three_hubs_logical_design-780x515.jpeg 780w" sizes="(max-width: 799px) 100vw, 799px" /></a></p>
<p><strong>Рисунок 4.4. Линк, представляющий соединение между двумя хабами (логический дизайн)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_4_link_representing_connection_between_only_two_hubs_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1325" src="https://datatalks.ru/wp-content/uploads/2025/03/4_4_link_representing_connection_between_only_two_hubs_logical_design.jpeg" alt="" width="295" height="518" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_4_link_representing_connection_between_only_two_hubs_logical_design.jpeg 295w, https://datatalks.ru/wp-content/uploads/2025/03/4_4_link_representing_connection_between_only_two_hubs_logical_design-171x300.jpeg 171w" sizes="(max-width: 295px) 100vw, 295px" /></a></p>
<p>Логическая диаграмма показывает линк между хабами Аэропорт и Авиаперевозчик. Обратите внимание на две ссылки на хаб Аэропорт, которые отражают отправную и конечную точку соединения.</p>
<p>Без дополнительной информации мы знаем только то, какое соединение между данными аэропортами существовало в любой момент времени в прошлом. В следующем разделе мы увидим, почему такой нетранзакционный линк полезен.</p>
<h3><strong>Саттелит-сущности (Satellite Entities)</strong></h3>
<p><strong>Модель Data Vault, состоящая только из хабов и линков, не обеспечила бы нас достаточной информацией.</strong> Они предоставляют только информацию о взаимосвязи между бизнес-объектами. <span style="color: #ff6600;"><strong>Недостающий элемент — это контекст этих бизнес-объектов и контекст этих линков.</strong></span> Для транзакции рейса таким контекстом может быть время в воздухе или задержка рейса по соображениям безопасности.</p>
<p>Саттелиты добавляют эту функциональность в модель Data Vault. <strong>Они (Satellites) хранят атрибуты, которые принадлежат либо бизнес-ключу (в хабе), либо связи, либо транзакции (в линке)</strong> (Рисунок 4.5).</p>
<p><strong>Рисунок 4.5 Саттелиты на хабах и линках (логический дизайн)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_5_Satellites_on_hubs_and_links_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1326" src="https://datatalks.ru/wp-content/uploads/2025/03/4_5_Satellites_on_hubs_and_links_logical_design.jpeg" alt="" width="957" height="712" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_5_Satellites_on_hubs_and_links_logical_design.jpeg 957w, https://datatalks.ru/wp-content/uploads/2025/03/4_5_Satellites_on_hubs_and_links_logical_design-300x223.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_5_Satellites_on_hubs_and_links_logical_design-768x571.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_5_Satellites_on_hubs_and_links_logical_design-450x335.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_5_Satellites_on_hubs_and_links_logical_design-780x580.jpeg 780w" sizes="(max-width: 957px) 100vw, 957px" /></a></p>
<p><strong>Мы добавили саттелиты к хабам и линкам для хранения информации, необходимой для понимания контекста данных, хранящихся в Data Vault.</strong> Обратите внимание на саттелит, связанный с линком соединения между двумя аэропортами. Этот саттелит отслеживает расстояние и количество соединений между аэропортами. <span style="color: #ff6600;"><strong>Саттелит также хранит историю данных атрибутов — каждое изменение атрибута логируется в саттелит.</strong></span></p>
<p>Как видно на примере хаба аэропорта, на одном хабе или линке может быть несколько саттелитов. Причины распределения атрибутов между несколькими саттелитами включают наличие нескольких или изменяющихся источников данных, разную частоту изменений или функциональное разделение данных атрибутов.</p>
<h2>Определение хаба</h2>
<p><strong><span style="color: #ff6600;">Хабы являются основными опорными элементами модели Data Vault.</span></strong> В следующих разделах рассматривается тип сущности хаба и описывается, как определить бизнес-ключ.</p>
<p><strong>Хабы определяются как уникальный список бизнес-ключей и обеспечивают мягкую интеграционную точку для необработанных данных, которые не изменяются по сравнению с исходной системой, но должны иметь одинаковое семантическое значение.</strong> Следовательно, бизнес-ключи в одном хабе должны иметь одинаковую семантическую гранулярность. Это означает, что контактное лицо как физическое лицо должно находиться в другом хабе, чем клиент как корпорация (так как в корпорации может быть несколько контактных лиц).</p>
<p><strong>Бизнес-ключ может быть <span style="color: #ff6600;">составным ключом</span>.</strong> Пример составного ключа — идентификационный номер транспортного средства (VIN), который включает информацию о производителе (первые три символа, называемые WMI-кодом) и информацию, специфичную для поставщика, такую как завод-изготовитель и серийный номер. Эти составные ключи также известны как <strong>&#171;умные&#187; (smart)</strong> или <strong>интеллектуальные (intelligent) ключи</strong>, и они рассматриваются подробнее позже в этой главе.</p>
<p><strong>Хаб отслеживает появление нового бизнес-ключа в хранилище данных.</strong> Он использует метаданные для отслеживания <strong>системы-источника (называемой <span style="color: #ff6600;">Record Source</span>)</strong> и <strong>даты и времени поступления бизнес-ключа в хранилище данных (называемой <span style="color: #ff6600;">Load Date</span>)</strong>. Кроме того, для каждого бизнес-ключа в хабе генерируется хеш-ключ. Хеш-ключ используется для ссылки на бизнес-объект в других сущностях Data Vault, таких как линки и саттелиты. Помимо этого, он повышает производительность загрузки данных в хранилище и объединения бизнес-ключей внутри модели.</p>
<p><strong>Рисунок 4.6 Пример физической структуры сущности хаба в Data Vault (физический дизайн)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_6_Data_Vault_hub_entity_physical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1327" src="https://datatalks.ru/wp-content/uploads/2025/03/4_6_Data_Vault_hub_entity_physical_design.jpeg" alt="" width="385" height="362" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_6_Data_Vault_hub_entity_physical_design.jpeg 385w, https://datatalks.ru/wp-content/uploads/2025/03/4_6_Data_Vault_hub_entity_physical_design-300x282.jpeg 300w" sizes="(max-width: 385px) 100vw, 385px" /></a></p>
<p>Этот хаб использует обязательные метаданные, обсужденные в предыдущем абзаце.</p>
<p>Метаданные хаба (в данном случае атрибуты LoadDate и RecordSource) следует размещать в начале сущности. Это упрощает дизайн (так как все хабы начинаются с одинаковых атрибутов) и облегчает поддержку сущностей Data Vault.</p>
<p>В дальнейшем по книге мы будем использовать символ, показанный на Рисунке 4.7, для обозначения хабов.</p>
<p><strong>Рисунок 4.7 Хаб Data Vault (логический символ)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_7_Data_Vault_hub_logical_symbol.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1328" src="https://datatalks.ru/wp-content/uploads/2025/03/4_7_Data_Vault_hub_logical_symbol.jpeg" alt="" width="381" height="125" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_7_Data_Vault_hub_logical_symbol.jpeg 381w, https://datatalks.ru/wp-content/uploads/2025/03/4_7_Data_Vault_hub_logical_symbol-300x98.jpeg 300w" sizes="(max-width: 381px) 100vw, 381px" /></a></p>
<h3><strong>Определение бизнес-ключа (Business Key)</strong></h3>
<p>Прежде чем углубляться в структуру сущности хаба, давайте рассмотрим определение бизнес-ключа и обсудим, как идентифицировать бизнес-ключ в операционных системах.</p>
<p>Бизнес-ключи используются для идентификации, отслеживания и поиска информации. По определению, бизнес-ключ должен иметь очень низкую вероятность изменения и быть уникальным. Это означает, что в одной операционной системе только один бизнес-объект идентифицируется заданным бизнес-ключом, и этот бизнес-ключ не изменяется. Для ясности: в разных операционных системах могут существовать разные бизнес-объекты с одинаковым бизнес-ключом, но в одной и той же операционной системе такого не будет.</p>
<p>Во многих случаях естественные ключи могут использоваться как бизнес-ключи, при условии, что они уникальны и заполнены. Бизнес-ключи должны иметь смысл для бизнеса.</p>
<p><strong>Некоторые примеры бизнес-ключей:</strong></p>
<ul>
<li>Номера клиентов</li>
<li>Номера продуктов (также UPC, EAN или ISBN штрих-коды, в зависимости от случая)</li>
<li>Номера счетов</li>
<li>Идентификационные номера транспортных средств (VIN)</li>
<li>Номера деталей</li>
<li>Номера счетов-фактур</li>
<li>Автомобильные номера</li>
<li>Номера портфелей</li>
<li>Номера пропусков сотрудников</li>
<li>Номера заявок в службу поддержки</li>
<li>Номера водительских удостоверений</li>
<li>Номера нарядов на работы</li>
</ul>
<p>Некоторые из этих бизнес-ключей являются умными ключами (или интеллектуальными ключами). Примеры включают идентификационные номера транспортных средств, UPC или EAN штрих-коды. Эти ключи состоят из других ключей, которые идентифицируют другие бизнес-объекты (например, производитель в идентификационном номере транспортного средства).</p>
<p>В некоторых случаях бизнесу не удается обеспечить истинную уникальность бизнес-ключа. Например, один производитель гитар использовал следующую систему для серийных номеров: «первая цифра — это год воспроизводимой модели, вторая цифра — это год производства». Это приводит к дублированию для любых лет с одинаковыми последними цифрами (например, 1996/2006). Для создания действительно уникального бизнес-ключа требуется комбинация серийного номера и года производства.</p>
<p>Другие компании решают ввести суррогатный ключ, чтобы избежать проблемы дублирующихся бизнес-ключей. Они комбинируют серийный номер с искусственно сгенерированным ключом или полностью заменяют серийный номер при ссылке на бизнес-объект. В таком случае суррогатный ключ становится бизнес-ключом.</p>
<p>Однако все эти определения бизнес-ключей являются корректными, поскольку бизнес использует эти ключи для идентификации бизнес-объектов.</p>
<h4><strong>Композитные ключи &#8212; <span style="color: #ff6600;">Composite Keys</span> (также известные как умные ключи &#8212; <span style="color: #ff6600;">Smart Keys</span>, интеллектуальные ключи &#8212; <span style="color: #ff6600;">Intelligent Keys</span>)</strong></h4>
<p>Мы представили идентификационные номера транспортных средств (VIN) как примеры композитных ключей, также известных как умные ключи или интеллектуальные ключи.</p>
<p><strong>Композитные ключи состоят из нескольких частей.</strong> Например, каждый VIN в мире состоит из трех секций:</p>
<ul>
<li>Код мирового производителя (WMI)</li>
<li>Секция описания транспортного средства (VDS)</li>
<li>Секция идентификатора транспортного средства (VIS)</li>
</ul>
<p>Коды WMI уникальны и присваиваются только одному автопроизводителю. Однако один производитель может иметь несколько WMI-кодов. Код VDS определяет тип транспортного средства и включает информацию о модели и кузове. Код VIS идентифицирует отдельные автомобили (Рисунок 4.8).</p>
<p><strong>Рисунок 4.8 Индивидуальные секции идентификационного номера транспортного средства</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_8_Individual_sections_of_vehicle_identification_number.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1329" src="https://datatalks.ru/wp-content/uploads/2025/03/4_8_Individual_sections_of_vehicle_identification_number.jpeg" alt="" width="957" height="250" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_8_Individual_sections_of_vehicle_identification_number.jpeg 957w, https://datatalks.ru/wp-content/uploads/2025/03/4_8_Individual_sections_of_vehicle_identification_number-300x78.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_8_Individual_sections_of_vehicle_identification_number-768x201.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_8_Individual_sections_of_vehicle_identification_number-450x118.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_8_Individual_sections_of_vehicle_identification_number-780x204.jpeg 780w" sizes="(max-width: 957px) 100vw, 957px" /></a></p>
<p><strong>Композитные ключи также известны как умные или интеллектуальные ключи, потому что они содержат бизнес-значение, закодированное в позиционных значениях и форматах.</strong> Другие примеры композитных бизнес-ключей:</p>
<ul>
<li>Штрих-коды (UPC, EAN и т. д.)</li>
<li>IMEI-номер, используемый для идентификации мобильных устройств</li>
<li>MAC-адреса для идентификации сетевого оборудования</li>
<li>ISBN-коды для книг</li>
<li>ISSN-коды для периодических изданий</li>
<li>Номера телефонов</li>
<li>Адреса электронной почты</li>
<li>Номера кредитных карт</li>
</ul>
<p><strong>В Visual Data Vault, языке логического моделирования для Data Vault,</strong> различают композитные ключи и умные ключи:</p>
<ul>
<li><strong>Композитный ключ</strong> состоит из уникальной комбинации нескольких колонок.</li>
<li><strong>Умный ключ</strong> хранится в одном столбце, где отдельные части бизнес-ключа объединены (например, идентификационный номер транспортного средства на Рисунке 4.8).</li>
</ul>
<h4><strong>Процесс идентификации бизнес-ключа</strong></h4>
<p><strong><span style="color: #ff6600;">Бизнес-ключ</span> может быть идентифицирован из различных источников.</strong> В предыдущей главе мы писали, что «бизнес-ключи используются для идентификации, отслеживания и поиска информации». Исходя из этого, аналитик должен сосредоточиться на приложениях в исходной системе, онлайн-экранах поиска и заголовках отчетов. Везде, где бизнес-пользователь может искать бизнес-объект с помощью референсного кода, есть высокая вероятность, что он использует бизнес-ключи.</p>
<p>Отличным источником информации является интервьюирование бизнес-пользователя. Ключевой вопрос, который аналитик должен задать пользователю:</p>
<p><em>«Как вы идентифицируете, отслеживаете или находите информацию?»</em></p>
<p><strong>Эта фраза представляет собой основной принцип определения бизнес-ключей.</strong></p>
<p><strong>Еще одна эффективная стратегия — анализ бизнес-процессов компании (или между компаниями).</strong> Бизнес часто идентифицирует и отслеживает свои информационные наборы через бизнес-ключи. Пользователи взаимодействуют друг с другом через бизнес-процессы и передают, прикрепляют или переводят информацию в рамках этих процессов. Поэтому анализ бизнес-процессов помогает выявить ключи, используемые для обработки задач.</p>
<p>Другие источники информации:</p>
<ul>
<li>Данные и модели в исходных системах</li>
<li>XML/XSD-схемы</li>
<li>Уникальные индексы на бизнес-ключах (это первый индикатор наличия бизнес-ключа)</li>
<li>Электронные таблицы, OLAP-кубы, документация программного обеспечения</li>
</ul>
<h4><strong>Область действия бизнес-ключей (Scope of Business Keys)</strong></h4>
<p>Важно понимать, что у бизнес-ключа есть область действия, в пределах которой он является допустимым.</p>
<p><strong>Например, бизнес-ключи, используемые в операционной системе, могут быть действительны только в этой системе.</strong> Они не используются в других системах или бизнес-процессах. Другие бизнес-ключи применяются в локальном контексте, например, в рамках отдельного подразделения (например, отдела продаж). В некоторых случаях бизнес-ключи могут быть уникальны только для одной организации, но не действительны между разными организациями.</p>
<p><strong>Рисунок 4.9 иллюстрирует эту зависимость</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_9_Scope_of_business_keys.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1330" src="https://datatalks.ru/wp-content/uploads/2025/03/4_9_Scope_of_business_keys.jpeg" alt="" width="552" height="606" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_9_Scope_of_business_keys.jpeg 552w, https://datatalks.ru/wp-content/uploads/2025/03/4_9_Scope_of_business_keys-273x300.jpeg 273w, https://datatalks.ru/wp-content/uploads/2025/03/4_9_Scope_of_business_keys-450x494.jpeg 450w" sizes="(max-width: 552px) 100vw, 552px" /></a></p>
<p><span style="color: #ff6600;"><strong>Понимание области действия бизнес-ключа важно для выбора наиболее подходящего идентификатора в бизнес-контексте.</strong></span> Чем шире область действия ключа, тем лучше он может представлять бизнес-объект.</p>
<p>Например, автомобиль может иметь суррогатный ключ в операционной системе автопроизводителя. Этот суррогатный ключ действителен только в этой системе. Когда автомобиль производится на заводе, ему присваивается серийный номер, уникальный для всех автомобилей одной марки, модельного года и завода.</p>
<p>Таким образом, этот серийный номер уникален только в данном контексте. Обычно серийный номер используется как часть идентификационного номера автомобиля (VIN), который является глобально уникальным идентификатором для транспортных средств.</p>
<p>Не должно существовать двух автомобилей с одинаковым VIN. Однако автопроизводитель может решить использовать только последние 14 символов VIN, чтобы сэкономить место в операционных системах. Это объясняется тем, что все VIN начинаются с одних и тех же трех символов — WMI-кода производителя.</p>
<p>Однако крупные автопроизводители обычно имеют несколько WMI-кодов. Поэтому не является хорошей бизнес-практикой предполагать, что серийный номер автомобиля является уникальным.</p>
<h4><strong>Разница между бизнес-ключами и суррогатными ключами (Business Keys vs Surrogate Keys)</strong></h4>
<p><span style="color: #ff6600;"><strong>Суррогатные ключи</strong></span> часто используются операционными системами для идентификации бизнес-объекта. <strong>Однако они не являются хорошими кандидатами на роль бизнес-ключей, если сам бизнес их не использует.</strong> Как только бизнес начинает использовать суррогатный ключ для уникальной идентификации и отслеживания данных в системе-источнике, суррогатный ключ становится бизнес-ключом.</p>
<p>Студентов, изучающих компьютерные науки, учили использовать суррогатные ключи в качестве первичных ключей при разработке баз данных, поскольку это может ускорить соединение (join) таблиц. Вместо использования текстового бизнес-ключа для связи двух записей, они стали применять целочисленные суррогатные ключи, чтобы снизить сложность (например, при использовании составных ключей) и повысить скорость соединений.</p>
<p>Эта практика распространилась больше, чем предполагалось. Разработчики программного обеспечения часто используют суррогатные ключи для идентификации записей в интерфейсах и отчетах. Однако суррогатные ключи не несут никакого смысла. Они служат только для технической идентификации записи в одной системе-источнике.</p>
<h3><strong>Структура хаба (Hub Entity Structure)</strong></h3>
<p>Каждая сущность Data Vault содержит стандартные атрибуты, которые помогают строить модель, а также отслеживать и запрашивать данные. Тип сущности хаба не является исключением из этого правила.</p>
<p>Для всех хабов Data Vault характерны следующие атрибуты:</p>
<ul>
<li>Хеш-ключ (Hash key)</li>
<li>Бизнес-ключ(и) (Business key(s))</li>
<li>Дата загрузки (Load date)</li>
<li>Источник записи (Record source)</li>
</ul>
<p>Кроме того, существует необязательный атрибут:</p>
<ul>
<li>Дата последнего обнаружения (Last seen date)</li>
</ul>
<h4><strong>Хеш-ключ (Hash Key)</strong></h4>
<p>Запросы к финальной модели Data Vault требуют намного больше соединений (joins), чем в традиционном хранилище данных. Поэтому при создании модели необходимо подготовить Data Vault так, чтобы увеличить скорость обработки соединений. Здесь на помощь приходит хеш-ключ:</p>
<p>Этот ключ, основанный на бизнес-ключе, становится первичным ключом сущности хаба.<br />
Он используется в качестве внешнего ключа для ссылок на такие сущности, как линки (links) и спутники (satellites).</p>
<p>Хеш-ключ в хабе Data Vault помогает улучшить производительность поиска (lookup) в хранилище данных. Когда ETL-процесс загружает хаб Data Vault данными из промежуточной таблицы (stage table), он проверяет, существуют ли уже бизнес-ключи источника в целевом хабе.</p>
<p>Поскольку поиск по строкам переменной длины обычно медленнее, чем по строкам фиксированной длины, можно вычислить хеш-ключ и добавить его в хаб. Это также повышает производительность, если бизнес-ключи длинные, поскольку символьная последовательность хеш-ключа короче.</p>
<p>Безопасный метод вычисления хеш-ключа для бизнес-ключа хаба рассматривается в главе 11 &#171;Извлечение данных&#187;.</p>
<p><strong>Ключевые аспекты хеш-ключей:</strong></p>
<ul>
<li>Каждый уникальный бизнес-ключ в хабе Data Vault должен иметь уникальный хеш-ключ.</li>
<li>Рекомендуется использовать алгоритм MD5 (или другой алгоритм хеширования, например SHA-1).</li>
<li>Хеш-ключи никогда не должны быть доступны бизнес-пользователям и не должны использоваться за пределами Data Vault.</li>
<li>Как и суррогатные ключи, хеш-ключи не несут бизнес-смысла – они предназначены только для ускорения и упрощения соединений.</li>
<li>Важно отметить, что хеш-ключ заменяет порядковый номер (sequence number), который использовался в Data Vault 1.0.</li>
</ul>
<p><strong>Почему отказались от порядковых номеров в пользу хеш-ключей?</strong></p>
<ul>
<li>Хеш-ключи позволяют ссылаться на другие источники данных, например NoSQL-базы.</li>
<li>Они кроссплатформенные и могут быть восстановлены (один и тот же бизнес-ключ всегда генерирует один и тот же хеш-ключ, если расчет выполнен корректно).</li>
<li>Хотя соединения по хеш-ключам могут быть медленнее, чем по целочисленным порядковым номерам, их преимущества перевешивают недостатки.</li>
</ul>
<p>Доказательство этого утверждения рассматривается в следующих главах.</p>
<h4><strong>Бизнес-ключ (Business Key)</strong></h4>
<p>Атрибут бизнес-ключа в хабе Data Vault хранит бизнес-ключ, который был определен в процессе идентификации бизнес-ключей.</p>
<p>Этот атрибут является основной целью хаба Data Vault. Поэтому он является центральным элементом хаба.</p>
<p><strong>Тип данных бизнес-ключа</strong></p>
<ul>
<li>Ориентирован на данные источника.</li>
<li>В некоторых случаях бизнес-ключи представлены целыми числами.</li>
<li>Во многих других случаях бизнес-ключ — это строковое значение.</li>
<li>Поэтому тип данных и длина атрибута должны максимально соответствовать исходной системе.</li>
<li>На бизнес-ключ должен быть создан уникальный индекс, чтобы обозначить это свойство в модели. Мы будем придерживаться этой практики на протяжении всей книги.</li>
</ul>
<p><strong>Композитные ключи в хабе</strong></p>
<p>Если бизнес использует композитные ключи, их необходимо хранить в одном хабе Data Vault.<br />
Это соответствует определению и контексту бизнес-процессов, которые используют этот ключ для поиска и индексации с целью получения дополнительного контекста.</p>
<p><strong>Как хранить композитные ключи в хабе?</strong></p>
<ul>
<li>Композитный ключ может храниться в одном поле.</li>
<li>Если композитный ключ хорошо структурирован, его части могут быть разделены по разным полям хаба.</li>
<li>В этом случае уникальный ключ должен охватывать все поля, входящие в композитный ключ.</li>
<li>Можно хранить и композитный ключ в одном поле, и его части в отдельных полях в одном хабе.</li>
</ul>
<p>В таком случае хаб должен содержать два уникальных ключа:</p>
<ul>
<li><strong>Один</strong> — для поля, содержащего весь композитный ключ.</li>
<li><strong>Второй</strong> — для группы полей, содержащих отдельные части композитного ключа.</li>
</ul>
<p><strong>Множественные хабы для частей композитного ключа</strong></p>
<p>Можно создать несколько хабов для каждой отдельной части композитного бизнес-ключа.</p>
<p>Например, для идентификационного номера автомобиля (VIN) можно создать:</p>
<ul>
<li>Один хаб для VIN (идентификационного номера автомобиля в целом).</li>
<li>Отдельный хаб для WMI-кодов (коды производителя в составе VIN).</li>
<li>Отдельный хаб для VDS (раздел описания автомобиля в VIN).</li>
<li>Отдельный хаб для VIS (раздел идентификатора автомобиля в VIN).</li>
<li>Однако так как бизнес использует VIN целиком, должен существовать хаб, содержащий VIN-номер в полном виде.</li>
</ul>
<h4><strong>Дата загрузки (Load Date)</strong></h4>
<p>Дата загрузки (Load Date) указывает, когда бизнес-ключ впервые поступил в хранилище данных.</p>
<p>Это поле создается и поддерживается системой автоматически.<br />
Дата загрузки должна быть одинаковой для всех данных, загруженных в одном пакете (см. Глава 11, Извлечение данных, для подробностей).</p>
<p><strong>Использование единой даты загрузки позволяет:</strong></p>
<ul>
<li>Отслеживать ошибки</li>
<li>Находить технические проблемы загрузки, которые повлияли на данные в пакете</li>
<li>Сделать циклы загрузки повторяемыми, согласованными и перезапускаемыми для любого конкретного цикла загрузки.</li>
</ul>
<p>Дата загрузки генерируется хранилищем данных (или ETL-процессом, который выполняет загрузку).</p>
<ul>
<li>Она фиксирует момент времени, когда данные появились в хранилище.</li>
<li>После установки дата загрузки никогда не должна изменяться.</li>
<li>Для всех записей в одном цикле загрузки должна быть установлена одна и та же временная метка.</li>
</ul>
<h4><strong>Источник записи (Record Source)</strong></h4>
<p>Помимо присвоения временной метки загрузки, также отслеживается исходный источник данных.</p>
<p><strong>Источник записи (Record Source)</strong> — это жестко заданное поле, которое обеспечивает прослеживаемость загружаемого набора данных.<br />
Если у бизнес-ключа есть несколько источников данных, то источник записи должен указывать мастер-источник данных.<br />
Если бизнес-ключ отсутствует в мастер-источнике, но присутствует в других источниках данных, тогда источник записи должен указывать фактический источник данного ключа.</p>
<p><strong>Источник записи</strong> — ключевой атрибут для аудита хранилища данных.</p>
<p>Он позволяет идентифицировать исходную систему и обеспечивает прослеживаемость данных от информационных витрин до исходного источника.<br />
Это важно для соответствия нормативным требованиям.<br />
Разработчики, аудиторы и бизнес-пользователи получают пользу от наличия атрибута источника записи в каждой строке данных в модели.</p>
<p>Лучше не использовать обобщенные источники, например:</p>
<ul>
<li>&#171;SAP&#187; для всех данных SAP.</li>
</ul>
<p>Вместо этого используйте наиболее детализированный уровень:</p>
<ul>
<li>&#171;SAP.FINANCE.GL&#187; — указывает модуль главной книги в финансовом приложении SAP.</li>
</ul>
<h4><strong>Дата последнего обнаружения (Last Seen Date)</strong></h4>
<p>В оптимальном сценарии источник данных указывает записи, которые были вставлены, изменены или удалены перед загрузкой в хранилище данных.</p>
<p><strong>Этот процесс известен как <span style="color: #ff6600;">Change Data Capture (CDC)</span>.</strong></p>
<p>CDC поддерживается многими реляционными СУБД, включая Microsoft SQL Server.<br />
Однако многие операционные системы не предоставляют такую дельта-загрузку.<br />
Вместо этого источники данных предоставляют полный дамп всей таблицы, содержащей все актуальные записи операционной системы.</p>
<p><strong>Такой метод называется полной загрузкой (full load).</strong></p>
<p>Операционным командам и разработчикам приложений часто проще его реализовать.<br />
Определение удаленных данных в полной загрузке</p>
<p><strong>Чтобы определить удаленные данные при полной загрузке, ETL-процесс должен:</strong></p>
<ul>
<li>Просканировать таблицу хранилища данных (например, таблицу хабов).</li>
<li>Проверить, существует ли каждая запись в новом загруженном наборе данных.</li>
<li>Если запись больше не существует в источнике, это может означать, что она была удалена.</li>
</ul>
<p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Важно:</strong> В некоторых системах, например, mainframe, запись может не экспортироваться, если она заблокирована для редактирования.</p>
<p><strong>Зачем нужна дата последнего обнаружения (Last Seen Date)</strong></p>
<p>Если источник данных работает таким образом, дата последнего обнаружения (Last Seen Date) может помочь:</p>
<ul>
<li>Решить, когда запись следует считать удаленной.</li>
<li>Определить временной порог, после которого запись считается удаленной.</li>
</ul>
<p><strong>Как работает дата последнего обнаружения</strong></p>
<ul>
<li><strong>Дата последнего обнаружения</strong> фиксирует момент, когда бизнес-ключ последний раз появлялся в источнике.</li>
<li>Для каждого бизнес-ключа в текущей партии данных обновляется дата последнего обнаружения — ей присваивается дата текущей загрузки.</li>
<li>Если бизнес-ключ отсутствует в текущей партии данных, его дата последнего обнаружения остается неизменной.</li>
<li>Все бизнес-ключи, чья дата последнего обнаружения ниже установленного порога, считаются удаленными.</li>
<li>Порог определяется бизнесом в зависимости от характеристик источника данных и бизнес-кейса.</li>
</ul>
<p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Обратите внимание:</strong> Дату последнего обнаружения следует использовать только в том случае, если в системе нет журнала аудита или механизма CDC.</p>
<p>В Главе 11 подробно рассматриваются причины этой проблемы и методы заполнения даты последнего обнаружения.</p>
<h3><strong>Примеры хабов</strong></h3>
<p>Хабы, показанные на Рисунке 4.10, демонстрируют использование различных атрибутов.</p>
<p><strong>Рисунок 4.10 Пример хабов Data Vault (физический дизайн)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_10_Example_of_Data_Vault_hubs_physical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1331" src="https://datatalks.ru/wp-content/uploads/2025/03/4_10_Example_of_Data_Vault_hubs_physical_design.jpeg" alt="" width="954" height="658" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_10_Example_of_Data_Vault_hubs_physical_design.jpeg 954w, https://datatalks.ru/wp-content/uploads/2025/03/4_10_Example_of_Data_Vault_hubs_physical_design-300x207.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_10_Example_of_Data_Vault_hubs_physical_design-768x530.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_10_Example_of_Data_Vault_hubs_physical_design-450x310.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_10_Example_of_Data_Vault_hubs_physical_design-780x538.jpeg 780w" sizes="(max-width: 954px) 100vw, 954px" /></a></p>
<p><strong>HubAirline</strong></p>
<p>Использует идентификационный номер авиакомпании (AirlineID), назначаемый Министерством транспорта США (US DOT), для уникальной идентификации авиакомпании.<br />
Бизнес-ключ представлен в виде хэш-ключа AirlineKey, который создается путем хеширования AirlineID.</p>
<p><strong>HubCarrier</strong></p>
<p>Использует код перевозчика (Carrier Code), присваиваемый IATA.<br />
Этот код шире применяется для идентификации перевозчика, чем AirlineID.<br />
Проблема: код перевозчика не всегда уникален, так как один и тот же код мог быть присвоен разным перевозчикам в разные периоды времени.</p>
<p><strong>HubFlight</strong></p>
<p>Использует составной бизнес-ключ для представления объекта &#171;рейс&#187;.</p>
<p>Составной ключ состоит из двух независимых бизнес-ключей:</p>
<ul>
<li>Carrier (перевозчик).</li>
<li>FlightNum (номер рейса).</li>
</ul>
<p>Отдельный хаб для номера рейса бессмыслен, так как:</p>
<ul>
<li>Номер рейса назначается авиакомпанией.</li>
<li>Один и тот же номер рейса может использоваться разными авиакомпаниями.</li>
<li>Первичный ключ создается путем хеширования составных бизнес-ключей в один атрибут, что улучшает идентификацию и производительность.</li>
<li>Дополнительная информация, например, дата рейса, в хабе не хранится — она сохраняется в спутниках (satellites).</li>
</ul>
<p><strong>HubFlightCode</strong></p>
<p>Альтернативный способ представления составного бизнес-ключа.</p>
<p>В этом случае:</p>
<ul>
<li>Составной ключ представлен в одном поле FlightCode.</li>
<li>Отдельные компоненты ключа также хранятся в Carrier и FlightNum.</li>
</ul>
<p><strong>HubAirplane</strong></p>
<p>Использует атрибут LastSeenDate.</p>
<p>Это оправдано, так как:</p>
<ul>
<li>Источник данных сообщает только об используемых самолетах, но не содержит информации о том, был ли самолет выведен из эксплуатации перевозчиком.</li>
<li>LastSeenDate позволяет определить, какие самолеты больше не используются авиакомпанией.</li>
</ul>
<h2>Определение Link</h2>
<p><strong>Тип сущности Link</strong> отвечает за моделирование транзакций, ассоциаций, иерархий и переопределений бизнес-терминов.</p>
<ul>
<li>Link соединяет бизнес-ключи; следовательно, связи моделируются между хабами.</li>
<li>Links фиксируют и записывают прошлые, настоящие и будущие взаимоотношения между элементами данных с максимально возможной детализацией.</li>
<li>Links не фиксируют временные линии или временные аспекты — такие концепции (включая актуальный статус связи) являются частью контекста, а не задачей links.</li>
<li>По этой причине в links не должно быть конечных дат (end-dated) или другой временной информации, за исключением атрибута Load Date (по техническим и информационным причинам).</li>
<li>Links представляют связь, которая существует в настоящее время или существовала в прошлом.</li>
<li>Добавление временных ограничений в link-структуры (например, Begin Date и End Date) привязывает связь к одной временной шкале и заставляет хранилище данных завершать и запускать эту связь только один раз.</li>
</ul>
<p>Этого ограничения следует избегать, так как оно не всегда будет истинным.<br />
Например, даже если такое ограничение сейчас подходит для организации, в будущем бизнес-процессы могут измениться.<br />
Кроме того, взаимоотношение может быть случайно (или временно) удалено в исходной системе и восстановлено при следующем обновлении данных.<br />
Data Vault должен фиксировать такое временное удаление в целях аудита, однако контекстная информация (бизнес-уровень) должна фиксировать процесс восстановления.<br />
Links в Data Vault реализуются с помощью таблиц, которые представляют отношения &#171;многие ко многим&#187;.</p>
<p>Links соединяют два или более хабов (или даже тот же самый хаб дважды, используя разные ссылки на хабы).</p>
<p><strong>Link содержит:</strong></p>
<ul>
<li>Хэш-ключ каждого связанного хаба.</li>
<li>Дополнительные метаданные (обсуждаются далее в этой главе).</li>
</ul>
<p>Типичная сущность Data Vault link представлена на Рисунке 4.11.</p>
<p><strong>Рисунок 4.11 Link сущность в Data Vault (физический дизайн)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_11_Data_Vault_link_entity_physical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1332" src="https://datatalks.ru/wp-content/uploads/2025/03/4_11_Data_Vault_link_entity_physical_design.jpeg" alt="" width="461" height="450" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_11_Data_Vault_link_entity_physical_design.jpeg 461w, https://datatalks.ru/wp-content/uploads/2025/03/4_11_Data_Vault_link_entity_physical_design-300x293.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_11_Data_Vault_link_entity_physical_design-450x439.jpeg 450w" sizes="(max-width: 461px) 100vw, 461px" /></a></p>
<p><strong>Первичный ключ сущности</strong> — это хеш-ключ, который идентифицирует link внутри хранилища данных.</p>
<p>Этот ключ используется спутниками (satellites), которые добавляют контекст к link, или другими link, которые ссылаются на данный link.<br />
Хеш-ключ также улучшает поиск записей при загрузке новых данных в таблицу.<br />
Он основан на бизнес-ключах CarrierCode и AirportSeqID, которые хранятся в соответствующих хабах.<br />
Атрибуты Load Date и Record Source предоставляют информацию о времени загрузки записи и ее источнике.</p>
<p>На протяжении всей книги для Data Vault links будет использоваться логический символ, показанный на Рисунке 4.12.</p>
<p><strong>Рисунок 4.12 Логический символ Data Vault link</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_12_Data_Vault_link_logical_symbol.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1333" src="https://datatalks.ru/wp-content/uploads/2025/03/4_12_Data_Vault_link_logical_symbol.jpeg" alt="" width="458" height="149" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_12_Data_Vault_link_logical_symbol.jpeg 458w, https://datatalks.ru/wp-content/uploads/2025/03/4_12_Data_Vault_link_logical_symbol-300x98.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_12_Data_Vault_link_logical_symbol-450x146.jpeg 450w" sizes="(max-width: 458px) 100vw, 458px" /></a></p>
<p>Форма сущности напоминает звено цепи, что помогает лучше идентифицировать этот базовый элемент.<br />
Кроме того, используется иконка цепи для той же цели.<br />
Data Vault link соединяет два или более хабов (ссылки на хабы), поэтому он всегда изображается вместе с ними (Рисунок 4.13).</p>
<p><strong>Рисунок 4.13 Link, соединяющий два хаба (логическая схема)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_13_link_connecting_two_hubs_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1334" src="https://datatalks.ru/wp-content/uploads/2025/03/4_13_link_connecting_two_hubs_logical_design.jpeg" alt="" width="321" height="472" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_13_link_connecting_two_hubs_logical_design.jpeg 321w, https://datatalks.ru/wp-content/uploads/2025/03/4_13_link_connecting_two_hubs_logical_design-204x300.jpeg 204w" sizes="(max-width: 321px) 100vw, 321px" /></a></p>
<p><span style="color: #ff6600;"><strong>Links обеспечивают масштабируемость модели Data Vault.</strong></span></p>
<p>Можно начать с относительно небольшой модели хранилища данных в Data Vault.<br />
Затем эта модель может расширяться (масштабироваться) путем добавления новых хабов и links для создания более крупной структуры.</p>
<h3><strong>Причины использования отношений многие-ко-многим</strong></h3>
<p>Отношения многие-ко-многим предоставляют ряду преимуществ для модели.</p>
<p>Они обеспечивают гибкость, поскольку изменения в бизнес-правилах не требуют переработки links.<br />
Гранулярность выражается количеством связанных хабов (или бизнес-ключей) и четко задокументирована.</p>
<p><strong>Поскольку отношения моделируются в link-сущностях, такие сущности:</strong></p>
<ul>
<li>помогают физической модели адаптироваться к изменениям данных и бизнес-правил</li>
<li>минимизируют влияние этих изменений на существующие данные (историю) и процессы загрузки и запросов</li>
</ul>
<p>Links позволяют снизить количество изменений в Data Vault-модели, которые вызваны изменениями отношений в бизнес-модели.</p>
<p><strong>Пример:</strong></p>
<p>Допустим, сегодня бизнес определяет правило:</p>
<p><em>«Один авиаперевозчик может обслуживать несколько аэропортов, но каждый аэропорт должен обслуживаться только одним перевозчиком.»</em></p>
<p>В традиционной третьей нормальной форме (3NF) эта связь моделируется через внешний ключ в дочерней таблице аэропортов, который ссылается на первичный ключ в таблице перевозчиков (Рисунок 4.14).</p>
<p><strong>Рисунок 4.14 Отношение один-ко-многим (физическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_14_One_to_many_relationship_physical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1335" src="https://datatalks.ru/wp-content/uploads/2025/03/4_14_One_to_many_relationship_physical_design.jpeg" alt="" width="799" height="567" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_14_One_to_many_relationship_physical_design.jpeg 799w, https://datatalks.ru/wp-content/uploads/2025/03/4_14_One_to_many_relationship_physical_design-300x213.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_14_One_to_many_relationship_physical_design-768x545.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_14_One_to_many_relationship_physical_design-450x319.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_14_One_to_many_relationship_physical_design-780x554.jpeg 780w" sizes="(max-width: 799px) 100vw, 799px" /></a></p>
<p><strong>Но если бизнес изменит правило:</strong></p>
<p><em>«Теперь один аэропорт может обслуживаться несколькими авиаперевозчиками.»</em></p>
<p>Это потребует изменения структуры данных для поддержки отношения многие-ко-многим (Рисунок 4.15).</p>
<p><strong>Рисунок 4.15 Отношение многие-ко-многим (физическая модель)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_15_Many_to_many_relationship_physical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1336" src="https://datatalks.ru/wp-content/uploads/2025/03/4_15_Many_to_many_relationship_physical_design.jpeg" alt="" width="1144" height="460" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_15_Many_to_many_relationship_physical_design.jpeg 1144w, https://datatalks.ru/wp-content/uploads/2025/03/4_15_Many_to_many_relationship_physical_design-300x121.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_15_Many_to_many_relationship_physical_design-1024x412.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/03/4_15_Many_to_many_relationship_physical_design-768x309.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_15_Many_to_many_relationship_physical_design-450x181.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_15_Many_to_many_relationship_physical_design-780x314.jpeg 780w" sizes="(max-width: 1144px) 100vw, 1144px" /></a></p>
<p>Проблема в том, что изменение бизнес-правила приводит к необходимости переработки существующих структур.</p>
<p>Любой редизайн требует реинжиниринга всех зависимых процессов и моделей.<br />
Каждое изменение затрагивает не только новые процессы, но и существующую функциональность, даже если она не должна меняться с точки зрения бизнеса.<br />
Без этих модификаций существующие процессы просто перестанут работать, так как все еще ожидают связи один-ко-многим.<br />
В модели Data Vault существуют только многие-ко-многим отношения, так как используются link-сущности.</p>
<p><strong>Link-сущности могут моделировать любые типы связей:</strong></p>
<ul>
<li>1:m,</li>
<li>m:n,</li>
<li>m:1,</li>
<li>1:1,</li>
<li>без изменений в самой структуре link-таблицы.</li>
</ul>
<p>ETL-процессы загрузки остаются неизменными, чего нельзя сказать о традиционных хранилищах данных, где изменение определения связи требует переработки ETL-процессов.</p>
<p>Таким образом, модель Data Vault стремится свести необходимость реинжиниринга к нулю.</p>
<h3><strong>Гибкость Links</strong></h3>
<p>Links значительно повышают гибкость модели Data Vault.</p>
<p>Добавлять новые links или изменять тип связи существующих links легко,<br />
→ это позволяет IT-отделу быстрее реагировать на изменения в бизнесе.</p>
<p>Чтобы добавить новую функциональность,<br />
→ IT достаточно добавить новые hubs и связать их links с существующими hubs.<br />
Пример:</p>
<p>На рисунке 4.16 показана начальная модель Data Vault для примера с авиацией (логическая схема).</p>
<p><strong>Рисунок 4.16 Исходная модель до изменений (логический дизайн)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_16_Starting_model_before_changes_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1337" src="https://datatalks.ru/wp-content/uploads/2025/03/4_16_Starting_model_before_changes_logical_design.jpeg" alt="" width="663" height="581" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_16_Starting_model_before_changes_logical_design.jpeg 663w, https://datatalks.ru/wp-content/uploads/2025/03/4_16_Starting_model_before_changes_logical_design-300x263.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_16_Starting_model_before_changes_logical_design-450x394.jpeg 450w" sizes="(max-width: 663px) 100vw, 663px" /></a></p>
<p>Если бизнес решает добавить информацию о самолете, в Data Vault добавляется новый hub, затем он связывается links с существующей моделью (Рисунок 4.17).</p>
<p><strong>Рисунок 4.17 Модель Data Vault после модификации (логический дизайн)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_17_Data_Vault_after_modification_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1338" src="https://datatalks.ru/wp-content/uploads/2025/03/4_17_Data_Vault_after_modification_logical_design.jpeg" alt="" width="1372" height="600" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_17_Data_Vault_after_modification_logical_design.jpeg 1372w, https://datatalks.ru/wp-content/uploads/2025/03/4_17_Data_Vault_after_modification_logical_design-300x131.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_17_Data_Vault_after_modification_logical_design-1024x448.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/03/4_17_Data_Vault_after_modification_logical_design-768x336.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_17_Data_Vault_after_modification_logical_design-450x197.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_17_Data_Vault_after_modification_logical_design-780x341.jpeg 780w" sizes="(max-width: 1372px) 100vw, 1372px" /></a></p>
<p>При этом существующая модель не изменяется.</p>
<p>ETL-процессы, которые зависят от нее, не требуют доработки.<br />
Влияние изменений на существующее хранилище данных равно нулю.<br />
Это и есть ключевое преимущество Data Vault.<br />
Дальнейшие изменения (например, добавление новых данных в хранилище) проводятся аналогичным образом.</p>
<p>Links для объединения распределенных хранилищ данных<br />
Links можно использовать не только внутри одного хранилища данных, но и для связи распределенных хранилищ, где часть модели хранится в одном месте, а другая часть — в другом (Рисунок 4.18).</p>
<p><strong>Рисунок 4.18 Распределенное хранилище данных, соединенное links Data Vault</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_18_Distributed_data_warehouse_connected_by_Data_Vault_links.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1339" src="https://datatalks.ru/wp-content/uploads/2025/03/4_18_Distributed_data_warehouse_connected_by_Data_Vault_links.jpeg" alt="" width="952" height="873" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_18_Distributed_data_warehouse_connected_by_Data_Vault_links.jpeg 952w, https://datatalks.ru/wp-content/uploads/2025/03/4_18_Distributed_data_warehouse_connected_by_Data_Vault_links-300x275.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_18_Distributed_data_warehouse_connected_by_Data_Vault_links-768x704.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_18_Distributed_data_warehouse_connected_by_Data_Vault_links-450x413.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_18_Distributed_data_warehouse_connected_by_Data_Vault_links-780x715.jpeg 780w" sizes="(max-width: 952px) 100vw, 952px" /></a></p>
<p>На схеме:</p>
<ul>
<li>Data Vault с информацией о полетах в США</li>
<li>Data Vault с информацией о полетах в Европе</li>
<li>Традиционное хранилище данных для Азиатско-Тихоокеанского региона</li>
</ul>
<p>Как видно, можно даже связать Data Vault-хранилище с традиционными хранилищами, которые изначально не использовали Data Vault.<br />
Кроме того, Data Vault может быть подключен к неструктурированным источникам данных, таким как Hadoop или обычные файлы в файловой системе.</p>
<h3><strong>Гранулярность Links</strong></h3>
<p>Гранулярность связей определяется количеством хабов, которые они соединяют. Каждый раз, когда в связь добавляется новый хаб, вводится новый уровень гранулярности. Чем больше хабов соединяет связь, тем более тонкой становится гранулярность. Когда добавляется новый хаб, мы уменьшаем гранулярность связи. Таким образом, связи ведут себя как факты в размерной модели. Когда в таблицу фактов добавляется новое измерение, гранулярность также уменьшается.</p>
<p>Если связь в Data Vault уже находится в эксплуатации и бизнес требует изменения гранулярности, есть два варианта для рефакторинга модели Data Vault. Во-первых, мы можем изменить существующую связь и добавить ссылку на другой хаб. Однако это потребует перепроектирования существующих ETL-работ и также необходимо определить, как будет обрабатываться исторические данные в новой связи (которые имеют другую гранулярность). Это также ставит под угрозу возможность аудита данных, поскольку исходная система никогда не поставляла значение NULL (Рисунок 4.19).</p>
<p><strong>Рисунок 4.19 Манипулирование историческими данными в связи Data Vault</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_19_Manipulating_historic_data_in_a_Data_Vault_link.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1342" src="https://datatalks.ru/wp-content/uploads/2025/03/4_19_Manipulating_historic_data_in_a_Data_Vault_link.jpeg" alt="" width="790" height="229" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_19_Manipulating_historic_data_in_a_Data_Vault_link.jpeg 790w, https://datatalks.ru/wp-content/uploads/2025/03/4_19_Manipulating_historic_data_in_a_Data_Vault_link-300x87.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_19_Manipulating_historic_data_in_a_Data_Vault_link-768x223.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_19_Manipulating_historic_data_in_a_Data_Vault_link-450x130.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_19_Manipulating_historic_data_in_a_Data_Vault_link-780x226.jpeg 780w" sizes="(max-width: 790px) 100vw, 790px" /></a></p>
<p>По этой причине модификация существующих структур связей больше не является приемлемой практикой в моделировании Data Vault 2.0.</p>
<p>Обратите внимание, что на Рисунке 4.19 каждая ссылка на другие бизнес-объекты (хабы) представлена псевдо-хеш-ключом и бизнес-ключом в фигурных скобках (например, &#171;8fe9&#8230; {UA}&#187;).</p>
<p>Лучший вариант — создать новую связь для новых входящих данных и «закрыть» старую связь. Закрытие связи означает, что новые данные не добавляются в таблицу связи. Вместо этого новые данные добавляются в новую связь. Когда новый бизнес строит информационную модель, он должен определить, как связи с разной гранулярностью будут объединяться. Таким образом, можно обеспечить аудитируемость входящих данных и удовлетворить требования бизнеса.</p>
<p>SQL-запрос в центре Рисунка 4.20 представляет собой бизнес-правило, которое описывает, как обрабатывать старые данные. Например, правило указывает, что аэропорт в старых данных должен быть установлен как «неизвестный», что представлено хеш-ключом 0 (упрощено). Полученная таблица используется для создания таблицы Business Vault, как обсуждается в Главе 14, «Загрузка размерной информационной модели», или измерения в информационной модели.</p>
<p><strong>Рисунок 4.20 Объединение исторических данных (верхний левый угол) с новыми данными (верхний правый угол) из отдельных связей Data Vault</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_20_Merging_historic_data_with_new_data_from.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1343 size-full" src="https://datatalks.ru/wp-content/uploads/2025/03/4_20_Merging_historic_data_with_new_data_from.jpeg" alt="" width="1142" height="639" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_20_Merging_historic_data_with_new_data_from.jpeg 1142w, https://datatalks.ru/wp-content/uploads/2025/03/4_20_Merging_historic_data_with_new_data_from-300x168.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_20_Merging_historic_data_with_new_data_from-1024x573.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/03/4_20_Merging_historic_data_with_new_data_from-768x430.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_20_Merging_historic_data_with_new_data_from-450x252.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_20_Merging_historic_data_with_new_data_from-780x436.jpeg 780w" sizes="(max-width: 1142px) 100vw, 1142px" /></a></p>
<p>Второй вариант также работает, когда необходимо удалить уровень гранулярности (ссылку на хаб) (Рисунок 4.21).</p>
<p><strong>Рисунок 4.21 Удаление исторических данных в связи Data Vault</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_21_Removing_historic_data_in_a_Data_Vault_link.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1348 size-full" src="https://datatalks.ru/wp-content/uploads/2025/03/4_21_Removing_historic_data_in_a_Data_Vault_link.jpeg" alt="" width="1142" height="337" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_21_Removing_historic_data_in_a_Data_Vault_link.jpeg 1142w, https://datatalks.ru/wp-content/uploads/2025/03/4_21_Removing_historic_data_in_a_Data_Vault_link-300x89.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_21_Removing_historic_data_in_a_Data_Vault_link-1024x302.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/03/4_21_Removing_historic_data_in_a_Data_Vault_link-768x227.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_21_Removing_historic_data_in_a_Data_Vault_link-450x133.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_21_Removing_historic_data_in_a_Data_Vault_link-780x230.jpeg 780w" sizes="(max-width: 1142px) 100vw, 1142px" /></a></p>
<p>Если мы просто удалим столбец «Самолет» из старой связи, мы потеряем данные из-за удаления ссылки из связи. Это худший случай для аудируемого хранилища данных. Снижение данных работает аналогично оператору GROUP BY без каких-либо мер.</p>
<p>Рисунок 4.22 показывает уменьшение уровня гранулярности. Обратите внимание на SELECT DISTINCT в SQL-запросе.</p>
<p><strong>Рисунок 4.22 Объединение исторических данных (верхний левый угол) с новыми данными (верхний правый угол) из отдельных связей Data Vault</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_22_Merging_historic_data_with_new_data_from.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1349" src="https://datatalks.ru/wp-content/uploads/2025/03/4_22_Merging_historic_data_with_new_data_from.jpeg" alt="" width="1149" height="662" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_22_Merging_historic_data_with_new_data_from.jpeg 1149w, https://datatalks.ru/wp-content/uploads/2025/03/4_22_Merging_historic_data_with_new_data_from-300x173.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_22_Merging_historic_data_with_new_data_from-1024x590.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/03/4_22_Merging_historic_data_with_new_data_from-768x442.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_22_Merging_historic_data_with_new_data_from-450x259.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_22_Merging_historic_data_with_new_data_from-780x449.jpeg 780w" sizes="(max-width: 1149px) 100vw, 1149px" /></a></p>
<h3><strong>Link Unit-of-Work (Единица работы связи)</strong></h3>
<p>Похожая проблема, связанная с гранулярностью связей, возникает при нарушении единицы работы связи. <strong><span style="color: #ff6600;">Единица работы</span> — это связанный набор данных, который сохраняет ключевые наборы вместе.</strong> Она обеспечивает выполнение запросов по данным связи позднее, устанавливая согласованность между поступающими данными и данными, хранящимися в связях Data Vault. В некоторых случаях моделировщики хранилищ данных пытаются разделить связь на несколько более мелких связей, чтобы нормализовать информацию связи для целей моделирования.</p>
<p>В Таблице 4.1 показан пример упрощенной таблицы исходной системы, которая станет основой для связи Data Vault.</p>
<p><strong>Таблица 4.1 Единица работы в исходной системе</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/table_4_1_Unit_of_Work_in_Source_System.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1350" src="https://datatalks.ru/wp-content/uploads/2025/03/table_4_1_Unit_of_Work_in_Source_System.jpeg" alt="" width="652" height="177" srcset="https://datatalks.ru/wp-content/uploads/2025/03/table_4_1_Unit_of_Work_in_Source_System.jpeg 652w, https://datatalks.ru/wp-content/uploads/2025/03/table_4_1_Unit_of_Work_in_Source_System-300x81.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/table_4_1_Unit_of_Work_in_Source_System-450x122.jpeg 450w" sizes="(max-width: 652px) 100vw, 652px" /></a></p>
<p>Данные в исходной таблице идентифицируют соединения между аэропортами, обслуживаемыми перевозчиками. Каждый перевозчик (в данном случае два перевозчика), идентифицированный номерами последовательности 222 и 729, обслуживает различные исходные аэропорты и соединяет их с аэропортами назначения. Если данные нормализуются, то следующие две таблицы (Таблица 4.2) будут результатом:</p>
<p><strong>Таблица 4.2 Нормализованная исходная система</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/table_4_2_Normalized_Source_System.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1351" src="https://datatalks.ru/wp-content/uploads/2025/03/table_4_2_Normalized_Source_System.jpeg" alt="" width="558" height="167" srcset="https://datatalks.ru/wp-content/uploads/2025/03/table_4_2_Normalized_Source_System.jpeg 558w, https://datatalks.ru/wp-content/uploads/2025/03/table_4_2_Normalized_Source_System-300x90.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/table_4_2_Normalized_Source_System-450x135.jpeg 450w" sizes="(max-width: 558px) 100vw, 558px" /></a></p>
<p>Для проверки правильности этой нормализации полезно проверить, можно ли восстановить данные исходной системы из этих данных. Таблица 4.3 будет создана после денормализации данных из предыдущих таблиц.</p>
<p><strong>Таблица 4.3 Денормализованная исходная система</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/table_4_3_Denormalized_Source_System.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1352" src="https://datatalks.ru/wp-content/uploads/2025/03/table_4_3_Denormalized_Source_System.jpeg" alt="" width="543" height="172" srcset="https://datatalks.ru/wp-content/uploads/2025/03/table_4_3_Denormalized_Source_System.jpeg 543w, https://datatalks.ru/wp-content/uploads/2025/03/table_4_3_Denormalized_Source_System-300x95.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/table_4_3_Denormalized_Source_System-450x143.jpeg 450w" sizes="(max-width: 543px) 100vw, 543px" /></a></p>
<p>При повторном объединении данных был создана запись, которой не существовало в исходной системе. Это произошло потому, что единица работы была нарушена при нормализации данных на предыдущем шаге, что сделало данные, захваченные двумя нормализованными таблицами, недействительными. В реляционном моделировании данных эта проблема также известна как зависимость от многозначных значений.</p>
<h3><strong>Структура сущности Link</strong></h3>
<p>Основная структура связи Data Vault состоит из хеш-ключей бизнес-ключей, хранящихся в ссылочных хабах. Кроме того, связь Data Vault имеет следующие обязательные метаданные:</p>
<ul>
<li>Хеш-ключ</li>
<li>Дата загрузки</li>
<li>Источник записи</li>
</ul>
<p>Также возможно использовать дополнительный атрибут:</p>
<ul>
<li>Дата последнего просмотра</li>
</ul>
<p>В дополнение к этим обязательным атрибутам, связь Data Vault может иметь следующий дополнительный атрибут:</p>
<ul>
<li>Ключ зависимого дочернего элемента</li>
</ul>
<h4><strong>Хеш-ключ (Hash Key)</strong></h4>
<p><strong>Подобно хабам в Data Vault, связь (Link) должна иметь хеш-ключ.</strong> Когда связь загружается данными из таблицы staging, задача ETL должна проверить, существует ли уже данное отношение или транзакция в таблице связи, поскольку не должно быть дублирующих записей связи, представляющих одно и то же отношение или транзакцию. Для этого задача ETL должна сравнить бизнес-ключи всех связанных бизнес-объектов. Поскольку реляционная база данных медленно сравнивает строки переменной длины (что является обычной характеристикой бизнес-ключей), производительность поиска часто бывает низкой. Проблема становится более серьезной, если бизнес-ключи не хранятся в связи Data Vault и должны быть соединены с ключами из ссылочных хабов, прежде чем их можно будет сравнивать. Хеш-ключ заменяет последующие соединения с ссылочными хабами при загрузке данных из staging-таблиц. Для выполнения соединений вычисляется хеш-код для комбинации всех бизнес-ключей в связи. Поскольку существует большая вероятность ошибок при вычислении хеш-кодов для бизнес-ключей, безопасный метод будет обсуждаться в Главе 11, «Извлечение данных».</p>
<p>Хеш-ключи также могут использоваться для соединения неструктурированных данных из внешних хранилищ данных, таких как распределенная файловая система Hadoop (которая использует хеш-ключи MD5 для идентификации данных).</p>
<h4><strong>Ключ зависимого дочернего объекта (Dependent Child Key)</strong></h4>
<p>Связь может иметь ключ зависимого дочернего элемента (например, номер строки), который используется в некоторых случаях, например, для представления транзакции счета в связи. Номер строки на счете — это последовательный индекс, который действителен только в пределах счета. Он не является уникальным сам по себе, но уникален только в сочетании с номером счета. Этот тип номера называется «дегенеративным полем» и влияет на гранулярность и уникальность набора данных в связи.</p>
<p>К дегенеративным полям (degenerate fields) применяются следующие правила:</p>
<ul>
<li>Они не могут существовать сами по себе (как хабы).</li>
<li>Они не имеют бизнес-значения.</li>
<li>Они «зависят» от другого контекста, чтобы быть действительными.</li>
<li>Они придают смысл и уникальность дополнительной информации об отношении.</li>
<li>У них нет собственных «описателей».</li>
</ul>
<p>Примеры дегенеративных полей включают:</p>
<ul>
<li>Номера строк в счетах</li>
<li>Стороны кассетной ленты (сторона A и сторона B)</li>
<li>Номер страницы в книге</li>
<li>Последовательный номер в кадре TCP</li>
<li>Временная метка сообщения электронной почты</li>
</ul>
<p>Примеры показывают, что де-генеративные поля не обязательно должны быть числовыми значениями. Они могут быть символами (как в случае с кассетной лентой) или датами (как в случае с временной меткой сообщения электронной почты). Однако с датами следует быть осторожным, поскольку не все даты (такие как начала/окончания, начало/конец и другие описательные даты) могут стать частью связи. Чаще всего эти описательные атрибуты бизнес-объектов становятся частью спутников.</p>
<p>Ключ зависимого дочернего элемента также используется как идентифицирующий элемент структуры связи, поэтому хеш-ключ выводится из бизнес-ключей ссылочных хабов и ключа зависимого дочернего элемента.</p>
<h3><strong>Примеры ссылок</strong></h3>
<p>Рисунок 4.23 представляет несколько примеров таблиц сущностей связи Data Vault.</p>
<p><strong>Рисунок 4.23 Примеры связей Data Vault (физический дизайн)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_23_Data_Vault_link_examples_physical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1354" src="https://datatalks.ru/wp-content/uploads/2025/03/4_23_Data_Vault_link_examples_physical_design.jpeg" alt="" width="953" height="703" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_23_Data_Vault_link_examples_physical_design.jpeg 953w, https://datatalks.ru/wp-content/uploads/2025/03/4_23_Data_Vault_link_examples_physical_design-300x221.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_23_Data_Vault_link_examples_physical_design-768x567.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_23_Data_Vault_link_examples_physical_design-450x332.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_23_Data_Vault_link_examples_physical_design-780x575.jpeg 780w" sizes="(max-width: 953px) 100vw, 953px" /></a></p>
<p>Первая связь, <code>LinkConnection</code>, соединяет в общей сложности четыре хаба: хабы аэропортов-перевозчиков, исходных аэропортов, аэропортов назначения и номер рейса. Обратите внимание, что хаб аэропорта был упомянут дважды: один раз через <code>SourceAirportHashKey</code> и второй раз через <code>DestinationAirportHashKey</code>. Кроме того, связь включает обязательные метаданные <code>LoadDate</code> и <code>RecordSource</code>.</p>
<p>Вторая связь ссылается только на два других хаба: <code>HubCarrier</code> и <code>HubAirport</code>.</p>
<h2><strong>Определение спутника</strong></h2>
<p>Спутники хранят все данные, которые описывают бизнес-объект, отношение или транзакцию. Они добавляют контекст на определенный момент времени или на период времени к хабам и связям.</p>
<p>Однако этот контекст часто изменяется в бизнесе, и, следовательно, описательные данные в спутнике также изменяются со временем. Цель спутника — отслеживать эти изменения.</p>
<p>Спутник прикрепляется только к одному хабу или связи. Поэтому он идентифицируется хеш-ключом родительского элемента и временной меткой изменения (Рисунок 4.24):</p>
<p><strong>Рисунок 4.24 Сущность спутника Data Vault (физический дизайн)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_24_Data_Vault_satellite_entity_physical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1355" src="https://datatalks.ru/wp-content/uploads/2025/03/4_24_Data_Vault_satellite_entity_physical_design.jpeg" alt="" width="270" height="441" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_24_Data_Vault_satellite_entity_physical_design.jpeg 270w, https://datatalks.ru/wp-content/uploads/2025/03/4_24_Data_Vault_satellite_entity_physical_design-184x300.jpeg 184w" sizes="(max-width: 270px) 100vw, 270px" /></a></p>
<p>В дополнение к стандартным метаданным, спутник хранит атрибуты, которые описывают контекст бизнес-объекта или отношения. Для достижения этой цели атрибуты захватывают неидентифицирующие бизнес-элементы бизнес-объектов или отношений. Эти элементы часто известны в исходной системе как описания, записи в свободной форме или вычисляемые элементы.</p>
<p>Примеры описательных данных включают:</p>
<ul>
<li>Внешний цвет автомобиля</li>
<li>Имя и фамилия человека (например, клиента или сотрудника)</li>
<li>Адрес доставки заказа</li>
<li>Количество свободных мест в самолете</li>
<li>Название бизнеса авиаперевозчика</li>
<li>Описания продуктов в каталоге товаров</li>
<li>Дата начала и окончания аренды автомобиля</li>
</ul>
<p>Последний пример показывает, что дата окончания отношения (в данном случае: дата окончания аренды автомобиля) захватывается спутником. В Data Vault нет другого концепта окончания связи. Как и в других типах сущностей Data Vault, метаданные идут первыми в порядке столбцов. Описательные атрибуты располагаются в конце спутника. Поскольку одной из основных задач Data Vault является захват данных из исходных систем, описательные атрибуты должны использовать типы данных, максимально приближенные к типам данных исходных систем с технической точки зрения. Это включает в себя значения NULL.</p>
<p>Не все атрибуты бизнес-объекта, отношения или транзакции хранятся в одном спутнике. Вместо этого атрибуты организуются по бизнес-классификации или типу данных и хранятся в отдельных спутниках по категориям. Распространенной практикой является хранение всех атрибутов из одной исходной системы в одном спутнике, но разделение их по частоте изменений.</p>
<p>Мы будем использовать логический символ, показанный на Рисунке 4.25, для рисования спутников в этой книге.</p>
<p><strong>Рисунок 4.25 Спутник Data Vault (логический символ)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_25_Data_Vault_satellite_logical_symbol.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1357" src="https://datatalks.ru/wp-content/uploads/2025/03/4_25_Data_Vault_satellite_logical_symbol.jpeg" alt="" width="462" height="151" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_25_Data_Vault_satellite_logical_symbol.jpeg 462w, https://datatalks.ru/wp-content/uploads/2025/03/4_25_Data_Vault_satellite_logical_symbol-300x98.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_25_Data_Vault_satellite_logical_symbol-450x147.jpeg 450w" sizes="(max-width: 462px) 100vw, 462px" /></a></p>
<p>Обратите внимание, что спутники никогда не зависят от более чем одной родительской таблицы (то есть, они никогда не зависят от более чем одного хаба или одного спутника). Они также не могут быть родителями для других таблиц (без снежинки). По этой причине они не вводят собственные хеш-ключи.</p>
<h3><strong>Важность сохранения истории</strong></h3>
<p>Предоставление исторического представления данных — одна из функций, которые выполняет хранилище данных в бизнесе. Data Vault использует свои спутники для хранения каждого изменения исходных данных. Однако возможно изменить, изменить или переработать структуру спутника. При этом необходимо удостовериться, что 100% исторических данных, хранящихся в изменяемом спутнике, будут сохранены. В противном случае ваше хранилище данных потеряет свою аудируемость и не пройдет аудит.</p>
<p>Из-за архитектуры Data Vault хранилище данных становится единственным местом, где хранятся исторические данные. В области staging хранилища данных нет исторических данных. Данные в информационном марте могут изменяться в зависимости от бизнес-требований. Единственное место, где данные остаются неизменными, — это хранилище данных. Поэтому важно понимать, что хранилище данных является системой учета. Бизнес-пользователи могут иметь другое мнение о системе учета, но: Data Vault становится системой учета, когда операционные системы выводятся из эксплуатации, изменяются или перерабатываются. В таком случае спутники Data Vault могут быть закрыты, но данные все равно остаются в аудируемом формате исходных данных.</p>
<p>Поскольку необходимо сохранять историю данных, обновлять или изменять данные в спутнике запрещается. Единственное исключение из этого правила — атрибут Load End Date предыдущей версии данных. Глава 12, «Загрузка Data Vault», показывает, как изменить этот атрибут. Кроме того, в спутник добавляются только те исходные записи, в которых произошло хотя бы одно изменение. Следовательно, спутник является дельта-ориентированным, что сравнимо с измерением типа II в моделировании размерностей.</p>
<h3><strong>Разделение спутников (Splitting Satellites)</strong></h3>
<p>Наша цель не заключается в том, чтобы рекомендовать хранить всю описательную информацию о бизнес-объекте в атрибутах одного спутника. Вместо этого рекомендуется распределить данные между различными спутниками. Рекомендуется сначала разделить исходные данные по системе источника, а затем по скорости изменений.</p>
<h4><strong>Разделение по исходной системе (Splitting by Source System)</strong></h4>
<p>Рекомендуемая практика — разделять входящие данные сначала по системе источника. Это означает, что каждый входящий набор данных сохраняется в отдельных спутниках, которые, в свою очередь, зависят от их родителя (либо хаба, либо ссылки). Таким образом, исходные данные из денормализованного набора данных источника будут распределяться по различным спутникам, чтобы сохраняться в зависимости от соответствующего бизнес-объекта, отношения или транзакции.</p>
<p>Преимущества такой практики следующие:</p>
<ul>
<li>Она позволяет дизайнеру добавлять новые источники данных, не изменяя существующие сущности спутников.</li>
<li>Убирает необходимость изменять входящие данные так, чтобы они соответствовали существующим структурам (например, путем преобразования данных в другой тип данных или разбиения, объединения, изменения длины, сокращения или другого манипулирования входящими данными).</li>
<li>Она позволяет модели Data Vault сохранять историю системы источника и, следовательно, сохранять аудит для системы. Рассмотрим спутник, который хранит данные из нескольких систем: изменение в одной системе создаст новую запись в спутнике. Из количества строк не будет сразу понятно, какая система вызвала изменение.</li>
<li>Она максимизирует параллелизм загрузки, поскольку нет конкуренции (на уровне ввода/вывода или базы данных) за целевой ресурс (спутник). Данные могут быть вставлены в спутник немедленно, не учитывая поступление данных из других систем, которые могут также пытаться вставить свои данные сразу.</li>
<li>Позволяет интегрировать данные в реальном времени без необходимости интегрировать их с исходными данными, загруженными из пакетов. Нет зависимостей между несколькими системами, которые могли бы заставить систему иметь оба типа данных (в реальном времени и из пакетов) готовыми одновременно.</li>
</ul>
<p>Даже когда спутники разделены по системе источника, атрибут Record Source все равно требуется. Атрибут Record Source может использоваться для идентификации источника данных по географическому положению или приложению. Например, источник может быть системой SAP, которая распределена по более чем одной физической машине. В зависимости от требований хранилища данных мы отслеживаем отдельную физическую машину в атрибуте Record Source.</p>
<h4><strong>Разделение по скорости изменений (Splitting by Rate of Change)</strong></h4>
<p>После того как данные разделены по системе источника, также является хорошей практикой разделить данные по скорости изменений. Рассмотрим спутник, который хранит информацию о самолете. Некоторые атрибуты меняются не так часто: например, количество доступных мест, оборудование, максимальный возможный груз и т.д. Некоторые атрибуты могут изменяться чаще, например, общее количество пролетенных миль (Рисунок 4.26).</p>
<p><strong>Рисунок 4.26 Спутник до обновления пролетенных миль</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_26_Satellite_before_update_of_flown_miles.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1358" src="https://datatalks.ru/wp-content/uploads/2025/03/4_26_Satellite_before_update_of_flown_miles.jpeg" alt="" width="1141" height="138" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_26_Satellite_before_update_of_flown_miles.jpeg 1141w, https://datatalks.ru/wp-content/uploads/2025/03/4_26_Satellite_before_update_of_flown_miles-300x36.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_26_Satellite_before_update_of_flown_miles-1024x124.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/03/4_26_Satellite_before_update_of_flown_miles-768x93.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_26_Satellite_before_update_of_flown_miles-450x54.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_26_Satellite_before_update_of_flown_miles-780x94.jpeg 780w" sizes="(max-width: 1141px) 100vw, 1141px" /></a></p>
<p>Поскольку последний атрибут изменяется каждый раз, когда самолет выполняет полет, это создаст новую запись в спутнике для отслеживания изменения. Для этого необходимо отслеживать текущее состояние других атрибутов. Но поскольку они не изменились, они просто занимают место в новой записи (Рисунок 4.27).</p>
<p><strong>Рисунок 4.27 Спутник после обновления пролетенных миль</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_27_Satellite_after_update_of_flown_miles.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1359" src="https://datatalks.ru/wp-content/uploads/2025/03/4_27_Satellite_after_update_of_flown_miles.jpeg" alt="" width="1142" height="203" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_27_Satellite_after_update_of_flown_miles.jpeg 1142w, https://datatalks.ru/wp-content/uploads/2025/03/4_27_Satellite_after_update_of_flown_miles-300x53.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_27_Satellite_after_update_of_flown_miles-1024x182.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/03/4_27_Satellite_after_update_of_flown_miles-768x137.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_27_Satellite_after_update_of_flown_miles-450x80.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_27_Satellite_after_update_of_flown_miles-780x139.jpeg 780w" sizes="(max-width: 1142px) 100vw, 1142px" /></a></p>
<p>Чтобы решить эту проблему, лучшим подходом будет разделение данных. Те атрибуты, которые изменяются часто, хранятся в одном спутнике, а те атрибуты, которые изменяются реже, — в другом. Если существует более двух частот изменений, должно быть больше спутников (например, один спутник для неизменяющихся атрибутов, один спутник для атрибутов, которые изменяются ежемесячно, один спутник для атрибутов, которые изменяются ежедневно и т.д.).<br />
В книге мы будем использовать оба этих подхода при загрузке данных в спутники Data Vault.</p>
<h4><strong>Структура сущности спутника</strong></h4>
<p>Кроме атрибутов, которые хранят описательные данные в спутнике, требуются следующие метаданные:</p>
<ul>
<li>Дата загрузки</li>
<li>Источник записи</li>
</ul>
<p>Кроме того, в сущностях спутников Data Vault требуются следующие атрибуты:</p>
<ul>
<li>Хеш-ключ родителя</li>
<li>Дата окончания загрузки</li>
</ul>
<p>Следующие атрибуты являются необязательными для спутников Data Vault:</p>
<ul>
<li>Дата извлечения</li>
<li>Хеш-дифференциал</li>
</ul>
<h4><strong>Родительский хеш-ключ (Parent Hash Key)</strong></h4>
<p>Обязательный хеш-ключ родителя является частью первичного ключа, который идентифицирует строку в спутнике. Другой частью идентификации является дата загрузки; вместе они предоставляют контекст и дату/время изменения. Хеш-ключ родителя ссылается на первичный ключ хаба или ссылки родительского бизнес-объекта (того, к которому хаб или ссылка добавляют контекст).</p>
<p>Как уже упоминалось, каждая сущность спутника должна зависеть только от одного хаба или спутника. Невозможно создать спутник, который зависит от более чем одного хаба или ссылки.<br />
Для каждого хаба или ключа ссылки должно быть как минимум одно соответствующее записанное значение в спутнике. В противном случае вам придется использовать внешние соединения, которых следует избегать по причинам производительности и сложности.</p>
<h4><strong>Дата загрузки (Load Date)</strong></h4>
<p>Обязательная дата загрузки является второй частью первичного ключа спутника. Она указывает на дату и время изменения, зафиксированного в записи спутника. Обратите внимание, что это время, когда хранилище данных впервые увидело запись. Это не временная метка, предоставляемая системой источника. Такая временная метка будет добавлена как обычный атрибут спутника, описывающий данные. Причина этого заключается в том, что временные метки из систем источников часто ненадежны или поступают из другого (или неопределенного) часового пояса, который не контролируется хранилищем данных. Поэтому эта информация захватывается как описательные данные.</p>
<p>Существует исключение из этого правила: при загрузке исторических данных, например, при первоначальной загрузке хранилища данных, дату загрузки необходимо установить искусственно, чтобы зафиксировать исторические загрузки. Проблема заключается в том, что дата загрузки используется моделью Data Vault для идентификации изменений в системе источника. Если бы исторические данные загружались с датой загрузки, установленной на фактическую дату и время начальной загрузки, все изменения, произошедшие в истории, перекрывали бы друг друга в тот же день (день начальной загрузки) и не могли бы быть зафиксированы в Data Vault. Чтобы зафиксировать изменения, как если бы они происходили в прошлом, мы предполагаем, что данные были загружены в прошлом, и устанавливаем дату загрузки на дату извлечения данных из системы источника.</p>
<p>Подобная проблема возникает, когда системы источников предоставляют несколько изменений описательной информации о бизнес-ключе (в хабе), отношении или транзакции (обе эти сущности фиксируются в ссылке): в этом случае предоставляется мини-дельта, которая фиксирует изменения, как они произошли в операционной системе. Для захвата таких источников используются последовательные номера, аналогичные многоактивным спутникам, которые рассматриваются в главе 5, «Моделирование промежуточных данных Data Vault 2.0».</p>
<h4><strong>Дата окончания загрузки (Load End Date)</strong></h4>
<p>Обязательная дата окончания загрузки указывает на дату и время, когда запись в спутнике становится недействительной. Это единственный атрибут, который обновляется в спутнике. Обновление происходит каждый раз, когда загружается новая запись из системы источника. В то время как новая запись имеет текущую дату загрузки, последняя запись спутника, которая была действительной до загрузки новой записи, обновляется, чтобы отразить новую дату окончания загрузки, которая является датой загрузки новой записи. Дата окончания загрузки требуется для достижения необходимой физической производительности при извлечении данных из Data Vault, как показано в главе 14, «Загрузка информационного хранилища измерений». С точки зрения логического моделирования эта дата не является обязательной.</p>
<h4><strong>Хеш-разница (Hash Difference)</strong></h4>
<p>Необязательный атрибут хеш-разницы аналогичен хеш-ключу в связи (link) Data Vault. Это хеш-значение всех описательных данных записи спутника.</p>
<p>Наличие этого хеш-значения помогает быстро и эффективно сравнивать значения строк. Хеш-разница позволяет быстро выявлять различия в описательных атрибутах и добавлять новые записи спутника только в случае изменения данных в спутнике.</p>
<p>Некоторые описательные атрибуты можно исключить из вычисления хеш-значения для атрибута хеш-разницы. Это необходимо, если некоторые изменения в исходной системе должны игнорироваться Data Vault.</p>
<p>Примечание: В моделях Data Vault сокращение для хеш-разницы часто обозначается как hdiff или hash diff.</p>
<p>Глава 11, «Извлечение данных», показывает, как вычислять атрибут хеш-разницы при его использовании в загрузках спутников.</p>
<h4><strong>Дата извлечения (Extract Date)</strong></h4>
<p>Необязательный атрибут даты извлечения фиксирует дату и время, когда данные были извлечены из исходной системы. Он помогает понимать процессы исторической загрузки и наиболее полезен, если данные предоставляются в виде плоских файлов и загружаются из различных источников по всему миру.</p>
<p>При использовании прямого доступа через SQL дата извлечения часто недоступна. Однако ETL-процессы обычно ведут журнал своей активности, включая дату и время извлечения данных из исходных систем. Таким образом, дата извлечения доступна как метаданные в процессных логах ETL-инструмента и не требует включения в Data Vault.</p>
<p>Поскольку дата извлечения зависит от исходной системы, она рассматривается как ненадежная временная метка. Данные могут быть извлечены из исходной системы, в которой часы или часовой пояс системы настроены некорректно. В других случаях данные извлекаются с другого сервера (не из исходной системы) с часовым поясом, отличным от часового пояса исходной системы или хранилища данных, при этом эта информация не добавляется во временную метку. В любом из этих случаев дата извлечения является лишь справочными данными и становится описательным атрибутом в спутнике Data Vault.</p>
<p>Существует множество других «дат» и «времени», присутствующих в исходных данных, например, даты создания, плановые даты, фактические даты и так далее. Все эти даты должны храниться как описательные атрибуты в таблицах спутников. Однако они никогда не должны использоваться для заполнения значений даты загрузки или даты окончания загрузки.</p>
<h3><strong>Примеры спутников</strong></h3>
<p>Рисунок 4.28 представляет несколько примеров спутников Data Vault.</p>
<p><strong>Рисунок 4.28 Примеры спутников Data Vault (физическое проектирование)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_28_Data_Vault_satellite_examples_physical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1360" src="https://datatalks.ru/wp-content/uploads/2025/03/4_28_Data_Vault_satellite_examples_physical_design.jpeg" alt="" width="795" height="711" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_28_Data_Vault_satellite_examples_physical_design.jpeg 795w, https://datatalks.ru/wp-content/uploads/2025/03/4_28_Data_Vault_satellite_examples_physical_design-300x268.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_28_Data_Vault_satellite_examples_physical_design-768x687.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_28_Data_Vault_satellite_examples_physical_design-450x402.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_28_Data_Vault_satellite_examples_physical_design-780x698.jpeg 780w" sizes="(max-width: 795px) 100vw, 795px" /></a></p>
<p>Первый пример, SatAirport, зависит от HubAirport через AirportSeq. Идентифицирующий основной ключ представляет собой комбинацию AirportSeq и LoadDate (дата и время, когда эта запись была впервые увидена хранилищем данных). Кроме того, спутник использует атрибуты метаданных LoadEndDate и RecordSource. Для ускорения поиска изменений в строках спутник также использует необязательный атрибут HashDiff. Остальная часть спутника состоит из описательных атрибутов из системы источника.<br />
SatAirportTZ был выделен из SatAirport, потому что он хранит атрибут, который меняется чаще, чем описательные атрибуты в SatAirport. В то время как эти атрибуты меняются очень редко (менее одного раза за десять лет), GMT-смещение локации меняется дважды в год (когда регион аэропорта переходит на летнее время). Если бы атрибут GMTOffset хранился в SatAirport, все описательные атрибуты были бы скопированы в новую строку, даже если изменения касаются только этого атрибута, а не всей описательной информации.<br />
Последний спутник — это спутник на ссылке Data Vault, LinkConnection. Он хранит все описательные данные о соединении. Поскольку информация предоставляется в виде дельта-загрузок (система источника предоставляет только новую информацию о соединениях), нет необходимости искать, какие данные уже существуют, и, следовательно, нет необходимости в атрибуте HashDiff.</p>
<h3><strong>Ведущий ключ связи (Link Driving Key)</strong></h3>
<p>Пример SatConnection на рисунке 4.28 зависит от связи (link), как описано ранее. Модель на рисунке 4.29 показывает эту взаимосвязь.</p>
<p><strong>Рисунок 4.29 Связь, привязанная к четырем концентраторам (логический дизайн)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_29_Link_attached_to_four_hubs_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1361" src="https://datatalks.ru/wp-content/uploads/2025/03/4_29_Link_attached_to_four_hubs_logical_design.jpeg" alt="" width="797" height="343" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_29_Link_attached_to_four_hubs_logical_design.jpeg 797w, https://datatalks.ru/wp-content/uploads/2025/03/4_29_Link_attached_to_four_hubs_logical_design-300x129.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_29_Link_attached_to_four_hubs_logical_design-768x331.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_29_Link_attached_to_four_hubs_logical_design-450x194.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_29_Link_attached_to_four_hubs_logical_design-780x336.jpeg 780w" sizes="(max-width: 797px) 100vw, 797px" /></a></p>
<p>Спутник SatConnection связан с LinkConnection. Сама связь зависит от четырех концентраторов, которые также показаны на рисунке 4.29. Если добавляется новая запись связи, появится одна или несколько записей спутника, описывающих контекст связи.</p>
<p>Таблица 4.4 показывает две записи, описывающие одно и то же соединение. Очевидно, что описательная информация была обновлена в исходной системе и зафиксирована как изменение спутником. Обе записи ссылаются на одно и то же соединение, используя одинаковый Connection Hash Key. Атрибут Load Date указывает, когда данные были загружены из исходной системы.</p>
<p>Однако связь на рисунке 4.29 не полностью отражает реальность данных, представленных в таблице 4.4. На самом деле ключ связи состоит из двух частей. Первая часть идентифицирует перевозчика и обслуживаемое соединение, то есть аэропорт отправления и аэропорт-концентратор. Вторая часть ключа — это номер рейса. В реальности перевозчик может изменить номер рейса, выполняющего соединение, но само соединение остается неизменным.</p>
<p>Соединение идентифицируется тремя ссылками на концентраторы, которые выделены жирными стрелками на рисунке 4.30 (модифицированная версия рисунка 4.29).</p>
<p><strong>Таблица 4.4 Данные спутника в SatConnection</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/table_4_4_Satellite_Data_in_SatConnection.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1362" src="https://datatalks.ru/wp-content/uploads/2025/03/table_4_4_Satellite_Data_in_SatConnection.jpeg" alt="" width="735" height="163" srcset="https://datatalks.ru/wp-content/uploads/2025/03/table_4_4_Satellite_Data_in_SatConnection.jpeg 735w, https://datatalks.ru/wp-content/uploads/2025/03/table_4_4_Satellite_Data_in_SatConnection-300x67.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/table_4_4_Satellite_Data_in_SatConnection-450x100.jpeg 450w" sizes="(max-width: 735px) 100vw, 735px" /></a></p>
<p><strong>Рисунок 4.30 Связь с ведущим ключом (логический дизайн)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/4_30_Link_with_driving_key_logical_design.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1363" src="https://datatalks.ru/wp-content/uploads/2025/03/4_30_Link_with_driving_key_logical_design.jpeg" alt="" width="798" height="343" srcset="https://datatalks.ru/wp-content/uploads/2025/03/4_30_Link_with_driving_key_logical_design.jpeg 798w, https://datatalks.ru/wp-content/uploads/2025/03/4_30_Link_with_driving_key_logical_design-300x129.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/4_30_Link_with_driving_key_logical_design-768x330.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/03/4_30_Link_with_driving_key_logical_design-450x193.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/03/4_30_Link_with_driving_key_logical_design-780x335.jpeg 780w" sizes="(max-width: 798px) 100vw, 798px" /></a></p>
<p>Такой набор ссылок на концентраторы называется ведущим ключом (driving key) в моделировании Data Vault 2.0. Часто его также называют первичным ключом исходной структуры.</p>
<p>Таблица 4.5 показывает данные внутри структуры связи.</p>
<p><strong>Таблица 4.5 LinkConnection с заполненными данными</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/table_4_5_LinkConnection_with_Populated_Data.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1364" src="https://datatalks.ru/wp-content/uploads/2025/03/table_4_5_LinkConnection_with_Populated_Data.jpeg" alt="" width="733" height="203" srcset="https://datatalks.ru/wp-content/uploads/2025/03/table_4_5_LinkConnection_with_Populated_Data.jpeg 733w, https://datatalks.ru/wp-content/uploads/2025/03/table_4_5_LinkConnection_with_Populated_Data-300x83.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/table_4_5_LinkConnection_with_Populated_Data-450x125.jpeg 450w" sizes="(max-width: 733px) 100vw, 733px" /></a></p>
<p>Заполненные данные в LinkConnection показывают, что United Airlines изменила код рейса с UA4711 на UA123 для соединения Денвер (DEN) – Нью-Йорк (JFK).</p>
<p>Поскольку хеш-ключ вычисляется на основе всех родительских бизнес-ключей, каждая запись связи имеет разный идентифицирующий хеш-ключ.</p>
<p>С точки зрения моделирования ведущий ключ (driving key) не является видимым. Это логическая конструкция, которая должна быть реализована в процедурах загрузки, особенно при загрузке данных спутника. Если в связи изменяется ключ, который не является частью ведущего ключа, это приводит к созданию новой записи спутника, описывающей измененный контекст ведущего ключа (Таблица 4.6).</p>
<p><strong>Таблица 4.6 Данные спутника в SatConnection с ведущим ключом</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/03/table_4_6_Satellite_Data_in_SatConnection_with_Driving_Key.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1365" src="https://datatalks.ru/wp-content/uploads/2025/03/table_4_6_Satellite_Data_in_SatConnection_with_Driving_Key.jpeg" alt="" width="731" height="162" srcset="https://datatalks.ru/wp-content/uploads/2025/03/table_4_6_Satellite_Data_in_SatConnection_with_Driving_Key.jpeg 731w, https://datatalks.ru/wp-content/uploads/2025/03/table_4_6_Satellite_Data_in_SatConnection_with_Driving_Key-300x66.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/03/table_4_6_Satellite_Data_in_SatConnection_with_Driving_Key-450x100.jpeg 450w" sizes="(max-width: 731px) 100vw, 731px" /></a></p>
<p>Ведущий ключ связывает разные хеш-ключи между собой, как показано в связи в Таблице 4.5.</p>
<p>Без концепции ведущего ключа записи концентраторов были бы полностью независимыми друг от друга. Спутниковые записи зависели бы от этих независимых записей связи, не имея между собой никакой связи.</p>
<p>Используя ведущий ключ, спутниковые записи получают взаимосвязь, а записи связи в LinkConnection объединяются. Определение связанных записей связи выполняется с использованием информации о ведущем ключе.</p>
<p>Результатом этой взаимосвязи является то, что первая запись для connection hash key 28db… получает дату окончания, установленную как дата загрузки следующей записи (минус одна секунда или меньше).</p>
<p>Сообщение <a href="https://datatalks.ru/chapter-4-data-vault-2-0-modeling/">Перевод 4 Главы &#8212; Моделирование Data Vault 2.0 &#8212; Что такое Hub / Link / Satellite?</a> появились сначала на <a href="https://datatalks.ru">DataTalks.RU. Data Engineering / DWH / Data Pipeline</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datatalks.ru/chapter-4-data-vault-2-0-modeling/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Перевод 3 Главы &#8212; Методология Data Vault 2.0</title>
		<link>https://datatalks.ru/chapter-3-data-vault-2-0-methodology/</link>
					<comments>https://datatalks.ru/chapter-3-data-vault-2-0-methodology/#comments</comments>
		
		<dc:creator><![CDATA[Data Engineer (Admin)]]></dc:creator>
		<pubDate>Sat, 01 Mar 2025 07:00:00 +0000</pubDate>
				<category><![CDATA[Data Vault 2.0]]></category>
		<category><![CDATA[Методология Data Vault 2.0]]></category>
		<guid isPermaLink="false">https://datatalks.ru/?p=1107</guid>

					<description><![CDATA[<p>Перевод книги &#171;Building a Scalable Data Warehouse with Data Vault 2.0&#187; подготовлен автором сайта ГЛАВА 3 – Методология Data Vault 2.0 Аннотация Методология Data Vault 2.0 представляет собой уникальный подход к разработке хранилищ данных и основана на нескольких гибких методологиях и техниках построения хранилищ данных, включая CMMI, Six Sigma, TQM, SDLC и анализ функциональных точек [&#8230;]</p>
<p>Сообщение <a href="https://datatalks.ru/chapter-3-data-vault-2-0-methodology/">Перевод 3 Главы &#8212; Методология Data Vault 2.0</a> появились сначала на <a href="https://datatalks.ru">DataTalks.RU. Data Engineering / DWH / Data Pipeline</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>Перевод книги &#171;Building a Scalable Data Warehouse with Data Vault 2.0&#187; подготовлен автором сайта</em></p>
<h1>ГЛАВА 3 – Методология Data Vault 2.0</h1>
<h2>Аннотация</h2>
<p><strong>Методология Data Vault 2.0</strong> представляет собой уникальный подход к разработке хранилищ данных и основана на нескольких гибких методологиях и техниках построения хранилищ данных, включая CMMI, Six Sigma, TQM, SDLC и анализ функциональных точек (Function Point Analysis). В этой главе рассматриваются основы этих стандартов и объясняется, как методология Data Vault 2.0 объединяет их.</p>
<p><span style="color: #ff6600;"><strong>Основное внимание в главе уделяется практическим аспектам ведения проектов в рамках методологии Data Vault 2.0.</strong></span></p>
<p><strong>Ключевые слова</strong></p>
<ul>
<li>данные</li>
<li>CMMI</li>
<li>Six Sigma</li>
<li>TQM</li>
<li>SDLC</li>
<li>анализ функциональных точек</li>
<li>методология</li>
</ul>
<p><strong>Стандарт Data Vault 2.0</strong> представляет собой наилучшую практику управления проектами, называемую «методология Data Vault 2.0». Она основана на ключевых стандартах разработки программного обеспечения и адаптирует их для использования в области хранилищ данных. На Рисунке 3.1 показаны стандарты, которые повлияли на формирование методологии Data Vault 2.0.</p>
<p><strong>Рисунок 3.1 Компоненты методологии Data Vault 2.0</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_1_Components_of_the_Data_Vault_2_0_methodology.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1224" src="https://datatalks.ru/wp-content/uploads/2025/02/3_1_Components_of_the_Data_Vault_2_0_methodology.jpeg" alt="" width="1074" height="649" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_1_Components_of_the_Data_Vault_2_0_methodology.jpeg 1074w, https://datatalks.ru/wp-content/uploads/2025/02/3_1_Components_of_the_Data_Vault_2_0_methodology-300x181.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_1_Components_of_the_Data_Vault_2_0_methodology-1024x619.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/02/3_1_Components_of_the_Data_Vault_2_0_methodology-768x464.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_1_Components_of_the_Data_Vault_2_0_methodology-450x272.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_1_Components_of_the_Data_Vault_2_0_methodology-780x471.jpeg 780w" sizes="(max-width: 1074px) 100vw, 1074px" /></a></p>
<p>Объединяя эти стандарты, методология Data Vault 2.0 становится одной из лучших практик управления проектами в сфере хранилищ данных. Для координации работы команды и выполнения повседневных задач проекта применяется <strong>Scrum</strong>. В рамках двух- или трехнедельного спринта команда использует мини-водопад, основанный на жизненном цикле разработки программного обеспечения (<strong>SDLC</strong>). Целью такого подхода является завершение всех необходимых поставляемых компонентов по итогам итерации, чтобы они могли быть внедрены в промышленную эксплуатацию.</p>
<p><strong>Методы управления проектами из PMI Project Management Body of Knowledge (PMBOK)</strong>, признанные в сертификации Project Management Professional (PMP), используются для определения и выполнения проектного плана на физическом уровне проекта.</p>
<p><strong>Capability Maturity Model Integration (CMMI)</strong> применяется для общего управления и контроля проекта, а также используется при проведении обзоров и сессий по улучшению процессов.</p>
<p><strong>Всеобщее управление качеством (TQM)</strong> реализуется в рамках замкнутого цикла, обеспечивая непрерывное улучшение как самого процесса, так и обрабатываемых данных. Когда бизнес-пользователи участвуют в согласовании наборов данных из разных источников и исправлении ошибок в системах-источниках, они следуют принципам TQM. В разделе 3.3.2 мы обсудим, почему такой подход требует большего числа мероприятий по сравнению с традиционными <strong>методами управления качеством данных (DQ)</strong>.</p>
<p><strong>Принципы и правила Six Sigma</strong> применяются для достижения максимальной оптимизации и гибкости в процессе построения и внедрения хранилищ данных в стиле Data Vault 2.0. Этот процесс основан на метриках (сравнение оценок с фактическими значениями) и ключевых показателях эффективности (KPI), которые рассматриваются в разделе 3.1.4.</p>
<p><strong>Методология Data Vault 2.0</strong> состоит из трех основных видов деятельности, в рамках которых применяются методы, представленные на Рисунке 3.1:</p>
<ul>
<li>Планирование проекта, включающее управление, определение и оценку проекта.</li>
<li>Исполнение проекта, включающее определение спринтов, организацию команды и техническую нумерацию для упорядочивания артефактов.</li>
<li>Обзор и улучшение, включающее мероприятия по обзору и совершенствованию.</li>
</ul>
<p>Оставшиеся разделы этой главы подробно описывают эти виды деятельности и применение соответствующих методов.</p>
<h2>Планирование проекта</h2>
<p>Поскольку хранилище данных является программным продуктом, многие академические исследователи и специалисты отрасли сходятся во мнении, что методологии из области инженерии программного обеспечения могут применяться к проектам построения хранилищ данных. Мы уже рассмотрели некоторые известные методологии планирования проектов.</p>
<p><strong>Методология Data Vault 2.0</strong> заимствует свои возможности по планированию проектов из PMP. В отличие от гибкой методологии Scrum, в Data Vault 2.0 делается акцент на наличие формального плана проекта в рамках спринта. Каждый проект имеет проектный план, который включает:</p>
<ul>
<li>задачи, которые необходимо выполнить,</li>
<li>ожидаемые результаты выполнения задач,</li>
<li>роли, ответственные за выполнение задач.</li>
</ul>
<p>В зависимости от типа проекта роли могут различаться. Ниже приведен список ролей и их обязанностей:</p>
<ul>
<li><strong>Бизнес-спонсор (Business Sponsor):</strong> Бизнес-спонсоры должны обеспечивать соответствие проекта бизнес-целям и культурным целям организации; представлять проект, особенно перед высшим руководством; быть его ключевыми защитниками и привлекать к нему внимание других ключевых заинтересованных сторон; организовывать ресурсы для обеспечения успешности проекта; способствовать решению проблем, обеспечивая их эскалацию на уровень организации для эффективного устранения; поддерживать руководителя проекта, оказывая менторскую, коучинговую и лидерскую поддержку; а также создавать устойчивость результатов проекта, чтобы обеспечить их долгосрочную применимость.</li>
<li><strong>Технический бизнес-аналитик (Technical Business Analyst):</strong> Технические бизнес-аналитики устанавливают стандарты и списки управления доступом; приоритизируют запросы на изменения; определяют новые требования; создают новые отчеты для широкой аудитории бизнес-пользователей; помогают команде в отладке альфа-версий; участвуют в разработке и проектировании информационных витрин; а также создают учебные материалы для пользователей. Технический бизнес-аналитик является продвинутым пользователем, который подчиняется бизнесу, но обладает техническими навыками, включая понимание моделей данных и способность использовать или писать SQL напрямую.</li>
<li><strong>Руководитель проекта (Project Manager):</strong> Эта роль отвечает за то, чтобы команда проекта завершила выполнение проекта. Руководитель проекта разрабатывает план проекта, управляет выполнением проектных задач командой и обеспечивает принятие и одобрение результатов проекта со стороны спонсора и других заинтересованных сторон. Кроме того, данная роль отвечает за коммуникацию, включая отчеты о статусе, управление рисками и эскалацию проблем, которые не могут быть решены внутри команды проекта.</li>
<li><strong>ИТ-менеджер (IT Manager):</strong> Менеджеры информационных технологий (IT) обеспечивают непрерывность бизнеса и его успешность. По этой причине они курируют проекты и следят за эффективным использованием ресурсов. IT-менеджеры объективно консультируют руководство по вопросам того, где IT может принести пользу бизнесу; согласовывают затраты, сроки и стандарты, которым необходимо соответствовать, а также контролируют их выполнение в ходе проекта; помогают организации плавно переходить от устаревших систем к новым; и держат руководство в курсе хода текущих проектов.</li>
<li><strong>ETL-разработчик (ETL Developer):</strong> Участники команды, назначенные на роль Extract, Transform, Load (ETL), реализуют процессы загрузки данных и управления потоками данных, включая загрузку данных из систем-источников в промежуточное хранилище (staging), из промежуточного хранилища в структуры Data Vault, а затем в Business Vault и информационные витрины. Они также отвечают за создание виртуальных витрин данных или реализацию &#171;мягких&#187; бизнес-правил в ETL по запросу бизнеса.</li>
<li><strong>Разработчик отчетов (Report Developer):</strong> Разработчики отчетов создают отчеты, ориентированные на бизнес, на основе информационных витрин, таблиц Business Vault или (в редких случаях) напрямую на Raw Data Vault. В большинстве случаев им не требуется реализовывать бизнес-правила для этой задачи, однако в редких случаях создание бизнес-отчета может потребовать реализации ограниченного количества бизнес-правил прямо в отчете. Это следует избегать, так как это негативно сказывается на производительности и снижает возможность повторного использования.</li>
<li><strong>Архитектор данных / Архитектор информации (Data Architect / Information Architect):</strong> Архитекторы информации (в отрасли они известны как архитекторы данных, однако, по нашему мнению, этот термин вводит в заблуждение, так как они должны работать с информацией, а не только с данными; см. Главу 2, Масштабируемая архитектура хранилища данных) отвечают за информационную архитектуру и интеграцию данных.</li>
<li><strong>Менеджер метаданных (Metadata Manager):</strong> Эта роль отвечает за планирование проектирования метаданных; обеспечивает основу для разработки метаданных; координирует деятельность и коммуникацию с другими ролями и проектами; управляет уровнями доступа к метаданным для всех участников и внешних сотрудников, которым требуется работать с метаданными.</li>
<li><strong>Менеджер изменений (Change Manager):</strong> Менеджер изменений гарантирует, что новая функциональность не приведет к сбоям в других ИТ- или бизнес-сервисах при развертывании. Также эта роль отвечает за обеспечение возможности развертывания в рабочей среде и за предотвращение блокировки развертывания другими проектами.</li>
</ul>
<p>Многие организации ошибочно назначают обязанности конкретным людям, а не четко определенным ролям. Преимущество наличия четко определенных ролей в команде заключается в том, что при необходимости можно заменить человека, выполняющего роль, другим квалифицированным специалистом — например, если текущий сотрудник покидает организацию или переходит на другой проект. Определенные роли помогают организациям во многих аспектах: они упрощают поиск нужных специалистов на рынке труда для отдела кадров; позволяют новым сотрудникам быстро понять свои обязанности и начать выполнение задач; а также обеспечивают четкое распределение ответственности, что помогает команде эффективно решать вопросы, возникающие в процессе разработки.</p>
<p>Большинство представленных ролей уже известны проектным командам, работающим с хранилищами данных. Исключением является технический бизнес-аналитик. Эта роль выполняет промежуточную функцию между бизнесом и IT. Характеристики и дополнительная информация об обязанностях данной роли представлены на Рисунке 3.2.</p>
<p><strong>Рисунок 3.2 Характеристики и обязанности технического бизнес-аналитика</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_2_Characteristics_and_responsibilities_of_a_technical_business.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1225 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/3_2_Characteristics_and_responsibilities_of_a_technical_business.jpeg" alt="" width="1066" height="412" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_2_Characteristics_and_responsibilities_of_a_technical_business.jpeg 1066w, https://datatalks.ru/wp-content/uploads/2025/02/3_2_Characteristics_and_responsibilities_of_a_technical_business-300x116.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_2_Characteristics_and_responsibilities_of_a_technical_business-1024x396.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/02/3_2_Characteristics_and_responsibilities_of_a_technical_business-768x297.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_2_Characteristics_and_responsibilities_of_a_technical_business-450x174.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_2_Characteristics_and_responsibilities_of_a_technical_business-780x301.jpeg 780w" sizes="(max-width: 1066px) 100vw, 1066px" /></a></p>
<p>Поскольку эта роль находится на пересечении бизнеса и IT, задача технического бизнес-аналитика — сглаживать взаимодействие между обеими сторонами и предотвращать менталитет &#171;перекидывания через забор&#187;. Такой менталитет, при котором обе стороны не работают вместе, не понимают друг друга и не поддерживают, зачастую является основной причиной провала проектов. Подобные проекты характеризуются нечеткими бизнес-требованиями, техническими артефактами, которые не соответствуют ни бизнес-требованиям, ни тому, что было понято IT, а также ненадежным программным обеспечением из-за неполного или отсутствующего тестирования (с точки зрения бизнеса). Часто в таких ситуациях стороны начинают обвинять друг друга, будучи уверенными, что все ошибки находятся исключительно на противоположной стороне.</p>
<p>Именно поэтому в командах Data Vault 2.0 рекомендуется не разделять бизнес и IT-ролей. Вместо этого обе группы должны работать совместно, сосредотачиваясь на своих обязанностях. Если возможно, команда должна быть расположена в одном месте, чтобы повысить эффективность. Важно создать уровень сотрудничества и взаимопонимания между бизнесом, IT и каждой индивидуальной ролью, чтобы избежать ситуаций, описанных в предыдущем абзаце. Это является обязанностью руководителя проекта и требует постоянных действий, если группы начинают отдаляться друг от друга по ходу проекта.</p>
<p>Часть необходимого взаимопонимания со стороны бизнеса заключается в осознании того, что IT-команда должна иметь возможность работать без постоянных отвлечений на повседневные проблемы в течение своих двухнедельных спринтов. Вопросы, возникающие в операционной деятельности, должны быть запланированы на один из следующих спринтов. Для достижения этого IT также должно изменить свое мышление: их задача — не просто решать проблемы бизнеса, а создавать условия, при которых бизнес сможет решать часть, а в идеале большинство своих проблем самостоятельно, без вовлечения IT. Именно здесь на первый план выходит концепция &#171;управляемого&#187; (managed) самообслуживания в бизнес-аналитике (BI).</p>
<p><strong>Стандарт Data Vault 2.0</strong> дает рекомендации IT по предоставлению данных таким образом, чтобы бизнес-пользователи могли использовать их самостоятельно. Это требует перераспределения ответственности в сторону бизнеса. Например, IT не должно исправлять данные в корпоративном хранилище данных, чтобы компенсировать ошибки в операционных системах. Ответственность за исправление этих ошибок лежит на бизнесе. IT же обеспечивает доставку данных через хранилище обратно в бизнес, где применяются бизнес-правила для преобразования данных в информацию. IT использует это знание для институционализации информационных витрин, которые используются на регулярной основе.</p>
<p>Чтобы избежать взаимных помех, необходимо установить четкий процесс обработки запросов на изменения системы. На Рисунке 3.3 представлена схема этого коммуникационного канала.</p>
<p><strong>Рисунок 3.3 Определенные процессы, показывающие каналы коммуникации в методологии Data Vault 2.0</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_3_Defined_processes_showing_the_communication_channels.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1227 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/3_3_Defined_processes_showing_the_communication_channels.jpeg" alt="" width="795" height="1024" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_3_Defined_processes_showing_the_communication_channels.jpeg 795w, https://datatalks.ru/wp-content/uploads/2025/02/3_3_Defined_processes_showing_the_communication_channels-233x300.jpeg 233w, https://datatalks.ru/wp-content/uploads/2025/02/3_3_Defined_processes_showing_the_communication_channels-768x989.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_3_Defined_processes_showing_the_communication_channels-450x580.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_3_Defined_processes_showing_the_communication_channels-780x1005.jpeg 780w" sizes="(max-width: 795px) 100vw, 795px" /></a></p>
<p>Новые запросы на изменения часто исходят от бизнес-стороны проекта. IT необходимо оценить риски и влияние на текущую систему в продакшене. Поэтому запросы на изменения проходят через следующих участников:</p>
<p><strong>бизнес-пользователей</strong> → <strong>спонсора проекта</strong> (который определяет приоритетность запросов) → <strong>технического бизнес-аналитика</strong> (который помогает перевести бизнес-требования в технические термины) → <strong>IT-менеджера</strong> и <strong>руководителя проекта</strong> (которые отвечают за планирование).</p>
<p>После того как IT проводит оценку рисков, эта информация передается обратно бизнесу, чтобы он мог принять окончательное решение о реализации запроса с учетом возможных рисков и влияния. Если бизнес решает продолжить с этим изменением, IT включает его в один из следующих спринтов, в зависимости от ранее установленного приоритета. IT-отдел затем разрабатывает и доставляет новый артефакт. После того как бизнес протестировал изменение (в дополнение к тестированию со стороны разработчиков) и утвердил его, формальное утверждение освобождает IT от дальнейших обязательств по данному запросу.</p>
<p>Когда разрабатываются новые релизы системы хранилища данных, команды разработки используют тот же подход, что и в традиционной разработке ПО. Они выпускают Alpha-версии для раннего тестирования, Beta-версии для тестирования на ограниченной бизнес-аудитории и Gamma-версии для продакшена. Alpha-релизы должны затрагивать только технических участников команды, включая технического бизнес-аналитика, как показано на Рисунке 3.4.</p>
<p><strong>Рисунок 3.4 Зона охвата Alpha-релиза в методологии Data Vault 2.0</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_4_Data_Vault_2_0_methodology_Alpha_release_reach.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1228 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/3_4_Data_Vault_2_0_methodology_Alpha_release_reach.jpeg" alt="" width="954" height="137" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_4_Data_Vault_2_0_methodology_Alpha_release_reach.jpeg 954w, https://datatalks.ru/wp-content/uploads/2025/02/3_4_Data_Vault_2_0_methodology_Alpha_release_reach-300x43.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_4_Data_Vault_2_0_methodology_Alpha_release_reach-768x110.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_4_Data_Vault_2_0_methodology_Alpha_release_reach-450x65.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_4_Data_Vault_2_0_methodology_Alpha_release_reach-780x112.jpeg 780w" sizes="(max-width: 954px) 100vw, 954px" /></a></p>
<p>Обычно в Alpha-релизе участвуют от трех до пяти технических бизнес-аналитиков, помимо технической IT-команды. Когда IT выпускает новые отчеты для аналитиков, необходимо четко указать, что эти отчеты не предназначены для распространения среди бизнеса, поскольку информация в отчетах или многомерных кубах может содержать ошибки или быть некорректной. Тем не менее, технические бизнес-аналитики получают эти отчеты, чтобы помочь выявить ошибки или неправильные вычисления.</p>
<p>Обычно Alpha-релиз распространяется среди технических бизнес-аналитиков после первых двух или трех спринтов проекта хранилища данных.</p>
<p>Как только новый релиз достигает Beta-статуса, он становится доступным для более широкой аудитории: большему числу технических бизнес-аналитиков, спонсору проекта, некоторым бизнес-менеджерам и другим пользователям, заинтересованным в функциональности нового релиза. На Рисунке 3.5 показаны роли, вовлеченные в Beta-релиз.</p>
<p><strong>Рисунок 3.5 Зона охвата Beta-релиза в методологии Data Vault 2.0</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_5_Data_Vault_2_0_methodology_Beta_release_reach.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1229 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/3_5_Data_Vault_2_0_methodology_Beta_release_reach.jpeg" alt="" width="954" height="137" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_5_Data_Vault_2_0_methodology_Beta_release_reach.jpeg 954w, https://datatalks.ru/wp-content/uploads/2025/02/3_5_Data_Vault_2_0_methodology_Beta_release_reach-300x43.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_5_Data_Vault_2_0_methodology_Beta_release_reach-768x110.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_5_Data_Vault_2_0_methodology_Beta_release_reach-450x65.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_5_Data_Vault_2_0_methodology_Beta_release_reach-780x112.jpeg 780w" sizes="(max-width: 954px) 100vw, 954px" /></a></p>
<p>Beta-релиз был тщательно протестирован IT-отделом и представителями бизнеса и больше не содержит явных или известных ошибок. Однако сгенерированные отчеты все еще не предназначены для распространения, поскольку релиз находится в промежуточном состоянии. Вместо этого отчеты используются ограниченной командой для выявления проблем, которые до сих пор не были обнаружены в процессе разработки и тестирования техническими бизнес-аналитиками. Если ограниченная команда соглашается с тем, что релиз готов к продакшену, система хранилища данных переходит в Gamma-стадию, как показано на Рисунке 3.6.</p>
<p><strong>Рисунок 3.6 Зона охвата Gamma-релиза в методологии Data Vault 2.0</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_6_Data_Vault_2_0_methodology_Gamma_release_reach.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1230 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/3_6_Data_Vault_2_0_methodology_Gamma_release_reach.jpeg" alt="" width="954" height="133" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_6_Data_Vault_2_0_methodology_Gamma_release_reach.jpeg 954w, https://datatalks.ru/wp-content/uploads/2025/02/3_6_Data_Vault_2_0_methodology_Gamma_release_reach-300x42.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_6_Data_Vault_2_0_methodology_Gamma_release_reach-768x107.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_6_Data_Vault_2_0_methodology_Gamma_release_reach-450x63.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_6_Data_Vault_2_0_methodology_Gamma_release_reach-780x109.jpeg 780w" sizes="(max-width: 954px) 100vw, 954px" /></a></p>
<p>Gamma-релиз (или продакшен-релиз) развертывается и становится доступным для всех бизнес-пользователей. Этот подход тесно связан с CMMI, который является частью методологии Data Vault 2.0.</p>
<h3><strong>Capability Maturity Model Integration</strong></h3>
<p><strong>Capability Maturity Model Integration (CMMI)</strong> — это модель улучшения процессов, разработанная более 20 лет назад и управляемая Институтом программной инженерии (SEI) при Университете Карнеги-Меллона (США). CMMI спонсируется правительством США (в частности, Министерством обороны США) и используется организациями всех размеров по всему миру. Данная модель помогла оптимизировать затраты, сократить доработки и уровень дефектов, а также улучшить сроки выполнения работ и качество.</p>
<p>CMMI сам по себе является моделью улучшения процессов, разработанной для работы в различных средах. В рамках CMMI существуют три различных модели:</p>
<ul>
<li><strong>CMMI for Development</strong> — модель управления и улучшения процессов для организаций, занимающихся разработкой программного обеспечения;</li>
<li><strong>CMMI for Acquisition</strong> — модель для организаций, которым необходимо инициировать и управлять закупками продуктов и услуг;</li>
<li><strong>CMMI for Services</strong> — модель процессов для организаций, помогающая им развертывать и управлять услугами.</li>
</ul>
<p>По своей природе CMMI for Development является правильным выбором для улучшения процессов разработки хранилищ данных. Он может использоваться для повышения эффективности процессов разработки программных продуктов (таких как хранилище данных), включая процессы планирования, управления и контроля за разработкой.</p>
<p>Стандарт CMMI for Development предоставляет лучшие практики успешных организаций-разработчиков, а также опыт экспертов в области качества программного обеспечения. Идея заключается в том, чтобы направить организации на путь улучшения процессов, позволяя им предсказывать результаты их (определенных и управляемых) процессов. Предсказуемость результатов процесса (включая сроки и качество продукта) снижает риск превышения бюджета, возникновения проблем с качеством и нарушения графика.</p>
<p>CMMI можно интегрировать с другими фреймворками и лучшими практиками, такими как гибкая разработка (agile development), PMP и Six Sigma. Это возможно потому, что CMMI не определяет, как должна выполняться разработка программного обеспечения, а вместо этого указывает, что должно быть сделано для улучшения процессов разработки. Таким образом, CMMI поддерживает принципы agile, предоставляя референсную модель для успешных сред разработки.<br />
CMMI также поддерживает интеграцию с Six Sigma, позволяя реализовывать области процессов CMMI в виде проектов Six Sigma (например, DMAIC). PMP также совместим с CMMI, поскольку существует перекрытие между областями знаний PMBOK (Project Management Body of Knowledge) и процессными областями CMMI.</p>
<p><strong>Существуют две разные представления CMMI:</strong></p>
<ol>
<li>Непрерывное представление (continuous representation)</li>
<li>Поэтапное представление (staged representation)</li>
</ol>
<p>Эти представления предназначены для различных требований организаций и предоставляют уникальный набор инструментов для улучшения процессов.</p>
<p><strong>Поэтапная модель (staged model)</strong> ориентирована на организацию в целом и предлагает дорожную карту в виде последовательности этапов (stages), отсюда и название. Эти этапы называются уровнями зрелости (maturity levels) и отражают степень зрелости организации в рамках набора процессных областей.<br />
По мере продвижения организации по уровням зрелости она внедряет все больше практик из различных процессных областей. Как только организация удовлетворяет целям всех процессных областей на одном уровне зрелости, она может перейти на следующий уровень для дальнейшего улучшения своих процессов.</p>
<p><strong>Непрерывная модель (continuous model)</strong> отличается от поэтапной модели, поскольку не задает четкий порядок внедрения процессных областей, которые должны быть улучшены. Вместо этого она сосредотачивается на каждой процессной области отдельно и на том, как ее можно улучшить. Каждая процессная область имеет свой собственный уровень возможностей (capability level). При этом группировка процессных областей в данной модели отсутствует.</p>
<p>Следующие разделы более подробно представляют уровни возможностей и уровни зрелости CMMI.</p>
<h4><strong>Уровни возможностей (Capability Levels)</strong></h4>
<p>Организации, работающие с непрерывным представлением CMMI, используют уровни возможностей для измерения своих усилий по улучшению процессов. В CMMI существуют следующие уровни возможностей:</p>
<ul>
<li>0. Неполный (Incomplete)</li>
<li>1. Выполняемый (Performed)</li>
<li>2. Управляемый (Managed)</li>
<li>3. Определенный (Defined)</li>
<li>4. Количественно управляемый (Quantitatively Managed)</li>
<li>5. Оптимизируемый (Optimizing)</li>
</ul>
<p>Организация начинает с уровня возможностей 0: <strong>неполный (Incomplete)</strong>. Этот уровень указывает, что процессы либо не выполняются, либо выполняются частично. Он также означает, что по крайней мере одна конкретная цель в данной процессной области не достигнута. Общих целей для этого уровня не существует, так как частично выполняемые процессы не должны быть институционализированы.</p>
<p>Организация может перейти на уровень возможностей 1: <strong>выполняемый (Performed)</strong>, если все общие цели уровня 1 выполнены. Этот уровень требует, чтобы процессы выполнялись и давали необходимый результат. Однако он не требует институционализации процесса, что означает, что улучшения могут быть утеряны со временем.</p>
<p>Уровень возможностей 2: <strong>управляемый (Managed)</strong> требует, чтобы процесс был спланирован и выполнялся в соответствии с политиками. Управляемый процесс выполняется квалифицированными специалистами, которые имеют доступ к необходимым ресурсам и способны производить контролируемые результаты. Все заинтересованные стороны вовлечены в процесс, который мониторится, контролируется, пересматривается и оценивается на регулярной основе.</p>
<p>Следующий уровень возможностей, которого может достичь организация, — это уровень возможностей 3: <strong>определенный (Defined)</strong>.<br />
Он характеризуется определенным процессом, который представляет собой управляемый процесс, созданный на основе набора стандартных процессов организации и адаптированный к конкретным условиям.<br />
Процесс был настроен в соответствии с руководящими принципами организации и включает описание процесса. Кроме того, он вносит процессный опыт обратно в общую процессную организацию.</p>
<p>Уровень возможностей 4: <strong>количественно управляемый (Quantitatively Managed)</strong> — это определенный процесс (см. уровень 3), который использует статистические и другие количественные методы для управления выбранными подпроцессами. Эти методы используются для выявления процессов, которые дают больше дефектных результатов или обладают более низким качеством.</p>
<p>Наивысший уровень возможностей, которого может достичь организация, — это уровень возможностей 5: <strong>оптимизируемый (Optimizing)</strong>. Он сосредоточен на институционализации процесса оптимизации. Этот процесс требует, чтобы организация постоянно измеряла свои (количественно управляемые) процессы, анализировала тренды, изучала технические практики, устраняла общие причины вариативности процессов и затем адаптировала процессы к изменяющимся бизнес-потребностям.</p>
<h4><strong>Уровни зрелости</strong></h4>
<p>Уровни зрелости отличаются от уровней способности, так как они применяются к наборам областей процессов, в которых необходимо достичь совокупного набора целей (в отличие от уровней способности, которые применяются к отдельным областям процессов). В модели CMMI используются следующие уровни зрелости, которые объясняются в этом разделе:</p>
<ol>
<li>Начальный (Initial)</li>
<li>Управляемый (Managed)</li>
<li>Определенный (Defined)</li>
<li>Количественно управляемый (Quantitatively Managed)</li>
<li>Оптимизируемый (Optimizing)</li>
</ol>
<p><strong>Первый уровень зрелости 1: начальный</strong> указывает на организацию с хаотичными и несистемными процессами. Организация не предоставляет стабильную процессную среду. Успех зависит от навыков и вовлеченности отдельных сотрудников, а не от четко определенных и установленных процессов. Организации на первом уровне зрелости способны выпускать рабочие продукты, однако они часто превышают бюджет и выходят за рамки первоначального графика поставки. Такие организации, как правило, берут на себя чрезмерные обязательства, отказываются от своих процессов в стрессовых ситуациях и испытывают трудности с повторением прошлых успехов.</p>
<p><strong>Организации на уровне зрелости 2: управляемый</strong> имеют процессы, которые планируются и выполняются в соответствии с политиками и вовлекают всех соответствующих заинтересованных лиц. Квалифицированные сотрудники с достаточными ресурсами обеспечивают контролируемые результаты в рамках отслеживаемого, управляемого и регулярно оцениваемого процесса. Существующие процессы сохраняются даже в стрессовых ситуациях.</p>
<p><strong>Уровень зрелости 3: определенный</strong> характеризуется четко описанными и понятными процессами, которые документированы в стандартах, процедурах, инструментах и методах. Организационные стандартные процессы устанавливаются и совершенствуются со временем. Ключевое отличие между уровнями зрелости 2 и 3 заключается в том, что на уровне 2 стандарты, описания процессов и процедуры могут различаться для каждой конкретной реализации процесса. Однако на уровне 3 стандарты, описания процессов и процедуры адаптируются из стандартных процессов организации.</p>
<p><strong>На уровне зрелости 4: количественно управляемый</strong> организации используют количественные цели по качеству и производительности процессов для управления своими проектами. Отдельные подпроцессы измеряются путем сбора и статистического анализа конкретных метрик производительности процессов.</p>
<p><strong>Организации на уровне зрелости 5: оптимизируемый</strong> непрерывно совершенствуют свои процессы, используя количественный подход для понимания вариаций своих процессов и их результатов. Основное внимание уделяется постоянному улучшению производительности процессов за счет их поэтапного совершенствования и использования новых технологий.</p>
<h4><strong>Переход на уровень зрелости 5</strong></h4>
<p>Организации, которые хотят соответствовать уровню зрелости 5, должны сначала сосредоточиться на достижении уровней способности для выбранных областей процессов, а затем контролировать самый высокий уровень – управление производительностью организации и непрерывное совершенствование процессов.</p>
<p>Достижение происходит посредством поэтапного подхода. С каждым достигнутым уровнем зрелости организация достигает общих и специфических целей для набора областей процессов данного уровня зрелости и увеличивает свою организационную зрелость. Поскольку уровни зрелости основаны на своих нижестоящих уровнях, организация может использовать свои прошлые достижения при переходе на следующий уровень зрелости. По этим причинам попытки организаций пропустить уровни зрелости часто оказываются контрпродуктивными.</p>
<h4><strong>Интеграция CMMI в методологию Data Vault 2.0</strong></h4>
<p>Методология Data Vault 2.0 позволяет организациям достичь уровня зрелости 5 по CMMI, решая следующие задачи:</p>
<ul>
<li><strong>Измеримость (Measurable):</strong> Раздел 3.1.4 опишет, как процесс оценки в методологии Data Vault 2.0 основан на сравнении оценочного и фактического объема работ. Для этого необходимо фиксировать соответствующую информацию на протяжении всего процесса.</li>
<li><strong>Повторяемость (Repeatable):</strong> Для оценки будущих затрат важно иметь повторяемые процессы. Модель Data Vault 2.0 помогает в этом благодаря шаблонным, основанным на паттернах процессам моделирования и загрузки данных в корпоративное хранилище данных.</li>
<li><strong>Определенность (Defined):</strong> Data Vault 2.0 поддерживает четко определенные стандарты, правила, процедуры и готовые шаблоны, включая проектную документацию. Пример такого определения процессов представлен на рисунке 3.3. Определенность также способствует повторяемости процессов.</li>
<li><strong>Гибкость (Flexible):</strong> Методология поддерживает быстрые последовательные развертывания (от двух до трех недель, в зависимости от возможностей или предпочтений организации). Также возможны изменения в размерах команды в зависимости от потребностей. Это соответствует определенным паттернам Data Vault 2.0, которые помогают новым членам команды быстро понять процессы и включиться в реализацию или тестирование.</li>
<li><strong>Масштабируемость (Scalable):</strong> После развертывания хранилища данных на основе Data Vault 2.0 в одной части предприятия можно добавлять дополнительную функциональность, необходимую другим подразделениям. Это возможно благодаря органическому росту моделей Data Vault 2.0 — характеристике, которая не только уникальна для Data Vault, но и была заложена в подход к моделированию с самого начала.</li>
<li><strong>Мониторинг (Monitored):</strong> Регулярные командные обзоры, как в Scrum (например, на встречах ретроспективы), и постоянные релизы в каждом спринте гарантируют, что бизнес-пользователи не теряют интерес к проекту и его деятельности. Напротив, это поддерживает высокий уровень вовлеченности, что ускоряет реакцию бизнеса, если ИТ не предоставляет ожидаемых результатов.</li>
<li><strong>Управляемость (Governed):</strong> Мониторинг также включает в себя управление. Если релизы не соответствуют (или не превышают) задокументированные стандарты, проект приостанавливается и пересматривается, чтобы в будущем соответствовать требованиям. Это осуществляется в рамках двух- или трехнедельных спринтов.</li>
<li><strong>Оптимизация (Optimized):</strong> Процессы Data Vault 2.0 способствуют оптимизации благодаря низкой сложности: чем ниже сложность процессов разработки, тем меньше зависимостей необходимо учитывать при постоянном совершенствовании процессов.</li>
</ul>
<p>Таблица 3.1 показывает действия и задачи методологии Data Vault 2.0 и их связь с уровнями зрелости CMMI.</p>
<p><strong>Таблица 3.1 &#8212; Соответствие методологии Data Vault 2.0 уровням зрелости CMMI</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/table_3_1.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1251" src="https://datatalks.ru/wp-content/uploads/2025/02/table_3_1.jpeg" alt="" width="750" height="642" srcset="https://datatalks.ru/wp-content/uploads/2025/02/table_3_1.jpeg 750w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_1-300x257.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_1-450x385.jpeg 450w" sizes="(max-width: 750px) 100vw, 750px" /></a></p>
<p>Организации могут использовать эту таблицу, чтобы сосредоточиться на определенных действиях Data Vault при продвижении по уровням зрелости. Например, параллельные команды должны становиться объектом внимания организации только после достижения уровня зрелости CMMI 4 (количественно управляемый) и при переходе на уровень 5 (оптимизируемый). Это соответствует ранее описанной рекомендованной практике продвижения по уровням зрелости, а не попытке сразу достичь статуса оптимизируемой организации. Хотя первый подход требует больше времени и тщательной проработки организационных возможностей, он сопряжен с гораздо меньшими рисками по сравнению с прямым стремлением к уровню зрелости 5.</p>
<h3><strong>Управление проектом</strong></h3>
<p>Как описано в разделе 3.1, методология Data Vault 2.0 способствует развитию процессов, которые являются определенными, повторяемыми и управляемыми, наряду с другими характеристиками. Однако это не означает, что цель состоит в чрезмерном определении или ограничении процесса разработки. Цель заключается в использовании структурированного, но гибкого подхода к разработке решений в области бизнес-аналитики.</p>
<p>Гибкость бизнеса определяется его способностью быстро адаптироваться к изменениям в бизнес-среде. Чтобы поддерживать эту способность, команда разработки хранилища данных также должна справляться с такими быстрыми изменениями. ИТ-департаменту следует по возможности избегать долгосрочного планирования проектов и вместо этого сосредоточиться на итеративной и инкрементальной разработке. Команда должна быть способна адаптироваться к изменяющимся бизнес-требованиям в пределах двухнедельных циклов.</p>
<p>Исключением из этого правила является долгосрочное (или общее) планирование, необходимое на программном или корпоративном уровне организации.</p>
<p>Для достижения этой цели требуются кросс-функциональные команды, как уже было описано в предыдущем разделе. Необходима постоянная совместная работа каждого члена команды, а также взаимодействие между бизнесом и ИТ. Если бизнес принимает решение изменить требования (из-за внешних факторов или просто потому, что изменил свое мнение по какой-либо причине), команда разработки должна узнать об этом как можно раньше. Изменение направления не должно избегаться, а, наоборот, поощряться для создания правильного продукта, который соответствует ожиданиям пользователей. Однако это требует адаптивного планирования и эволюционного подхода к разработке хранилища данных.</p>
<p>Так как модель Data Vault 2.0 была создана на основе модели сети с центральным узлом и подключенными элементами (hub-and-spoke network model, подробнее об этом в главе 5 &#171;Промежуточное моделирование Data Vault&#187;), она изначально разработана для поддержки такого эволюционного подхода.</p>
<p><strong>Создание модели Data Vault — это естественная эволюция.</strong> Наилучший подход к реализации хранилища данных на основе Data Vault 2.0 — сосредоточиться на четко определенной, узконаправленной задаче, где бизнес-ключи охватывают несколько функциональных областей. Следует избегать попыток смоделировать всю организацию сразу, как это обычно делается в традиционных архитектурах, представленных в главе 1 &#171;Введение в хранилища данных&#187;. В этих устаревших архитектурах моделирование всей организации требуется, поскольку внесение изменений в исходную модель (нормализованную до третьей нормальной формы или в виде звездной схемы) слишком затратно. Поэтому разработчики пытаются внедрить в исходную модель как можно больше функций, чтобы минимизировать будущие изменения. Однако, учитывая изменчивость бизнес-среды, такой подход нереалистичен.</p>
<p>Data Vault 2.0 был разработан с учетом возможности быстрого внесения изменений в модель, наряду с другими особенностями проектирования. Организации, выбравшие Data Vault 2.0, должны максимально использовать это преимущество, органично развивая свою модель, чтобы полностью раскрыть все возможности, заложенные в Data Vault.</p>
<p>Однако гибкость зависит не только от модели Data Vault или архитектуры. Она также зависит от людей: участников проекта внутри команды и внешних специалистов, поддерживающих основную команду разработки. Успешный гибкий проект требует хорошо обученных специалистов, которые следуют дисциплинированному, совместному подходу (как описано в предыдущем разделе). Также важно привлекать всех заинтересованных лиц, которые вовлечены в создание хранилища данных. Это не только бизнес-пользователи. Команды разработки часто забывают вовлекать операционные и службы поддержки на ранних этапах процесса.</p>
<p>Операционные и поддерживающие команды должны обеспечивать работоспособность решения в продакшене. Следовательно, у них есть особые требования к конфигурации, документации и развертыванию решения. Эволюционный подход методологии Data Vault 2.0 помогает и в этом: поскольку хранилище данных создается инкрементально, службы эксплуатации и поддержки могут предоставлять раннюю обратную связь наряду с бизнес-пользователями.</p>
<p>Разработка должна максимально использовать этот потенциал обратной связи, регулярно предоставляя работающее программное обеспечение. В конечном итоге частое тестирование проводится не только ИТ-отделом во время спринта, но и бизнес-пользователями (техническими бизнес-аналитиками), а также операционными и поддерживающими командами.</p>
<p><strong>В конечном итоге цели гибкой (agile) поставки заключаются в следующем:</strong></p>
<ul>
<li><strong>Масштабирование agile:</strong> Это касается не только увеличения размера команды, но также распределения команды по разным локациям, соответствия нормативным требованиям, управления сложностью (доменной, технической и организационной) и интеграции в корпоративную среду.</li>
<li><strong>Избегать хаоса:</strong> Плохо управляемые проекты сталкиваются с теми же проблемами, что и неуправляемые. Нельзя просто «быть agile» без дисциплины agile. Учитесь на ошибках прошлых спринтов и постоянно улучшайте свои процессы.</li>
<li><strong>Эффективное начало:</strong> Прежде чем приступить к разработке системы, необходимо прояснить бизнес-проблемы, определить жизнеспособное техническое решение, спланировать подход, настроить рабочую среду и собрать команду. Также важно заручиться поддержкой заинтересованных сторон в отношении выбранного подхода и стратегии внедрения.</li>
<li><strong>Переход от отдельных специалистов к agile-командам:</strong> Каждый член команды должен сосредоточиться на совместной работе для достижения целей проекта, а не на индивидуальных выгодах.</li>
<li><strong>Постепенное наращивание решения:</strong> Каждый спринт должен давать результат, который может быть использован бизнес-пользователями. Только в этом случае они смогут дать реалистичную и ценную обратную связь о текущем решении. Цель — не просто продемонстрировать что-то, а ввести в реальную эксплуатацию.</li>
<li><strong>Развертывание гибких решений:</strong> Современная бизнес- и технологическая среда сложна. Agile-решение должно быть развернуто с учетом этой сложности.</li>
<li><strong>Использование корпоративных методологий:</strong> Методология Data Vault 2.0 уже включает в себя проверенные корпоративные методологии, такие как CMMI, Scrum, Six Sigma, PMP и др. Существуют и другие дисциплины, помогающие развертывать, сопровождать и поддерживать решения, например, ITIL (Библиотека инфраструктуры информационных технологий). Используйте эти проверенные подходы, особенно если они уже применяются в вашей организации.</li>
<li><strong>Адаптация стратегии управления (governance):</strong> Управление agile-проектами должно быть встроено в процесс спринтов. Поскольку решение поставляется к концу каждого спринта, необходимо проверять соответствие установленным в организации стандартам и правилам.</li>
</ul>
<p>Эти цели заимствованы из <strong>Disciplined Agile Delivery (DAD)</strong>, который применяется в корпоративных организациях для гибкой поставки программного обеспечения. Это гибридный подход, который расширяет Scrum за счет проверенных стратегий Agile Modeling (AM), Extreme Programming (XP) и Unified Process (UP). Таким образом, он следует схожей стратегии с методологией Data Vault 2.0, но с четкой ориентацией на хранилища данных и бизнес-аналитику.</p>
<h4><strong>Scrum</strong></h4>
<p>Традиционный жизненный цикл разработки программного обеспечения, также известный как каскадный (waterfall) подход, имеет ряд преимуществ и недостатков. Если все идет хорошо (и согласно плану), каскадный подход является наиболее эффективным способом выполнения проекта. Реализуются, тестируются и развертываются только необходимые функции. В процессе создается очень хороший комплект документации, особенно на этапах сбора требований и проектирования.</p>
<p>Однако практически невозможно реализовать крупные проекты, если заказчик не может четко сформулировать требования и идеи или если бизнес-требования изменяются со временем.</p>
<p>В результате были разработаны гибкие методологии (agile), чтобы сделать процесс разработки программного обеспечения более адаптивным и успешным в целом. Scrum является одним из примеров такой гибкой методологии, и он описан в следующих разделах. Он был введен в конце 1990-х годов и стал «подавляющим [agile] фаворитом».</p>
<p>В Scrum пользовательские требования хранятся в виде пользовательских историй (user stories) в бэклоге продукта (product backlog). Они расставляются по приоритету с учетом бизнес-ценности и включают требования, касающиеся запросов клиентов, новых функций, улучшения удобства использования, исправления ошибок, повышения производительности, переработки архитектуры и т. д.</p>
<p>Пользовательские истории реализуются в итерациях, называемых «спринтами» (sprints), которые обычно длятся от двух до четырех недель. В ходе спринта пользовательские истории извлекаются из бэклога продукта в соответствии с их приоритетом и реализуются командой.</p>
<p><strong>Цель Scrum</strong> — создавать потенциально готовый к выпуску инкремент (potentially shippable increment) в каждом спринте, представляющий собой новую версию системы, которую можно продемонстрировать бизнес-пользователям и потенциально выпустить в продакшн (Рисунок 3.7).</p>
<p><strong>Рисунок 3.7 Поток требований в процессе Scrum</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_7_The_flow_of_requirements_in_the_Scrum_process.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1231 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/3_7_The_flow_of_requirements_in_the_Scrum_process.jpeg" alt="" width="682" height="587" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_7_The_flow_of_requirements_in_the_Scrum_process.jpeg 682w, https://datatalks.ru/wp-content/uploads/2025/02/3_7_The_flow_of_requirements_in_the_Scrum_process-300x258.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_7_The_flow_of_requirements_in_the_Scrum_process-450x387.jpeg 450w" sizes="(max-width: 682px) 100vw, 682px" /></a></p>
<p>Это требует, чтобы пользовательская история была реализована и протестирована полностью, включая всю бизнес-логику, относящуюся к этой истории. Все заинтересованные стороны, такие как бизнес-пользователи и команда разработки, могут проверить новую, работающую функцию и предоставить обратную связь или рекомендовать изменения в пользовательской истории до начала следующего спринта. Scrum поддерживает изменение приоритетов в бэклоге продукта и приветствует изменяющиеся бизнес-требования между спринтами (Рисунок 3.8).</p>
<p><strong>Рисунок 3.8 Быстрые итерации в Scrum</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_8_Quick_turns_in_Scrum.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1232 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/3_8_Quick_turns_in_Scrum.jpeg" alt="" width="978" height="378" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_8_Quick_turns_in_Scrum.jpeg 978w, https://datatalks.ru/wp-content/uploads/2025/02/3_8_Quick_turns_in_Scrum-300x116.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_8_Quick_turns_in_Scrum-768x297.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_8_Quick_turns_in_Scrum-450x174.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_8_Quick_turns_in_Scrum-780x301.jpeg 780w" sizes="(max-width: 978px) 100vw, 978px" /></a></p>
<p>Это помогает улучшить результаты проекта таким образом, чтобы они соответствовали ожиданиям бизнес-пользователей. Для обеспечения этого заказчик должен стать частью команды Scrum настолько, насколько это возможно.</p>
<p>Следующие разделы объясняют элементы Scrum более подробно.</p>
<h4><strong>Итеративный подход</strong></h4>
<p>В предыдущем разделе уже обсуждалось, что Scrum использует итеративный подход для разработки конечной системы. Каждая итерация — это небольшой шаг к финальному решению, который добавляет продукту дополнительную ценность.</p>
<p>Идея этого подхода заключается в том, что большинство первоначальных планов со временем требуют корректировки из-за изменения или недостаточно четко сформулированных бизнес-требований. Поэтому команде и бизнес-пользователям должна быть предоставлена возможность вносить корректировки в ходе выполнения проекта. Однако для этого необходимо, чтобы бизнес-пользователи получали ценность от проекта как можно раньше.</p>
<p><strong>Рисунок 3.9 Управление проектом в Scrum</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_9_Project_control_in_Scrum.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1233 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/3_9_Project_control_in_Scrum.jpeg" alt="" width="986" height="490" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_9_Project_control_in_Scrum.jpeg 986w, https://datatalks.ru/wp-content/uploads/2025/02/3_9_Project_control_in_Scrum-300x149.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_9_Project_control_in_Scrum-768x382.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_9_Project_control_in_Scrum-450x224.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_9_Project_control_in_Scrum-780x388.jpeg 780w" sizes="(max-width: 986px) 100vw, 986px" /></a></p>
<p>На первом этапе проекта каждая итерация длится всего один день. После итерации все заинтересованные стороны проверяют текущую «потенциально готовую к выпуску» систему и оценивают, соответствует ли она их ожиданиям. Если один из участников проекта выявит проблему, требующую исправления, исправление будет выполнено достаточно быстро.</p>
<p>Например, бизнес-требование может быть изменено, а система скорректирована в следующей итерации. В большинстве случаев изменение будет незначительным, поскольку оно было выявлено на раннем этапе процесса. В худшем случае потребуется откатить всю итерацию и выполнить её заново. В этом случае будет потерян всего один день работы.</p>
<p>Если цикл итерации (спринт) длиннее, например месяц, будет реализовано больше требований, выраженных в виде пользовательских историй. Поскольку часто встречаются требования, зависящие друг от друга, изменение требования с множеством зависимостей потребует гораздо больше усилий для исправления, чем в первом случае с более короткой длиной спринта.</p>
<h4><strong>Бэклог продукта и спринта</strong></h4>
<p>Основным артефактом в проектах Scrum является пользовательская история. Пользовательские истории описывают функции с точки зрения пользователя и хранятся в бэклоге продукта до тех пор, пока член команды не выберет пользовательскую историю для реализации. В начале проекта пользовательские истории, как правило, более общие и примерно описывают основные функции, необходимые бизнес-пользователям. Они в первую очередь используются для начала обсуждения между владельцем продукта (роль в проекте, которая будет рассмотрена в следующем разделе) и командой разработки. По мере того как команда узнает больше о функциях, а заказчик лучше понимает продукт, в бэклог продукта добавляются новые и более детализированные пользовательские истории.</p>
<p>Перед добавлением в бэклог продукта каждая пользовательская история приоритизируется. Разработчики должны строго выбирать пользовательские истории из бэклога в порядке их приоритета. В начале каждой итерации пользовательские истории, которые должны быть реализованы, извлекаются из бэклога продукта и перемещаются в бэклог спринта (см. Рисунок 3.7 для деталей). Пользовательская история проектируется, реализуется, тестируется и интегрируется в продукт целиком. Проблемы устраняются немедленно, чтобы поддерживать продукт в состоянии «потенциально готового к выпуску».</p>
<p><strong>Рисунок 3.10 Бэклог и приоритет</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_10_Backlog_and_priority.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1234 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/3_10_Backlog_and_priority.jpeg" alt="" width="816" height="628" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_10_Backlog_and_priority.jpeg 816w, https://datatalks.ru/wp-content/uploads/2025/02/3_10_Backlog_and_priority-300x231.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_10_Backlog_and_priority-768x591.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_10_Backlog_and_priority-450x346.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_10_Backlog_and_priority-780x600.jpeg 780w" sizes="(max-width: 816px) 100vw, 816px" /></a></p>
<p>Рабочие элементы, имеющие высокий приоритет (и, следовательно, выбираемые следующими членами команды), должны быть детализированы и четко определены, поскольку они описывают предстоящую задачу для разработчика. С другой стороны, пользовательские истории с более низким приоритетом могут быть менее детализированы. Эти пользовательские истории часто недостаточно проработаны бизнес-пользователем и требуют более четкого определения.</p>
<p>Типичный процесс заключается в том, чтобы удалить такую пользовательскую историю, разделить ее на несколько более мелких историй, детализировать их и снова добавить в бэклог продукта с учетом приоритета. Также возможно изменить приоритет существующих пользовательских историй между спринтами, чтобы адаптировать проект к изменяющимся требованиям бизнеса. Распространенной практикой является создание (по крайней мере, начальных) пользовательских историй на основе спецификации требований, написанной владельцем продукта с использованием традиционных методов.</p>
<h4><strong>Интеграция Scrum с методологией Data Vault 2.0</strong></h4>
<p>Чтобы стать гибкой проектной командой и достичь целей, представленных в начале этого раздела, команда должна развиваться через различные уровни CMMI. Слишком многие команды и организации просто решают быть «гибкими», не применяя корректно принципы выбранной методологии. Все гибкие подходы, включая Scrum, следуют набору принципов, которые необходимы для того, чтобы команда могла стать гибкой. Без правильного следования этим принципам команда попадает в число тех, кто лишь делает вид, что «разрабатывает по Agile», но на самом деле отказывается от большинства управленческих процессов проекта. Однако Agile-проектное управление не означает «отсутствие управления проектом». Это другой подход к управлению проектом, требующий, чтобы члены команды знали принципы и умели их применять.</p>
<p>Члены команды, которые никогда ранее не работали в гибком проекте, часто не знают этих принципов. Они должны изучить их либо на обучении, либо у более опытных членов команды, чтобы стать успешными участниками Agile-команды.</p>
<p>Более того, для ведения гибких проектов необходима гибкая организация. Если организация мыслит в стиле водопадной модели с передачей артефактов «через забор» между отделами (например, от разработки к тестированию, затем к бизнесу) и внесение изменений в промышленную эксплуатацию требует минимум 3 недель, ваша команда не сможет работать эффективно с точки зрения гибкой методологии. Как уже упоминалось в этой главе, цель состоит в том, чтобы изменения, разрабатываемые в одной итерации, вводились в промышленную эксплуатацию в том же спринте. Эта цель может не всегда быть достижимой, например, если невозможно сократить изменение до управляемого объема, который можно разработать и развернуть в рамках одного спринта. В этом случае артефакт может дорабатываться в нескольких спринтах, пока он не будет готов к развертыванию. Однако стандартной практикой должно быть развертывание в том же спринте, в котором разрабатывается артефакт.</p>
<p>Не существует «гибкого большого взрыва», то есть нельзя разрабатывать хранилище данных на протяжении нескольких спринтов и затем развернуть его в конце проекта через два года.</p>
<p>CMMI может помочь в развитии как команды, так и организации для достижения гибкости. Следуя рекомендациям, изложенным в разделе 3.1.1 (подраздел «Продвижение к уровню зрелости 5»), организации со временем развивают эти навыки, давая членам команды возможность учиться, применять и совершенствовать свои Agile-навыки. Фактически, Scrum строится на уровне 5 CMMI (оптимизация), где команды стремятся улучшать свои способности со временем. Мы рассмотрим это более подробно в разделе 3.3.</p>
<p>Большинство гибких проектов имеют общую основу в понимании того, что для достижения представленных целей команда бизнес-аналитики (BI) должна взять на себя несколько обязанностей:</p>
<ul>
<li><strong>Удовлетворение потребностей заказчика:</strong> Для выполнения этой обязанности команда должна быстро и непрерывно доставлять не просто работающее программное обеспечение, а полезное программное обеспечение. Под этим мы понимаем, что инкремент должен приносить ценность пользователю (и работать).</li>
<li><strong>Частые поставки:</strong> Чтобы демонстрировать прогресс бизнес-пользователям и другим заинтересованным сторонам, команда BI должна поставлять работающее программное обеспечение на регулярной основе (в течение недель, а не месяцев).</li>
<li><strong>Измерение прогресса:</strong> Разработчики часто измеряют свой прогресс количеством затраченных человеко-часов и сравнивают его с первоначальным или обновленным планом. В гибких методах разработки, таких как методология Data Vault 2.0, прогресс измеряется работающим программным обеспечением, а именно реализованными функциями.</li>
<li><strong>Готовность к изменениям:</strong> Гибкие BI-команды не должны избегать поздних изменений в изначальных требованиях. Чтобы соответствовать бизнес-требованиям и поддерживать удовлетворенность пользователей результатами, процесс сбора требований в Data Vault 2.0 является непрерывным.</li>
<li><strong>Тесное сотрудничество:</strong> Бизнес-пользователи и разработчики должны ежедневно работать над новыми функциями хранилища данных. Однако цель не в том, чтобы оперативно исправлять проблемы в продакшене. Они должны совместно разрабатывать новые функции в рамках текущего спринта. Оперативные исправления должны выполняться отделом эксплуатации, поэтому хранилище данных должно разрабатываться так, чтобы бизнес мог самостоятельно его поддерживать без вовлечения IT.</li>
<li><strong>Личное общение:</strong> Команды BI должны избегать переписки по электронной почте и вместо этого встречаться лично для решения текущих вопросов.<br />
Мотивация сотрудников: Мотивация часто основана на доверии и является двусторонним процессом.</li>
<li><strong>Техническое совершенство:</strong> Чтобы обеспечить долгосрочную удовлетворенность бизнес-пользователей, необходимо технически совершенное решение. Однако IT не должно стремиться достичь этого сразу. Вместо этого следует сфокусироваться на хорошем дизайне, который в конечном итоге приведет к созданию отличного продукта в гибкой манере. В этом помогает модель Data Vault 2.0, так как она обеспечивает расширяемость модели для добавления новых функций в будущих спринтах.</li>
<li><strong>Простота:</strong> Настоящие инженеры любят простые решения. Не добавляйте функции, которые не нужны бизнесу. Не модифицируйте модель Data Vault 2.0 системными атрибутами, если в этом нет реальной необходимости. Всякий раз, когда в решение добавляется сложность, для этого должна быть веская причина. Это упрощает поддержку конечного решения.</li>
<li><strong>Самоорганизующиеся команды:</strong> Члены команды несут ответственность за самоорганизацию вокруг поставленных задач.</li>
<li><strong>Регулярная адаптация:</strong> Команда BI несет ответственность за пересмотр прошлых решений и проверку их актуальности в изменившихся условиях или обстоятельствах. Эта обязанность может быть самой сложной, поскольку людям трудно признать ошибки. Однако решение, принятое шесть месяцев назад в тех условиях, не было ошибкой. Ошибкой было бы продолжать его придерживаться, если обстоятельства изменились.</li>
</ul>
<p>Представленные обязанности непосредственно вытекают из принципов Scrum, но применимы ко всем гибким проектам. Следовательно, методология Data Vault 2.0 может быть успешной только в том случае, если команды разработки придерживаются этих обязанностей.</p>
<h3><strong>Определение проекта</strong></h3>
<p>Одна из обсуждаемых обязанностей заключалась в создании простых, но расширяемых решений. Эта обязанность необходима для того, чтобы обеспечить итеративный подход к разработке хранилища данных. Вместо того чтобы с самого начала планировать полное решение, планируются только ближайшие несколько спринтов. Это не означает, что у нас нет общего представления или общей цели хранилища данных. Это лишь означает, что мы не планируем сразу каждую задачу на пути к цели и не моделируем все доступные источники или витрины данных, которые понадобятся для создания окончательного решения. Команда разработки должна спросить у заказчика, что требуется в первую очередь, что имеет наибольшую ценность для бизнеса. Именно это и доставляется в первую очередь, при условии выполнения всех зависимостей.</p>
<p>Иногда сначала необходимо создать некоторые зависимости, например развернуть начальную инфраструктуру хранилища данных. Однако изначальное построение финальной инфраструктуры хранилища данных следует избегать. Начинайте с малого, но делайте решение расширяемым. Развивайте инфраструктуру по мере роста требований.</p>
<p>Зачастую архитекторы пытаются строить хранилище данных слой за слоем: они определяют начальный набор источников данных для генерации всех требуемых отчетов или OLAP-кубов (online analytical processing). Затем они реализуют весь слой стейджинга, загружая туда все исходные таблицы, включая ETL-процессы для их загрузки. После завершения слоя стейджинга они начинают моделировать корпоративное хранилище данных в максимально полном виде, поскольку дорабатывать его позже слишком дорого. После реализации ETL-пакетов создаются витрины данных, чтобы наконец удовлетворить потребности бизнес-пользователей. Такой подход обычно занимает месяцы, если не годы, включая несколько этапов отладки и исправления ошибок.</p>
<p>Однако проблема возникает, когда требования меняются (архитекторы в таком случае говорят, что это происходит «слишком часто») или бизнес запрашивает дополнительные функции (что нередко происходит, когда изначальные архитекторы уже покинули организацию).</p>
<p>Благодаря расширяемой модели и архитектуре, а также гибкой методологии стандарта Data Vault 2.0, архитекторам хранилищ данных больше не нужно следовать такому подходу. Вместо горизонтального построения хранилища данных слой за слоем хранилище создается вертикально, функция за функцией. Общая цель инициативы по хранилищу данных остается прежней, но теперь она достигается путем инкрементных поставок функциональности.</p>
<p>Целью BI-команды становится предоставление необходимой функциональности в рамках быстрых и частых релизов, как описано в предыдущих разделах этой главы. Для этого функциональность должна быть разбита на отдельные фичи, которые максимально изолированы друг от друга.</p>
<p>Рекомендуемый подход для достижения этой цели — использовать ограниченный (scoped) подход к инжинирингу требований и реализации отдельных функций, как показано на рисунке 3.11.</p>
<p><strong>Рисунок 3.11 Определение границ отчета</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_11_Scoping_the_report.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1237 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/3_11_Scoping_the_report.jpeg" alt="" width="1150" height="598" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_11_Scoping_the_report.jpeg 1150w, https://datatalks.ru/wp-content/uploads/2025/02/3_11_Scoping_the_report-300x156.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_11_Scoping_the_report-1024x532.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/02/3_11_Scoping_the_report-768x399.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_11_Scoping_the_report-450x234.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_11_Scoping_the_report-780x406.jpeg 780w" sizes="(max-width: 1150px) 100vw, 1150px" /></a></p>
<p>Функция, реализуемая в примере, представленном на этом рисунке, — это отчет, но она может быть и любым другим артефактом, требуемым пользователем. Например, это может быть новое измерение или атрибут в OLAP-кубе, новый OLAP-куб сам по себе (с минимальным количеством измерений) или корпус данных для текстового анализа.</p>
<p>После того как этот артефакт определен и описан бизнесом, IT-отдел начинает идентификацию источников (таблиц в исходной системе), необходимых для построения этого конкретного отчета. Далее определяются целевые витрины данных, чтобы оценить, какие данные уже имеются для формирования требуемого отчета (или другой функции). После завершения этой идентификации инженеры могут подготовить необходимые данные на стейджинг-уровне, создать и загрузить сущности Data Vault, а затем построить витрины данных.</p>
<p>При следовании этой процедуре в Data Vault загружаются и моделируются все данные из исходных таблиц, а не частичные наборы атрибутов. Таким образом, к исходной таблице обращаются только один раз, а не многократно. Чтобы оценить доступность данных, должна быть возможность отслеживать, какие данные уже загружены в корпоративное хранилище. Частично загруженные данные усложняют этот процесс, чего следует избегать. Кроме того, загрузка только части данных из исходных таблиц приводит к усложнению спутников (satellites) Data Vault.</p>
<p>Определение границ артефакта, разрабатываемого в рамках итерации (то есть запроса на изменение), является важным предварительным условием для успешного выполнения итерации. Корректное определение границ снижает риск того, что команда не сможет завершить и развернуть изменение в рамках одного спринта. Без ограничения объема запрашиваемого изменения также невозможно достичь коротких спринтов длительностью две или даже одну неделю.</p>
<p>Благодаря модели Data Vault 2.0 команды теперь могут разрабатывать свои решения инкрементно в разных бизнес-областях, что позволяет им быть гибкими в определении границ реализации.</p>
<p><strong>Следует отметить два распространенных возражения.</strong></p>
<p><strong>Первое</strong> заключается в том, чтобы интегрировать все таблицы из источника данных для минимизации затрат на их подключение, что влечет за собой загрузку данных, не требуемых текущим решением. Однако загрузка этих данных потребует дополнительной ETL-емкости, что, в свою очередь, потребует более крупной начальной инфраструктуры. Кроме того, внедрение всех таблиц из одной системы-источника может не уложиться в один спринт и отвлечет ресурсы, которые могли бы быть использованы для реализации бизнес-функции.</p>
<p>Часто затраты на интеграцию всех таблиц перевешивают сложность оценки уже загруженных данных в Data Vault (что становится проще при фокусе на таблицах).</p>
<p><strong>Вторая проблема</strong> заключается в том, что при загрузке таблиц-источников в стейджинг-область хорошей практикой является их последующая интеграция в Data Vault. В противном случае может возникнуть дополнительная сложность при оценке актуального состояния хранилища данных, если оба слоя (стейджинг и Data Vault) окажутся несинхронизированными. Если следовать этой практике, загрузка всех таблиц-источников должна сопровождаться полной моделированием и загрузкой соответствующих таблиц Data Vault.</p>
<p><strong>Второе возражение</strong> заключается в том, что многократное обращение к целевой системе для реализации окончательного решения является дорогостоящим. Это может быть правдой, но конечная цель — предоставить работающие и полезные функции для бизнеса в рамках одного спринта, поскольку это снижает риск неудачи: например, если бизнес не принимает решение, потому что оно не соответствует задокументированным требованиям, требования изменились за это время или, когда пользователи начинают использовать решение, оказывается, что оно было выбрано неверно.</p>
<p>Этот вертикальный подход к предоставлению информации выполняется в течение одного спринта. В зависимости от возможностей организации его продолжительность может составлять две или три недели. Поэтому моделирование Data Vault не должно занимать месяцы. Напротив, модель должна быть создана в течение продолжительности спринта. Если на это уходит больше времени, это хороший индикатор того, что объем работы спринта слишком велик. В таком случае функциональность следует исключить из спринта. Исключите все, что не обязательно для поставки вместе с единственной функцией, на которой сосредоточен этот спринт. Убедитесь, что бизнес-пользователи понимают, что эта функциональность все еще будет реализована — но в последующих спринтах.</p>
<p>Часто бизнес-пользователи думают, что функциональность удалена полностью, если ее исключают из планируемого спринта. Однако это неверно, так как недостающая функциональность будет предоставлена в ближайшее время — в следующей или одной из последующих итераций. Как только бизнес-пользователи увидят прогресс проекта, они естественным образом примут этот процесс.</p>
<h4><strong>Гибкий сбор требований</strong></h4>
<p>Прежде чем новая функциональность может быть реализована в спринте, она должна быть определена. Однако процесс сбора требований очень похож на процесс реализации. Обычно бизнес имеет общее представление о функции, которая должна быть реализована в хранилище данных. Но у IT возникает гораздо больше вопросов, требующих ответа, таких как вопросы о источнике данных, бизнес-правилах для агрегации или преобразования данных, типах данных, сценариях использования и т. д. Для получения ответов на эти вопросы используется процесс сбора требований.</p>
<p>В поддержку гибкого подхода к сбору требований они собираются по ходу работы, в отличие от классических подходов к хранилищам данных, где все требования определяются в начале проекта.</p>
<p>Лучший подход, который показал эффективность в наших проектах, заключается в использовании Raw Marts и оперативном разворачивании данных для обсуждения на встречах по сбору требований. Эти Raw Marts используются для создания отчетов или кубов для ограниченного числа бизнес-пользователей, которые участвуют в обсуждении требований, и не предназначены для широкого распространения. Это связано с тем, что Raw Marts содержат необработанные данные, которые могут быть без полноценно реализованных бизнес-правил.</p>
<p>Задача состоит в том, чтобы показать эти отчеты пользователям и спросить их: «Что не так с этим отчетом?» Оказывается, что бизнес-пользователи могут легко указать на проблемы в отчете и, таким образом, предоставить все бизнес-правила, которые IT необходимо внедрить для создания финального отчета.</p>
<p><strong>Процедура данного подхода к сбору требований включает следующие шаги:</strong></p>
<ul>
<li><strong>Идентификация необходимых данных:</strong> Как описано в предыдущем разделе, первый шаг — определить источники данных для Raw Mart и его отчета. Опять же, только данные, относящиеся к данному контексту, должны быть загружены в промежуточную область (staging area) и в корпоративное хранилище данных (enterprise data warehouse). Если возможно, объем данных следует уменьшить для ускоренного вывода. Например, данные, которые нужны только для финального отчета, но не для промежуточного необработанного отчета, следует исключить на этом этапе.</li>
<li><strong>Создание Raw Mart:</strong> После загрузки данных в Raw Data Vault на их основе создается Raw Mart. При загрузке Raw Mart не реализуются никакие бизнес-правила. Вместо этого данные просто переводятся из модели Data Vault в измерительную модель. Лучший подход для этого — использование виртуальных представлений (virtual views), так как их легко создавать.</li>
<li><strong>Создание Raw Reports:</strong> Как только данные попадают в измерительный Raw Mart, можно создавать Raw Reports (необработанные отчеты). Поскольку к данным не применены бизнес-правила, отчет содержит как хорошие, так и плохие, и проблемные данные.<br />
До этого момента IT контролирует время поставки. Они отвечают за то, чтобы быть гибкими до данного этапа. Следующие шаги выполняются уже со стороны бизнеса:</li>
</ul>
<ul>
<li><strong>Размещение Raw Reports на стене:</strong> Когда Raw Reports созданы на основе Raw Mart, они представляются участникам встречи по сбору требований. Хороший способ — распечатать их и повесить на одной стороне комнаты. Если это невозможно или непрактично, можно использовать LCD-проектор для демонстрации отчетов группе. Однако преимущество печатных отчетов на стене в том, что участники могут потратить столько времени, сколько им нужно, чтобы изучить отчет и добавить комментарии или исправления непосредственно на бумажную версию. Большинство проблем с отчетом становятся очевидными для участников. Они могут объяснить IT, в чем проблемы отчетов и почему их нельзя использовать в текущем виде.</li>
<li><strong>Сбор бизнес-правил и других требований:</strong> IT должно напрямую спрашивать участников, что делает отчет непригодным и как его можно сделать полезным для бизнеса. Какие изменения в данных необходимы, чтобы сделать их корректными? Ответы бизнес-пользователей содержат недостающие бизнес-правила, которые необходимо задокументировать в документе требований и применить к данным, загружаемым в Raw Report. Важно отметить, что следует меньше фокусироваться на оформлении отчета, поскольку этот вопрос должен решаться бизнесом и, в идеале, не должен зависеть от IT.<br />
Как только требования хотя бы частично собраны, IT снова берет на себя управление проектом, реализуя бизнес-правила и другие требования:</li>
<li><strong>Трансформация бизнес-правил и других требований:</strong> Последний шаг в этом цикле — перевод бизнес-правил и других требований, полученных от бизнеса и задокументированных в документе требований, в программную логику. Это можно сделать либо через ETL-потоки, либо виртуально в SQL-представлениях. Бизнес-правила превращают необработанные данные в информацию на пути от Raw Data Vault к Business Vault или Information Mart.</li>
</ul>
<p>После того как эти бизнес-правила были реализованы IT, бизнес-сторона проекта может просмотреть и протестировать результаты, а также запросить дальнейшие изменения, если итоговый результат их еще не удовлетворяет. Однако эти изменения становятся запросами на изменение (change requests) и реализуются в последующих спринтах. Описанный гибкий процесс сбора требований помогает бизнес-пользователям выразить свои бизнес-правила. Для многих из них традиционный подход, основанный на документах с требованиями, является слишком абстрактным и мешает своевременно выявлять проблемы с черновыми отчетами.</p>
<p><strong>Рекомендуемая практика — записывать эти встречи по сбору требований и создавать Wiki или другой веб-ресурс с поддержкой Web 2.0, доступный для всех сотрудников организации.</strong> Записи встреч, включая описание выявленных бизнес-правил, должны быть опубликованы на этом веб-ресурсе, чтобы обеспечить прозрачность процесса сбора требований. Механизмы Web 2.0 позволяют участникам оставлять комментарии или даже модифицировать бизнес-правила в соответствии со своим пониманием. Такой подход гарантирует, что требования изначально будут корректными.</p>
<p>Если на веб-ресурсе возникает много обсуждений, может потребоваться дополнительная встреча по сбору требований, чтобы уточнить открытые вопросы перед началом реализации. Проведение этих обсуждений до фактической реализации значительно повышает производительность и приносит значительную пользу всей организации, что способствует успеху проекта в целом.</p>
<p>Чтобы правильно определить объем функциональности, который команда способна реализовать за один спринт, важно уметь точно оценивать трудозатраты на выполнение определенных задач. Этот вопрос рассматривается в следующем разделе.</p>
<h3><strong>Оценка проекта</strong></h3>
<p>Процесс оценки в методологии Data Vault 2.0 основан на <strong>анализе функциональных точек (Function Point Analysis, FPA).</strong> Этот подход рекомендуется по сравнению с другими методами оценки, так как он предполагает разбиение функциональности на отдельные элементы, что в Data Vault 2.0 делать достаточно просто (благодаря стандартизированным артефактам). Используя FPA, члены команды оценивают необходимую функциональность хранилища данных, рассчитывая функциональные точки для отдельных элементов и оценочные часы, требуемые для их реализации.</p>
<h4><strong>Анализ функциональных точек</strong></h4>
<p>Успешные проекты по созданию хранилищ данных требуют реалистичного планирования усилий, которые необходимо затратить в ходе выполнения проекта. Для того чтобы планирование было реалистичным, необходимо использовать точный метод оценки.</p>
<p>Для оценки любого программного обеспечения, в том числе хранилищ данных, применяются метрики, позволяющие измерить объем выполненной и предстоящей работы. Функциональные точки являются единицей измерения и ключевым элементом анализа функциональных точек (FPA) – методики, широко используемой для оценки программного обеспечения.</p>
<p>Использование функциональных точек делает FPA независимым от метрик, зависящих от технологий, таких как количество строк кода (LOC) или других параметров, требующих определенных инструментов или платформ для измерения. Оценка по количеству строк кода несправедливо штрафует языки высокого уровня.</p>
<p>Например, одна и та же функциональность, запрашиваемая бизнес-пользователем, может потребовать 100 строк кода на C#, но 500 строк кода на C. Однако функциональные точки измеряют именно функциональность, предоставленную конечному пользователю, или ту, что будет предоставлена в будущем.</p>
<p>На рисунке 3.12 показаны функциональные характеристики программного обеспечения в индустрии авиаперевозок.</p>
<p><strong>Рисунок 3.12 Функциональные характеристики программного обеспечения</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_12_Functional_characteristics_of_software.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1238 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/3_12_Functional_characteristics_of_software.jpeg" alt="" width="971" height="653" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_12_Functional_characteristics_of_software.jpeg 971w, https://datatalks.ru/wp-content/uploads/2025/02/3_12_Functional_characteristics_of_software-300x202.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_12_Functional_characteristics_of_software-768x516.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_12_Functional_characteristics_of_software-370x250.jpeg 370w, https://datatalks.ru/wp-content/uploads/2025/02/3_12_Functional_characteristics_of_software-450x303.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_12_Functional_characteristics_of_software-780x525.jpeg 780w" sizes="(max-width: 971px) 100vw, 971px" /></a></p>
<p>Функциональные характеристики программного обеспечения включают:</p>
<ul>
<li><strong>Внешние входы (EI, External Inputs)</strong> – данные, поступающие в систему.</li>
<li><strong>Внешние выходы (EO, External Outputs)</strong> и внешние запросы (EQ, External Inquiries) – данные, покидающие систему тем или иным образом.</li>
<li><strong>Внутренние логические файлы (ILF, Internal Logical Files)</strong> – данные, созданные и хранящиеся внутри системы.</li>
<li><strong>Файлы внешнего интерфейса (EIF, External Interface Files)</strong> – данные, которые поддерживаются вне системы, но необходимы для выполнения задач.</li>
</ul>
<p>Оценка функциональных точек также включает оценку сложности системы в целом.</p>
<p>В методике анализа функциональных точек системы разбиваются на меньшие компоненты для более точного анализа.</p>
<p>В следующем разделе представлены основные этапы подсчета функциональных точек и выполнения анализа функциональных точек.</p>
<h4><strong>Измерение с использованием функциональных точек</strong></h4>
<p>Для измерения размера программной системы каждый из ее компонентов анализируется по характеристикам, описанным в предыдущем разделе. International Function Point User Group (IFPUG), организация, ответственная за анализ функциональных точек, рекомендует следующий порядок действий для выполнения измерения:</p>
<p><strong>Шаг 1: Определение типа подсчета функциональных точек</strong></p>
<p>Поскольку затраты оцениваются по-разному для новых и существующих проектов, оценщик должен выбрать один из следующих вариантов:</p>
<ul>
<li>Подсчет функциональных точек для проекта разработки (Development project function point count)</li>
<li>Подсчет функциональных точек для проекта улучшения (Enhancement project function point count)</li>
<li>Подсчет функциональных точек для приложения (Application function point count)</li>
</ul>
<p><strong>Шаг 2: Определение границы подсчета</strong></p>
<p>Необходимо определить и описать границы компонента, который будет измеряться. Это требуется, чтобы принять решение о том, какие функции включать в подсчет, а какие исключить. Также важно разграничить внутренние и внешние файлы, а также входные и выходные данные для компонента.</p>
<p><strong>Шаг 3: Определение и подсчет типов функций данных</strong></p>
<p>В предыдущем разделе были представлены два типа функций данных:</p>
<ul>
<li>Внутренние логические файлы (ILF, Internal Logical Files)</li>
<li>Файлы внешнего интерфейса (EIF, External Interface Files)</li>
</ul>
<p>Эти функции представляют функциональность пользователя для удовлетворения внутренних и внешних требований к данным.</p>
<p><strong>Шаг 4: Определение и подсчет типов транзакционных функций</strong></p>
<p>Транзакционные функции представляют функциональность системы, предназначенную для обработки данных в соответствии с требованиями пользователя. К ним относятся:</p>
<ul>
<li>Внешний ввод (EI, External Input)</li>
<li>Внешний вывод (EO, External Output)</li>
<li>Внешние запросы (EQ, External Inquiries)</li>
</ul>
<p><strong>Шаг 5: Определение необработанного количества функциональных точек</strong></p>
<p>Количество функциональных типов, полученных на этапах 3 и 4, корректируется с учетом сложности.</p>
<p><strong>Шаг 6: Определение коэффициента корректировки значений</strong></p>
<p>Коэффициент корректировки значений (Value Adjustment Factor, VAF) отражает общую ценность системы для пользователя, оценивая ее общую функциональность. Величина VAF определяется по 14 характеристикам системы.</p>
<p><strong>Шаг 7: Расчет итогового количества функциональных точек</strong></p>
<p>Итоговое количество функциональных точек рассчитывается с использованием одной из следующих формул, в зависимости от типа подсчета, выбранного на первом шаге.</p>
<p>Описанный порядок применим ко всем разработкам программного обеспечения, включая проекты хранилищ данных. В следующих разделах рассматривается, как этот процесс можно адаптировать для таких проектов.</p>
<h4><strong>Анализ функциональных точек для хранилищ данных</strong></h4>
<p>Чтобы применить анализ функциональных точек к хранилищам данных, оценщикам необходимо учитывать ряд специфических сложностей, характерных для таких проектов:</p>
<ul>
<li>Проекты хранилищ данных часто зависят от различных технологий и инструментов, используемых для решения бизнес-задач. Каждое из этих решений имеет свои преимущества и ограничения, которые необходимо учитывать при оценке усилий.</li>
<li>Бэкэнд-процессы, такие как ETL для загрузки уровня хранилища данных, часто включают множество взаимосвязанных процессов, необходимых для сбора требуемой информации. Это увеличивает сложность, что, в свою очередь, затрудняет процесс оценки.</li>
<li>Фронтенд, включающий OLAP-кубы, отчеты, панели мониторинга и другие графические интерфейсы, имеет свой набор факторов, которые следует учитывать при оценке. Например, необходимо учитывать производительность интерфейсов, удобочитаемость и т. д.</li>
</ul>
<p>При добавлении новой функциональности в систему проектная команда должна убедиться, что существующие функции не будут нарушены или испорчены ошибками. Поэтому в оценке необходимо учитывать затраты на регрессионное тестирование хранилища данных.</p>
<p>Так как хранилища данных могут загружать большие объемы данных ежедневно, в процессе оценки необходимо учитывать затраты на тестирование нагрузки для новых требований.</p>
<p>Эти вызовы делают традиционный процесс оценки, который широко используется в разработке программного обеспечения, затруднительным или даже невозможным. Это связано с процессно-ориентированным подходом в разработке ПО по сравнению с предметно-ориентированным подходом в хранилищах данных. В результате процесс должен быть адаптирован для использования в хранилищах данных.</p>
<h4><strong>Границы в хранилищах данных</strong></h4>
<p>Первый этап адаптации процесса – это определение границ компонента в хранилищах данных. Из-за многоуровневой архитектуры в этой области каждая функция должна быть реализована на нескольких уровнях системы. Компонент включает в себя все эти изменения (Рисунок 3.13).</p>
<p><strong>Рисунок 3.13. Границы приложения хранилища данных</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_13_Data_warehouse_application_boundary.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1239 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/3_13_Data_warehouse_application_boundary.jpeg" alt="" width="1150" height="335" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_13_Data_warehouse_application_boundary.jpeg 1150w, https://datatalks.ru/wp-content/uploads/2025/02/3_13_Data_warehouse_application_boundary-300x87.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_13_Data_warehouse_application_boundary-1024x298.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/02/3_13_Data_warehouse_application_boundary-768x224.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_13_Data_warehouse_application_boundary-450x131.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_13_Data_warehouse_application_boundary-780x227.jpeg 780w" sizes="(max-width: 1150px) 100vw, 1150px" /></a></p>
<p>На Рисунке 3.13 показано, что каждая функция включает:</p>
<ul>
<li>Таблицы промежуточного слоя (staging tables)</li>
<li>Объекты в ядре хранилища данных</li>
<li>Объекты витрины данных (data mart)</li>
</ul>
<p>Это также включает всю логику, реализованную в ETL, такую как бизнес-правила. Дополнительно в состав входят графические элементы, например:</p>
<p>Отчеты</p>
<ul>
<li>Размерности и показатели в OLAP-кубе</li>
<li>Элементы на панели мониторинга</li>
</ul>
<h4><strong>Оценка размера</strong></h4>
<p>Второй этап трансформации — это определение типов функций, используемых для оценки в проектах хранилищ данных. Поскольку архитектуры хранилищ данных часто следуют структурам, описанным в Главе 2, во время оценки используется таблица соответствий, представленная в Таблице 3.2.</p>
<p><strong>Таблица 3.2. Соответствие компонентов хранилища данных типам функциональных точек</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/table_3_2.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1253" src="https://datatalks.ru/wp-content/uploads/2025/02/table_3_2.jpeg" alt="" width="698" height="333" srcset="https://datatalks.ru/wp-content/uploads/2025/02/table_3_2.jpeg 698w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_2-300x143.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_2-450x215.jpeg 450w" sizes="(max-width: 698px) 100vw, 698px" /></a></p>
<p>Причина, по которой промежуточные таблицы (staging tables), находящиеся в границах хранилища данных, считаются внешними интерфейсными файлами (EIF), а не внутренними логическими файлами (ILF), заключается в том, что они в основном хранят внешние данные в виде прямой копии, дополненной простыми метаданными. Однако если к этим таблицам применяется внутренняя обработка, они считаются внутренними логическими файлами (ILF).</p>
<p>По той же причине <strong>целевые таблицы (target tables)</strong> считаются внутренними логическими файлами (ILF), а не внешними. Они обновляются данными, обработанными в пределах хранилища данных.</p>
<p><strong>Маппинги (mappings)</strong> в хранилище данных реализуют требуемую логику путем извлечения данных из исходных таблиц, их преобразования и загрузки в целевые таблицы. Они считаются внешним вводом (EI), поскольку изменяют поведение системы за счет реализации бизнес-правил.</p>
<p>В хранилищах данных маппинги часто используют <strong>справочные таблицы (lookup tables)</strong>, сопоставляющие коды с более описательными данными. Например, суррогатные ключи сопоставляются с бизнес-ключами, чтобы улучшить понимание данных конечными пользователями. Так как эти таблицы обеспечивают ценность для бизнеса, а не просто технические преимущества, они считаются <strong>внутренними логическими файлами (ILF)</strong>.</p>
<p><strong>Системные оповещения (Process alerts)</strong> информируют внешние системы о статусах процессов ETL и, следовательно, считаются внешним выводом (EO).</p>
<h4><strong>Оценка факторов сложности ETL</strong></h4>
<p>Третья трансформация заключается в определении факторов, влияющих на сложность процессов ETL. Типичные факторы сложности представлены на Рисунке 3.14.</p>
<p><strong>РИСУНОК 3.14 Диаграмма причин и следствий для факторов сложности ETL</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_14_Cause_and_effect_diagram_for_ETL_complexity_factors.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1240 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/3_14_Cause_and_effect_diagram_for_ETL_complexity_factors.jpeg" alt="" width="1658" height="640" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_14_Cause_and_effect_diagram_for_ETL_complexity_factors.jpeg 1658w, https://datatalks.ru/wp-content/uploads/2025/02/3_14_Cause_and_effect_diagram_for_ETL_complexity_factors-300x116.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_14_Cause_and_effect_diagram_for_ETL_complexity_factors-1024x395.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/02/3_14_Cause_and_effect_diagram_for_ETL_complexity_factors-768x296.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_14_Cause_and_effect_diagram_for_ETL_complexity_factors-1536x593.jpeg 1536w, https://datatalks.ru/wp-content/uploads/2025/02/3_14_Cause_and_effect_diagram_for_ETL_complexity_factors-450x174.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_14_Cause_and_effect_diagram_for_ETL_complexity_factors-780x301.jpeg 780w, https://datatalks.ru/wp-content/uploads/2025/02/3_14_Cause_and_effect_diagram_for_ETL_complexity_factors-1600x618.jpeg 1600w" sizes="(max-width: 1658px) 100vw, 1658px" /></a></p>
<p>Диаграмма показывает причины и следствия факторов сложности в типичных ETL-проектах. Однако не все эти факторы коррелируют с фактическими затратами усилий. Они зависят от организации и проектных команд. Чтобы выявить факторы, оказывающие влияние, требуется корреляционный анализ, например поэтапный метод регрессионного анализа (step-wise forward regression analysis).</p>
<p>Пример уравнения для регрессионного анализа в рамках конкретного проекта по хранилищу данных может выглядеть следующим образом (Уравнение 3.1):<br />
Пример уравнения для регрессионного анализа:</p>
<p>Y=A⋅x5+B⋅x9+C⋅x15+D⋅x16+E⋅x19+F⋅(x2⋅x4)+G⋅(x3⋅x4)+H<br />
Y=A⋅x5+B⋅x9+C⋅x15+D⋅x16+E⋅x19+F⋅(x2⋅x4)+G⋅(x3⋅x4)+H</p>
<p>Где:</p>
<p>x5: Количество целевых столбцов<br />
x9: Тип трансформации<br />
x15: Файл параметров, который необходимо изменить или создать<br />
x16: Новое сопоставление (mapping)<br />
x19: Неприведенные функциональные точки (unadjusted function points)<br />
x2x4: Объем обработанных данных * Количество трансформаций (взаимосвязанные факторы)<br />
x3x4: Критерии производительности * Количество трансформаций (взаимосвязанные факторы)</p>
<p>Фактическое уравнение для регрессионного анализа проекта также будет включать коэффициенты регрессии, которые в Уравнении 3.1 обозначены символами A–H.</p>
<h4><strong>Применение анализа функциональных точек к хранилищам данных</strong></h4>
<p><strong>Общая цель процесса оценки</strong> — стандартизация разработки бизнес-информационных систем путем повышения предсказуемости затрат усилий. Поскольку команда разработки оценивает требуемую функциональность с использованием систематического подхода, становится возможным сравнивать оценочные значения с фактическими значениями после реализации функциональности.</p>
<p>Когда оба значения сравниваются, члены команды могут извлекать уроки из предыдущих оценок и улучшать свои прогнозы в будущем.</p>
<p>Процесс оценки должен поддерживать IT-команду, когда бизнес запрашивает оценку сроков или затрат усилий на реализацию запрашиваемой функциональности.</p>
<p>Способность предоставлять обоснованные оценки является ключевым требованием CMMI (Capability Maturity Model Integration) для достижения уровней зрелости выше начального/выполняемого уровня.</p>
<p>Например, FPA может применяться на уровне зрелости 2 (управляемый уровень) для:</p>
<ul>
<li>Квантификации объема функциональных требований в управлении требованиями.</li>
<li>Оценки затрат усилий и стоимости в управлении проектами.</li>
<li>Предоставления данных по функциональным точкам руководству и т. д.</li>
</ul>
<p>Для выполнения процесса оценки с использованием FPA необходимо вести точные метрики по прошлым проектам разработки хранилищ данных.</p>
<p>Эти данные используются для корректировки уровня усилий в зависимости от организационных особенностей.</p>
<p>Количество человеко-часов зависит от сложности функциональности. Очевидно, что сложные функции требуют больше времени на реализацию, чем простые (в пересчете на функциональную точку).</p>
<p>Таблица 3.3 демонстрирует пример, который актуален в рамках одного конкретного проекта.</p>
<p><strong>Таблица 3.3 Человеко-часы на один функциональный пункт (Person Hours per Function Point)</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/table_3_3_Person_Hours_per_Function_Point.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1258 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/table_3_3_Person_Hours_per_Function_Point.jpeg" alt="" width="924" height="214" srcset="https://datatalks.ru/wp-content/uploads/2025/02/table_3_3_Person_Hours_per_Function_Point.jpeg 924w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_3_Person_Hours_per_Function_Point-300x69.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_3_Person_Hours_per_Function_Point-768x178.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_3_Person_Hours_per_Function_Point-450x104.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_3_Person_Hours_per_Function_Point-780x181.jpeg 780w" sizes="(max-width: 924px) 100vw, 924px" /></a></p>
<p>Обратите внимание, что Таблица 3.3 должна быть скорректирована для каждого оцениваемого проекта, а также эти значения меняются со временем, поскольку разработчики набираются опыта или, из-за текучки кадров, теряют его в команде.</p>
<p>Как мы уже обсуждали ранее, количество функциональных пунктов зависит от функциональных характеристик разрабатываемого программного обеспечения. Чтобы использовать FPA (анализ функциональных пунктов) в методологии Data Vault 2.0, функциональные характеристики ПО (внешние входные данные, внешние выходные данные, внешние запросы, внутренние логические файлы и внешние интерфейсные файлы) пришлось адаптировать, чтобы они отражали специфику проектов Data Vault. Определены следующие функциональные характеристики хранилищ данных, построенных с использованием Data Vault:</p>
<ul>
<li>Загрузка стейджа</li>
<li>Загрузка хаба</li>
<li>Загрузка линка</li>
<li>Загрузка сателлита</li>
<li>Загрузка измерения</li>
<li>Загрузка факта</li>
<li>Построение отчёта</li>
</ul>
<p>Аналогичным образом можно определить и другие функциональные характеристики, например, для <strong>PIT-таблиц (point-in-time)</strong>, мостовых таблиц, сущностей Business Vault или OLAP-кубов. В целом, процедуры загрузки в Data Vault 2.0 представляют собой EtL-паттерны (маленькая &#171;t&#187; в &#171;EtL&#187; означает, что трансформация минимальна): для загрузки Raw Data Vault требуется минимальное преобразование сырых данных. Следовательно, функциональные пункты для таких трансформаций должны быть низкими, что приводит к высокой степени оптимизации, низкому уровню сложности и простым расчётам функциональных пунктов.</p>
<p>Рассмотрите примерный список функциональных пунктов на единицу работы, представленный в Таблице 3.4, который используется для расчёта уровня трудозатрат.</p>
<p><strong>Таблица 3.4 Функциональные пункты и уровень трудозатрат</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/table_3_4_Function_Points_and_Level_of_Effort.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1259 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/table_3_4_Function_Points_and_Level_of_Effort.jpeg" alt="" width="755" height="618" srcset="https://datatalks.ru/wp-content/uploads/2025/02/table_3_4_Function_Points_and_Level_of_Effort.jpeg 755w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_4_Function_Points_and_Level_of_Effort-300x246.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_4_Function_Points_and_Level_of_Effort-450x368.jpeg 450w" sizes="(max-width: 755px) 100vw, 755px" /></a></p>
<p>Пример показывает, что каждый тип функциональности должен оцениваться независимо от других типов. Колонка Item указывает тип функциональности. Вторая колонка указывает коэффициент сложности элемента. Показанные значения являются типичными. Однако также возможно, что существуют сателлиты в категории «простой» и «средний» (некоторые сателлиты содержат небольшое количество атрибутов, что делает процесс загрузки значительно проще среднего). По этой причине для сателлитов с различными коэффициентами сложности добавлено несколько строк.</p>
<p>Оценочные функциональные пункты указывают количество функциональных пунктов, рассчитанных для данного типа элемента. Колонка Estimated Total Hours представляет собой произведение колонки Estimated Function Points из Таблицы 3.4 на значение Person Hours per Function Point из Таблицы 3.3.</p>
<p>Обратите внимание, что проводится различие между «узкими» (thin) и «широкими» (wide) сателлитами. Это различие относится к количеству колонок, а не к физической ширине таблицы, которая зависит от числа колонок и ширины каждой колонки в байтах. В общем случае, чем больше колонок содержит сателлит, тем более сложной становится логика загрузки, тем выше вероятность возникновения опечаток, загрузки неверных полей в неправильные цели или пропуска сравнения колонок. Именно поэтому данная таблица разделяет такие загрузки.</p>
<p>Аналогичным образом эта же концепция применяется к модульным тестам во второй части Таблицы 3.4. Для каждого элемента и соответствующей сложности тестирования оцениваются функциональные пункты и рассчитывается итоговое оценочное количество человеко-часов, которое снова основано на данных Таблицы 3.3. Таким образом, вторая часть таблицы оказывается очень похожей на первую, но она корректируется с учетом различий в трудозатратах между реализацией и тестированием.</p>
<p>Необходимо помнить, что данная таблица должна составляться индивидуально для каждого проекта и обновляться со временем. Может потребоваться дополнительное различение между менее или более сложными рабочими элементами (например, загрузками сателлитов в примере из Таблицы 3.4). Чтобы запустить этот процесс, важно следовать общей процедуре, описанной ранее, чтобы получить оценку функциональных пунктов, которая соотносится с фактическими трудозатратами на создание элементов, а также отслеживать количество человеко-часов, требуемых для реализации и тестирования этих функциональных пунктов.</p>
<p>Таким образом, отслеживание человеко-часов на функциональный пункт становится важным шагом в первом цикле разработки, прежде чем можно будет точно оценивать трудозатраты в будущем. Это связано с тем, что оценки основываются на прошлом опыте в конкретном контексте. Невозможно (без сложной трансформации) использовать опыт из одного контекста (например, одной организации) для оценки трудозатрат в другом контексте, поскольку между организациями существует множество различий – например, уровень зрелости, уровень опыта разработчиков и менеджмента, а также соотношение внутреннего и внешнего персонала (внешний персонал может приносить в компанию специализированный опыт).</p>
<h4><strong>Функциональные пункты для корпоративного хранилища данных</strong></h4>
<p>Хотя оценочные человеко-часы на один функциональный пункт можно напрямую взять из предыдущих проектов или спринтов, количество функциональных пунктов на элемент должно определяться иначе (но это можно делать на уровне всей организации и требует меньшего обслуживания). Существует несколько общих правил для определения количества функциональных пунктов, которые должны быть связаны с различными элементами:</p>
<ul>
<li><strong>Стейджинг-таблицы:</strong> Количество функциональных пунктов зависит от необходимого уровня нормализации. Рассмотрим случай плоских файлов в формате CSV, которые не требуют нормализации (для стейджинга), поскольку все колонки могут быть добавлены в стейджинг напрямую. Сравните это с файлами XML или COBOL, которые не так просто загрузить в реляционные таблицы, как файлы CSV, из-за наличия вложенных структур. Для загрузки таких данных требуется определённое усилие по нормализации, чтобы преобразовать данные из их структурированного формата в набор реляционных таблиц. Однако можно избежать этих затрат на нормализацию, загружая данные в иерархические таблицы (например, используя тип данных XML), что приведёт к (значительному) снижению производительности.</li>
<li><strong>Загрузки стейджинга и Data Vault:</strong> В зависимости от сложности ETL-процесса, необходимого для загрузки стейджинг-таблиц или сущностей Data Vault (таких как хабы, линки, сателлиты и т. д.), количество функциональных пунктов будет различаться. Функциональные пункты для хабов, как правило, одинаковы, независимо от размера или состава бизнес-ключа. В остальных случаях это правило не работает: чем больше хабов связано с линком, тем больше функциональных пунктов должно быть назначено из-за немного более сложного ETL-потока данных (однако все линковые связи между двумя хабами должны иметь одинаковое количество функциональных пунктов). Также влияют такие факторы, как количество атрибутов в сателлите, перегрузка сателлитов и их разбиение. Однако основное внимание следует уделять сложности самого маппинга для этой функциональной характеристики. Общее правило: хабы загружаются проще всего, линки — от простых до средних, а сателлиты часто загружаются со средней или высокой сложностью.</li>
<li><strong>Загрузки информационных витрин:</strong> В этих функциональных характеристиках ключевым фактором являются количество и сложность бизнес-правил, а также количество дополнительных колонок, реализуемых в процессе ETL-загрузки. Также важно учитывать, где именно реализуются бизнес-правила — в ETL или виртуально в SQL-представлениях. Кроме того, следует различать функциональные пункты для таблиц фактов, измерений, OLAP-кубов, реляционных отчётов и т. д.</li>
<li><strong>Загрузки Business Vault:</strong> Они схожи с информационными витринами, поскольку также включают реализацию бизнес-правил.</li>
</ul>
<p>Эти общие правила должны помочь командам разработки при определении функциональных пунктов, связанных с конкретными функциональными характеристиками. Следует отметить, что оценочные человеко-часы не только на разработку, но и на поддержку значительно сокращаются при автоматизации процесса загрузки Data Vault — концепции, которая выходит за рамки данной книги.</p>
<p><strong>Когда организации продвигаются по уровням зрелости CMMI,</strong> они осознают, что оценка на основе функциональных пунктов со временем становится проще. Это связано с тем, что последовательные и воспроизводимые бизнес-процессы легче прогнозировать, поскольку опыт из прошлого действительно можно применять к таким процессам. Без такой последовательности выполнение оценок оказывается необоснованным, так как обстоятельства выполнения процессов постоянно меняются. Чётко определённые стандарты помогают организациям достигать таких последовательных и воспроизводимых бизнес-процессов.</p>
<p><strong>Анализ функциональных пунктов (FPA)</strong> также способствует продвижению измеримых и оптимизируемых компонентов, которые необходимы для проведения оценки. Этой цели способствует разделение отдельных компонентов, которые должны быть поставлены бизнесу. Без такого разделения оценки перекрывали бы функциональность, что снижало бы их точность. Выявление компонентов также снижает неопределённость относительно того, что и когда будет поставлено. Поскольку каждый компонент должен быть идентифицирован и описан, становится возможным планирование его поставки.</p>
<p>Общая цель процесса оценки — сделать усилия по разработке хранилища данных более предсказуемыми. Это помогает обосновать затраты на проект хранилища данных и обеспечить дальнейшее финансирование со стороны бизнеса. Поскольку корректные оценки формируют доверие к команде разработки и к бизнесу, они являются центральной частью методологии Data Vault 2.0.</p>
<p>Как только команда определила, что и в каком объёме будет поставлено в предстоящем спринте, фокус смещается на выполнение проекта, которое рассматривается в следующем разделе.</p>
<h2><strong>Выполнение проекта</strong></h2>
<p>Будучи гибкой, методология Data Vault 2.0 следует Scrum для организации команды и использует эволюционный и итеративный подход, аналогичный Scrum. Следующие рекомендации помогают сделать этот подход успешным:</p>
<ul>
<li><strong>Определить начальную архитектуру:</strong> Поскольку в рамках спринта нет времени на разработку окончательной архитектуры за один шаг, требуется начальная архитектура, позволяющая применять эволюционный подход.</li>
<li><strong>Моделировать детали &#171;just-in-time&#187;:</strong> Вместо того чтобы заранее моделировать всё корпоративное хранилище данных, моделируйте только те области, которые необходимы для реализации функционала в рамках текущего спринта.</li>
<li><strong>Раннее подтверждение архитектурных решений:</strong> Убедитесь, что архитектурные решения проверяются на ранних этапах. Лучше потерпеть неудачу в начале процесса и внести соответствующие изменения в архитектуру, чем столкнуться с проблемами позднее (что может привести к значительным затратам). Поздние изменения в архитектуре обходятся очень дорого.</li>
<li><strong>Фокус на использовании:</strong> Реализуйте только ту функциональность, которая имеет непосредственную бизнес-ценность.</li>
<li><strong>Избегайте стремления к &#171;единой истине&#187;:</strong> Фокусируйтесь на фактах и данных (подробнее об этом можно узнать в Главе 1, разделах 1.2.3 и 1.2.4).</li>
<li><strong>Организация работы по требованиям:</strong> Поскольку требования проще документировать и изменять, чем реализовывать или модифицировать саму реализацию, фиксация требований даёт значительную пользу для выполнения проекта.</li>
<li><strong>Активное участие заинтересованных сторон:</strong> Следуйте Scrum, проводя ежедневные стендапы. Убедитесь, что заинтересованные стороны присутствуют на этих встречах и участвуют в обсуждении.</li>
</ul>
<p>Итеративный подход в Data Vault 2.0 реализуется с помощью спринтов продолжительностью от двух до трёх недель. Длина спринта зависит от возможностей организации. Обычно организации начинают с более длинных циклов, например три-четыре недели, когда только внедряют гибкие методологии, но затем стараются сократить продолжительность спринтов ради более частых релизов. То же самое применяется в методологии Data Vault 2.0 и подтверждается практическим опытом. Хорошим стартом для организаций является спринт продолжительностью три недели, разделённый на этапы, представленные в Таблице 3.5.</p>
<p><strong>Таблица 3.5. Цели гибкой поставки</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/table_3_5_Agile_Delivery_Objective.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1260" src="https://datatalks.ru/wp-content/uploads/2025/02/table_3_5_Agile_Delivery_Objective.jpeg" alt="" width="468" height="155" srcset="https://datatalks.ru/wp-content/uploads/2025/02/table_3_5_Agile_Delivery_Objective.jpeg 468w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_5_Agile_Delivery_Objective-300x99.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_5_Agile_Delivery_Objective-450x149.jpeg 450w" sizes="(max-width: 468px) 100vw, 468px" /></a></p>
<p>Таблица 3.5 показывает, что команда выполняет внутри спринта «мини-водопад». Этот водопад следует традиционному жизненному циклу разработки программного обеспечения (SDLC), который кратко описан в разделе 3.2.1. Применение этих концепций в методологии Data Vault 2.0 рассмотрено в разделе 3.2.2.</p>
<h3><strong>Традиционный жизненный цикл разработки программного обеспечения</strong></h3>
<p>Традиционно проекты по разработке хранилищ данных следовали одной из разновидностей модели жизненного цикла разработки программного обеспечения, называемой каскадной моделью (waterfall model). В литературе существуют различные её версии с разным количеством этапов и их названиями, однако все они основаны на поэтапном подходе. Кроме того, этим моделям присущи детальное планирование, за которым следуют всестороннее проектирование, реализация и тестирование. Входные данные от пользователей предоставляются в начале процесса, а затем передаются в техническую систему во время реализации и тестирования. Некоторые из этих поэтапных моделей допускают возврат на предыдущие этапы, например, если в ходе системного тестирования выявлены проблемы, требующие дополнительного участия пользователей.</p>
<p>Рисунок 3.15 демонстрирует репрезентативную версию оригинальной каскадной методологии.</p>
<p><strong>РИСУНОК 3.15. Каскадная модель</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_15_Waterfall_model.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1241 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/3_15_Waterfall_model.jpeg" alt="" width="806" height="391" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_15_Waterfall_model.jpeg 806w, https://datatalks.ru/wp-content/uploads/2025/02/3_15_Waterfall_model-300x146.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_15_Waterfall_model-768x373.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_15_Waterfall_model-450x218.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_15_Waterfall_model-780x378.jpeg 780w" sizes="(max-width: 806px) 100vw, 806px" /></a></p>
<p>На рисунке показано, что данная модель включает пять этапов:</p>
<ul>
<li>Инженерия требований</li>
<li>Проектирование</li>
<li>Реализация и модульное тестирование</li>
<li>Интеграционное и системное тестирование</li>
<li>Эксплуатация и сопровождение</li>
</ul>
<p>Проектная команда начинает с этапа инженерии требований и последовательно проходит через предопределённые этапы. Чтобы перейти к следующему этапу, команда должна полностью завершить текущий, так как возврат к предыдущему этапу невозможен. В каскадной методологии проект, как правило, терпит неудачу, если необходимо внести изменения в результаты предыдущего этапа. Именно эта неспособность справляться с изменениями в течение жизненного цикла проекта является основным недостатком каскадной модели при разработке хранилищ данных (аналогично проектам по созданию систем онлайн-обработки транзакций).</p>
<p>Несмотря на свои недостатки, такие как длительные циклы проектов, каскадная модель стала предшественницей многих современных методологий в области хранилищ данных. В следующих разделах рассматриваются отдельные этапы каскадной модели более подробно.</p>
<h4><strong>Инженерия требований</strong></h4>
<p>На этом этапе проектная команда собирает и аккумулирует все бизнес- и технические требования организации. Основным результатом данного этапа является документ «Определение хранилища данных» (Data Warehouse Definition), который эквивалентен документу «Спецификация требований к программному обеспечению» (Software Requirements Specification, SRS) в области разработки операционного ПО. Этот документ полностью описывает все необходимые функции и ограничения создаваемого хранилища данных, включая следующие требования:</p>
<ul>
<li>Требования к данным в рамках бизнес-областей</li>
<li>Архитектурные требования</li>
<li>Требования к аудиту</li>
<li>Требования к архивированию</li>
</ul>
<p>Основной сложностью на данном этапе является консолидация однозначного набора пользовательских требований, что зачастую затруднено из-за противоречий между различными категориями пользователей. Поэтому данный этап часто является самым сложным и трудозатратным в каскадной модели.</p>
<p>Для сбора системных требований аналитики используют различные традиционные и современные методы.</p>
<p><strong>Традиционные методы включают следующее:</strong></p>
<ul>
<li>Интервью с людьми, обладающими глубокими знаниями о текущих и будущих бизнес-процессах и операциях системы.</li>
<li>Наблюдение за работниками в определённые моменты времени для понимания того, как обрабатываются данные, а также для сбора информации об их потребностях.</li>
<li>Анализ бизнес-документов с целью выявления проблем, политик, правил и направлений развития. Кроме того, анализируются конкретные примеры данных и их использования внутри организации.</li>
</ul>
<p><strong>Современные методы включают следующее:</strong></p>
<ul>
<li><strong>Совместное проектирование приложений (Joint Application Design, JAD)</strong>, при котором ключевые пользователи, менеджеры и системные аналитики совместно собирают системные требования.</li>
<li>Прототипирование для дополнения процесса определения требований.</li>
</ul>
<p>Общей целью этих методов является выявление и сбор требований от бизнес-пользователей для их последующей передачи на следующие этапы процесса, которые описаны в последующих разделах.</p>
<h4><strong>Проектирование</strong></h4>
<p>На этапе проектирования разработчики хранилища данных разрабатывают его архитектуру, включая уровни и модули системы. Определение архитектуры основывается на документе «Определение хранилища данных» (Data Warehouse Definition) и включает в себя описание баз данных для каждого уровня, таких как структура таблиц промежуточного слоя (staging area), таблиц уровня хранилища данных (data warehouse layer) и звездной схемы в витрине данных (data mart). Для каждой базы данных определяются названия и столбцы всех таблиц. Часто определение базы данных выполняется с использованием инструментов моделирования «сущность-связь» (ER), которые позволяют создавать и документировать структуру базы данных.</p>
<p>Microsoft SQL Server 2012 включает SQL Server Management Studio, который позволяет быстро создавать и заполнять каждый уровень хранилища данных, используя инструмент Visual Database Tool Designer.</p>
<p>Еще одной важной задачей является выбор необходимого аппаратного и программного обеспечения на основе требований к производительности, безопасности и хранению данных для всей системы. В некоторых проектах уже существует инфраструктура для хранилища данных. В таких случаях необходимо создать новые базы данных для нового проекта, а провайдер инфраструктуры проверит, хватает ли имеющихся мощностей для его обслуживания.</p>
<p>В других проектах, где организация только внедряет хранилище данных, необходимо создать новую инфраструктуру. Эту задачу не следует недооценивать, так как она часто превращается в самостоятельный проект, включающий закупку оборудования и сопутствующих услуг, таких как резервное копирование и восстановление, развертывание новых функций, отслеживание ошибок, поддержка конечных пользователей, обслуживание сети и другие.</p>
<h4><strong>Реализация и модульное тестирование</strong></h4>
<p>После того как хранилище данных было описано (на этапе определения требований) и спроектировано (на этапе проектирования), разработчики хранилища данных реализуют отдельные модули системы. В процессе разработки они также тестируют модули и устраняют найденные ошибки.</p>
<p>Microsoft SQL Server 2012 включает различные инструменты для создания хранилища данных. Большинство из них доступны в среде разработки Microsoft Business Intelligence Development Studio. В эту среду разработки входят следующие инструменты:</p>
<ul>
<li><strong>SQL Server Integration Services</strong> – для интеграции данных</li>
<li><strong>SQL Server Analysis Services</strong> – для разработки многомерных хранилищ данных (OLAP-кубов) и выполнения задач интеллектуального анализа данных (data mining)</li>
<li><strong>SQL Server Reporting Services</strong> – для разработки отчетов на основе реляционных и многомерных источников данных</li>
</ul>
<p>Кроме того, большинство команд используют дополнительные инструменты от Microsoft или сторонних поставщиков ПО. Среди часто используемых инструментов:</p>
<ul>
<li>OLAP-клиенты для удобного просмотра OLAP-кубов и расширенных возможностей отчетности</li>
<li>Среды анализа данных для предоставления расширенных аналитических возможностей конечным пользователям</li>
<li>Инструменты ER-моделирования для определения и документирования баз данных</li>
<li>Инструменты автоматизации наполнения хранилища данных, такие как генераторы DDL (Data Definition Language)</li>
<li>Инструменты профилирования данных для более глубокого понимания исходных данных</li>
<li>Инструменты обеспечения качества данных для очистки и оценки данных</li>
</ul>
<h4><strong>Интеграция и системное тестирование</strong></h4>
<p>Хотя разработчики хранилища данных реализовали и протестировали модули хранилища отдельно, на этом этапе выполняется их интеграция. Отдельные модули соединяются друг с другом и интегрируются. Этот процесс интеграции начинается с некоторых модулей на нижнем уровне архитектуры, которые полностью интегрируются и тестируются (Рисунок 3.16).</p>
<p><strong>РИСУНОК 3.16. Тестирование снизу вверх</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_16_Bottom_up_testing.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1242" src="https://datatalks.ru/wp-content/uploads/2025/02/3_16_Bottom_up_testing.jpeg" alt="" width="1160" height="492" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_16_Bottom_up_testing.jpeg 1160w, https://datatalks.ru/wp-content/uploads/2025/02/3_16_Bottom_up_testing-300x127.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_16_Bottom_up_testing-1024x434.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/02/3_16_Bottom_up_testing-768x326.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_16_Bottom_up_testing-450x191.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_16_Bottom_up_testing-780x331.jpeg 780w" sizes="(max-width: 1160px) 100vw, 1160px" /></a></p>
<p>После успешного прохождения тестов модули добавляются в систему путем интеграции. После завершения интеграции этих единиц система снова тестируется в целом. Когда все модули нижнего уровня, которые можно объединить, интегрированы, команда интеграции переходит на следующий уровень и объединяет более крупные части. Затем новый, более крупный модуль снова тестируется, чтобы проверить, работают ли все его подмодули без ошибок.</p>
<p>Поскольку такой подход к тестированию требует многократного запуска тестов, на этом этапе часто используются инструменты автоматизированного тестирования.</p>
<h4><strong>Эксплуатация и сопровождение</strong></h4>
<p>На последнем этапе каскадной модели хранилище данных передается в эксплуатацию, где система устанавливается на стороне конечных пользователей для регулярного использования. Если пользователи обнаруживают ошибки в хранилище данных, команда эксплуатации отвечает за их исправление и внесение других изменений в систему. Этот непрерывный процесс выполняется до тех пор, пока хранилище данных не будет выведено из эксплуатации или заменено новым хранилищем.</p>
<p>Для поддержки команды эксплуатации и сопровождения команда разработчиков хранилища должна предоставить как документацию для конечных пользователей, так и административную документацию, включая инструкции по техническому обслуживанию хранилища (например, загрузка новых данных или настройка существующих отчетов).</p>
<h3><strong>Применение жизненного цикла разработки ПО к методологии Data Vault 2.0</strong></h3>
<p>Жизненный цикл разработки программного обеспечения применяется в рамках спринта методологии Data Vault 2.0 в виде мини-водопада. Для выполнения этого мини-водопада используется проектный план. В таблице 3.6 приведён пример реализации нового отчёта.</p>
<p><strong>Таблица 3.6. Agile-план проекта</strong></p>
<table border="0" cellspacing="0">
<colgroup width="43"></colgroup>
<colgroup width="85"></colgroup>
<colgroup width="328"></colgroup>
<colgroup width="85"></colgroup>
<colgroup width="126"></colgroup>
<tbody>
<tr>
<td align="center" bgcolor="#B4C7DC" height="20" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;ID&quot;}"><b><span style="font-family: Liberation Serif; font-size: medium;">ID</span></b></td>
<td align="center" bgcolor="#B4C7DC" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;WBS&quot;}"><b><span style="font-family: Liberation Serif; font-size: medium;">WBS</span></b></td>
<td align="center" bgcolor="#B4C7DC" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Task Name&quot;}"><b><span style="font-family: Liberation Serif; font-size: medium;">Task Name</span></b></td>
<td align="center" bgcolor="#B4C7DC" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Duration&quot;}"><b><span style="font-family: Liberation Serif; font-size: medium;">Duration</span></b></td>
<td align="center" bgcolor="#B4C7DC" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Predecessors&quot;}"><b><span style="font-family: Liberation Serif; font-size: medium;">Predecessors</span></b></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">1</span></td>
<td align="center"><span style="font-family: Liberation Serif;">3</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Agile Delivery of Single Requirements&quot;}"><b><span style="font-family: Liberation Serif;">Agile Delivery of Single Requirements</span></b></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;58 hrs&quot;}"><b><span style="font-family: Liberation Serif;">58 hrs</span></b></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;&quot;}"><span style="font-family: Liberation Serif;"> </span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">2</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.1&quot;}"><span style="font-family: Liberation Serif;">3.1</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Choose Report to Produce (Scope)&quot;}"><span style="font-family: Liberation Serif;">Choose Report to Produce (Scope)</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;0.5 hrs&quot;}"><span style="font-family: Liberation Serif;">0.5 hrs</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;&quot;}"><span style="font-family: Liberation Serif;"> </span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">3</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.2&quot;}"><span style="font-family: Liberation Serif;">3.2</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Estimate Work Effort&quot;}"><span style="font-family: Liberation Serif;">Estimate Work Effort</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;0.5 hrs&quot;}"><span style="font-family: Liberation Serif;">0.5 hrs</span></td>
<td align="center"><span style="font-family: Liberation Serif;">2</span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">4</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.3&quot;}"><span style="font-family: Liberation Serif;">3.3</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Fill in Risk Assessment&quot;}"><span style="font-family: Liberation Serif;">Fill in Risk Assessment</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;0.5 hrs&quot;}"><span style="font-family: Liberation Serif;">0.5 hrs</span></td>
<td align="center"><span style="font-family: Liberation Serif;">3</span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">5</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.4&quot;}"><span style="font-family: Liberation Serif;">3.4</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Identify Source\/Stage Tables for Report&quot;}"><b><span style="font-family: Liberation Serif;">Identify Source/Stage Tables for Report</span></b></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;4 hrs&quot;}"><b><span style="font-family: Liberation Serif;">4 hrs</span></b></td>
<td align="center"><span style="font-family: Liberation Serif;">4</span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">6</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.4.1&quot;}"><span style="font-family: Liberation Serif;">3.4.1</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Source to Requirements Matrix&quot;}"><span style="font-family: Liberation Serif;">Source to Requirements Matrix</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;4 hrs&quot;}"><span style="font-family: Liberation Serif;">4 hrs</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;&quot;}"><span style="font-family: Liberation Serif;"> </span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">7</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.5&quot;}"><span style="font-family: Liberation Serif;">3.5</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Design ER Data Vault Model&quot;}"><span style="font-family: Liberation Serif;">Design ER Data Vault Model</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;2 hrs&quot;}"><span style="font-family: Liberation Serif;">2 hrs</span></td>
<td align="center"><span style="font-family: Liberation Serif;">3</span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">8</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.6&quot;}"><span style="font-family: Liberation Serif;">3.6</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Add Attributes to ER Data Vault Model&quot;}"><span style="font-family: Liberation Serif;">Add Attributes to ER Data Vault Model</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;6 hrs&quot;}"><span style="font-family: Liberation Serif;">6 hrs</span></td>
<td align="center"><span style="font-family: Liberation Serif;">7</span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">9</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.7&quot;}"><span style="font-family: Liberation Serif;">3.7</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Create ETL Data Vault Loads&quot;}"><b><span style="font-family: Liberation Serif;">Create ETL Data Vault Loads</span></b></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;4 hrs&quot;}"><b><span style="font-family: Liberation Serif;">4 hrs</span></b></td>
<td align="center"><span style="font-family: Liberation Serif;">8</span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">10</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.7.1&quot;}"><span style="font-family: Liberation Serif;">3.7.1</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Create Hub Loads&quot;}"><span style="font-family: Liberation Serif;">Create Hub Loads</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;1 hr&quot;}"><span style="font-family: Liberation Serif;">1 hr</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;&quot;}"><span style="font-family: Liberation Serif;"> </span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">11</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.7.2&quot;}"><span style="font-family: Liberation Serif;">3.7.2</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Create Link Loads&quot;}"><span style="font-family: Liberation Serif;">Create Link Loads</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;1 hr&quot;}"><span style="font-family: Liberation Serif;">1 hr</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;&quot;}"><span style="font-family: Liberation Serif;"> </span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">12</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.7.3&quot;}"><span style="font-family: Liberation Serif;">3.7.3</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Create Satellite Loads&quot;}"><span style="font-family: Liberation Serif;">Create Satellite Loads</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;2 hrs&quot;}"><span style="font-family: Liberation Serif;">2 hrs</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;&quot;}"><span style="font-family: Liberation Serif;"> </span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">13</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.8&quot;}"><span style="font-family: Liberation Serif;">3.8</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Design Data Mart Model for Report&quot;}"><span style="font-family: Liberation Serif;">Design Data Mart Model for Report</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;4 hrs&quot;}"><span style="font-family: Liberation Serif;">4 hrs</span></td>
<td align="center"><span style="font-family: Liberation Serif;">3</span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">14</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.9&quot;}"><span style="font-family: Liberation Serif;">3.9</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Create ETL Data Vault to Information Mart&quot;}"><b><span style="font-family: Liberation Serif;">Create ETL Data Vault to Information Mart</span></b></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;16 hrs&quot;}"><b><span style="font-family: Liberation Serif;">16 hrs</span></b></td>
<td align="center"><span style="font-family: Liberation Serif;">13</span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">15</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.9.1&quot;}"><span style="font-family: Liberation Serif;">3.9.1</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Build Dimension Loads&quot;}"><span style="font-family: Liberation Serif;">Build Dimension Loads</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;8 hrs&quot;}"><span style="font-family: Liberation Serif;">8 hrs</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;&quot;}"><span style="font-family: Liberation Serif;"> </span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">16</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.9.2&quot;}"><span style="font-family: Liberation Serif;">3.9.2</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Build Fact Loads&quot;}"><span style="font-family: Liberation Serif;">Build Fact Loads</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;8 hrs&quot;}"><span style="font-family: Liberation Serif;">8 hrs</span></td>
<td align="center"><span style="font-family: Liberation Serif;">15</span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">17</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.10&quot;}"><span style="font-family: Liberation Serif;">3.10</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Build Report and Produce Output&quot;}"><span style="font-family: Liberation Serif;">Build Report and Produce Output</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;8 hrs&quot;}"><span style="font-family: Liberation Serif;">8 hrs</span></td>
<td align="center"><span style="font-family: Liberation Serif;">13</span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">18</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.11&quot;}"><span style="font-family: Liberation Serif;">3.11</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Create Source-to-Target Report for Project Documentation&quot;}"><span style="font-family: Liberation Serif;">Create Source-to-Target Report for Project Documentation</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;2 hrs&quot;}"><span style="font-family: Liberation Serif;">2 hrs</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;5;8;13&quot;}"><span style="font-family: Liberation Serif;">5;8;13</span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">19</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.12&quot;}"><span style="font-family: Liberation Serif;">3.12</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Unit Test&quot;}"><span style="font-family: Liberation Serif;">Unit Test</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;4 hrs&quot;}"><span style="font-family: Liberation Serif;">4 hrs</span></td>
<td align="center"><span style="font-family: Liberation Serif;">17</span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">20</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.13&quot;}"><span style="font-family: Liberation Serif;">3.13</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Record Actual Effort&quot;}"><span style="font-family: Liberation Serif;">Record Actual Effort</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;0.5 hrs&quot;}"><span style="font-family: Liberation Serif;">0.5 hrs</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;&quot;}"><span style="font-family: Liberation Serif;"> </span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">21</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.14&quot;}"><span style="font-family: Liberation Serif;">3.14</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Sign-off&quot;}"><span style="font-family: Liberation Serif;">Sign-off</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;1 hr&quot;}"><span style="font-family: Liberation Serif;">1 hr</span></td>
<td align="center"><span style="font-family: Liberation Serif;">20</span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">22</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.15&quot;}"><span style="font-family: Liberation Serif;">3.15</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Deploy to Test Environment&quot;}"><span style="font-family: Liberation Serif;">Deploy to Test Environment</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;2 hrs&quot;}"><span style="font-family: Liberation Serif;">2 hrs</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;&quot;}"><span style="font-family: Liberation Serif;"> </span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">23</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.16&quot;}"><span style="font-family: Liberation Serif;">3.16</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Run User Acceptance Test&quot;}"><span style="font-family: Liberation Serif;">Run User Acceptance Test</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;2 hrs&quot;}"><span style="font-family: Liberation Serif;">2 hrs</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;&quot;}"><span style="font-family: Liberation Serif;"> </span></td>
</tr>
<tr>
<td align="center" height="17"><span style="font-family: Liberation Serif;">24</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;3.17&quot;}"><span style="font-family: Liberation Serif;">3.17</span></td>
<td align="left" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Deploy to Production&quot;}"><span style="font-family: Liberation Serif;">Deploy to Production</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;1 hr&quot;}"><span style="font-family: Liberation Serif;">1 hr</span></td>
<td align="center" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;22;23&quot;}"><span style="font-family: Liberation Serif;">22;23</span></td>
</tr>
</tbody>
</table>
<p>Идентификатор (ID) определяет задачу в инструменте управления проектами, таком как Microsoft Project. В основном он используется внутри системы, например, в колонке «Предшественники» (Predecessors), где указываются зависимости между отдельными задачами. Колонка WBS используется для добавления проектной референсной строки к задаче. В следующем разделе обсуждается, как использовать этот идентификатор.</p>
<p>Колонка «Название задачи» (Task Name) содержит читаемое пользователем название, а колонка «Длительность» (Duration) показывает примерное время, необходимое для завершения задачи. В дополнение к длительности во многих проектах добавляется колонка «Объём работы» (Work), которая оценивает трудозатраты. Это необходимо, так как трудозатраты и длительность задачи могут различаться, если над одной задачей работают несколько сотрудников на полной ставке. Этот параметр может использоваться дополнительно к оценкам, полученным с помощью анализа функциональных точек (см. раздел 3.1.4).</p>
<p>Большинство инструментов управления проектами, включая Microsoft Project, поддерживают необязательную колонку «Заметки» (Notes), которая не показана в таблице 3.6. Её можно использовать для включения ссылок на дополнительные зависимости (по их техническим номерам), чтобы идентифицировать оставшиеся артефакты. Эта концепция эквивалентна проектной референсной строке в колонке WBS и также будет описана в одном из следующих разделов.</p>
<p>Обратите внимание, что проектный план в таблице 3.6 показывает рассчитанную длительность для двухнедельного спринта с общим объёмом в 58 часов. В этом примере также предполагается использование инструментов автоматизации для загрузки данных в Data Vault через ETL (элемент 3.7). Если автоматизация не используется, рекомендуется добавить детализированные задачи для загрузки хабов, связей и спутников (под элементами 3.7.1, 3.7.2 и 3.7.3).</p>
<p>Если длина спринта отличается (например, три недели или другое количество рабочих часов в неделю), длительность задач можно пересчитать соответствующим образом. Корректировка продолжительности спринта может быть необходима при отсутствии инструментов автоматизации, так как без автоматизации выполнить двухнедельный спринт будет сложно.</p>
<p>При этом следует учитывать, что длительность некоторых задач должна оставаться фиксированной, как показано в таблице 3.6 (например, процедура утверждения). Нет смысла увеличивать длительность на 50%, если таблица адаптируется под трёхнедельный спринт. В любом случае, длительность задач должна быть скорректирована в соответствии с потребностями проекта. Кроме того, этап определения границ проекта (задачи с ID 2–4) критичен для его успеха, но при этом не должен занимать более двух часов.</p>
<p>Существуют вариации этого проектного плана для спринтов, которые сосредоточены на других видах деятельности, а не на реализации, например, для сбора требований, пользовательского приёмочного тестирования или настройки инфраструктуры.</p>
<p>Проектный план также показывает, что в ходе проекта создаются определённые артефакты. Это не ограничивается только моделями баз данных или потоками данных ETL. Одним из ключевых аспектов методологии Data Vault 2.0 является создание документации, ценной как для бизнеса, так и для ИТ. Необходимая документация включает:</p>
<ul>
<li><strong>Бизнес-глоссарий:</strong> Этот документ помогает в построении информационных витрин, так как в нём идентифицируются и документируются бизнес-объекты и связанные с ними термины.</li>
<li><strong>Документация по требованиям:</strong> Описывает информационные витрины и отчёты в деталях. В решении хранилища данных не должно быть функциональности, для которой нет соответствующего зафиксированного требования. Документ должен быть максимально кратким, например, использовать user story объёмом около одной страницы на каждое требование.</li>
<li><strong>Проектный план:</strong> Содержит только задачи, которые необходимо выполнить в течение одного спринта.</li>
<li><strong>Глоссарий сокращений:</strong> В этом документе приведены распространённые сокращения, используемые в бизнесе или в технологической области хранилищ данных.</li>
<li><strong>Документ об объёме работ (Scope) или заявлении о выполнении работ (Statement of Work):</strong> Описывает объём спринта и фиксирует достигнутые соглашения. Является важным источником для процедуры утверждения (sign-off) в конце спринта.</li>
<li><strong>Документ запросов на изменения:</strong> Любой запрос на изменение уже реализованных требований требует документированного процесса, который основан на этом документе.</li>
<li><strong>Документ приёмки и утверждения (Delivery and Sign-off Document):</strong> Когда проектная команда передаёт новую функциональность в конце спринта, требуется утверждение (sign-off) со стороны бизнеса перед её развертыванием. Этот документ подтверждает, что переданная функциональность соответствует или превышает ожидания, изложенные в документации по требованиям или в документе запросов на изменения.</li>
<li><strong>Роли и обязанности:</strong> Определяет роли в проектной команде и связанные с ними обязанности.</li>
<li><strong>Иерархическая структура работ (Work Breakdown Structure):</strong> Разбивает общее поставляемое решение (хранилище данных) на управляемые компоненты.</li>
<li><strong>Иерархическая структура процессов (Process Breakdown Structure):</strong> Каждый бизнес-процесс, поддерживаемый хранилищем данных, должен быть описан с помощью диаграммы бизнес-процесса. Он должен быть смоделирован с таким уровнем детализации, который позволяет идентифицировать наборы данных и их бизнес-ключи.</li>
<li><strong>Иерархическая структура данных (Data Breakdown Structure):</strong> Для каждого (включённого в спринт) бизнес-отчёта создаются две таблицы: одна сопоставляет отчёт с исходными таблицами, другая — с источником Data Vault для вывода информационной витрины.</li>
<li><strong>Иерархическая структура организации (Organizational Breakdown Structure):</strong> Отображает организационные связи и может использоваться для распределения ресурсов в проекте. Создаётся совместно с иерархической структурой работ. Также связывает отдельных членов команды с ролями, определёнными в документе «Роли и обязанности».</li>
<li><strong>Стандарты моделирования данных:</strong> Этот документ содержит соглашения по наименованию сущностей Data Vault, фактов, измерений и их атрибутов. В нём приводится информация о согласованных стандартах моделирования определённых сущностей, системных атрибутов и т. д.</li>
<li><strong>Стандарты ETL:</strong> Описывает реализацию потоков управления и данных, включая соглашения по наименованию, требования к документации, вопросы физического проектирования и другие аспекты.</li>
</ul>
<p>Этот список показывает, что некоторые из этих документов ссылаются друг на друга. Для поддержания этого процесса рекомендуется использовать проектный технический номер (концепция, описанная в разделе 1.2.4) для идентификации каждого артефакта в документации и реализованном решении. В противном случае невозможно уникально перекрёстно ссылаться на эти артефакты в рамках проекта.</p>
<p>На рисунке 3.17 приведён пример иерархической структуры организации.</p>
<p><strong>РИСУНОК 3.17 Пример иерархической структуры организации</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_17_Example_of_an_organizational_breakdown_structure.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1243 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/3_17_Example_of_an_organizational_breakdown_structure.jpeg" alt="" width="806" height="909" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_17_Example_of_an_organizational_breakdown_structure.jpeg 806w, https://datatalks.ru/wp-content/uploads/2025/02/3_17_Example_of_an_organizational_breakdown_structure-266x300.jpeg 266w, https://datatalks.ru/wp-content/uploads/2025/02/3_17_Example_of_an_organizational_breakdown_structure-768x866.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_17_Example_of_an_organizational_breakdown_structure-400x450.jpeg 400w, https://datatalks.ru/wp-content/uploads/2025/02/3_17_Example_of_an_organizational_breakdown_structure-450x508.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_17_Example_of_an_organizational_breakdown_structure-780x880.jpeg 780w" sizes="(max-width: 806px) 100vw, 806px" /></a></p>
<p>В этой структуре каждая роль связана с членом команды, чьё имя указано на диаграмме. Стандарты управления проектами, такие как Project Management Professional (PMP), требуют, чтобы в проектных планах отслеживались роли, а не конкретные люди, поскольку отдельные участники могут исполнять лишь часть роли в проекте, но каждая роль должна быть заполнена на 100%. В противном случае график проекта не сможет быть соблюдён. То же самое относится и к CMMI.</p>
<p>Кроме того, каждая роль идентифицируется с использованием технического номера. Обратите внимание, что если в проекте есть два ETL-разработчика, они оба будут иметь одинаковый технический номер, поскольку этот номер является перекрёстной ссылкой на документ о ролях и обязанностях, описанный в предыдущем списке. Не является редкостью ситуация, когда один человек исполняет несколько ролей. Мы встречали случаи, когда один человек занимал более четырёх ролей!</p>
<h3><strong>Параллельные команды</strong></h3>
<p>Определение ролей и обязанностей помогает масштабировать проект за счёт добавления новых участников команды и целых команд. Каждая команда работает над небольшими, чётко определёнными поставками, не имея зависимостей от других команд. Вся работа выполняется параллельно с минимальной или вовсе отсутствующей необходимостью синхронизации.</p>
<p>Команды используют те же шаблоны, которые определены в этой главе, и создают документацию, соответствующую тем же принципам. При реализации и поставке бизнес-требований команды, работающие параллельно, синхронизируют свои модели данных с помощью сущности «связь» (link entity), которая обсуждается в главе 5 «Моделирование Intermediate Data Vault».</p>
<p>С существующей командой Data Vault новым участникам не требуется иметь много предварительных знаний или навыков работы с Data Vault. Для добавления новых человеческих ресурсов в текущий проект, помимо знания среды разработки и правил разработки, требуются следующие навыки (в зависимости от задачи):</p>
<ul>
<li><strong>Загрузка из источника в stage:</strong> новые члены команды должны знать, как создавать новые stage-таблицы и загружать данные из исходных таблиц. В лучшем случае для этого требуется только выполнение CREATE TABLE и конструкции INSERT INTO … SELECT FROM в SQL.</li>
<li><strong>Загрузка из stage в hub и link:</strong> снова очень похоже и просто. Требуется лишь использование SELECT DISTINCT, некоторой фильтрации для обработки только отсутствующих записей и оператора INSERT INTO для загрузки hub-ов и link-ов.</li>
<li><strong>Загрузка из stage в satellite:</strong> при использовании только SQL-операторов необходимы SELECT DISTINCT, сравнение строк и INSERT для сохранения актуальных данных.</li>
</ul>
<p>Этот список показывает, что для добавления дополнительных ресурсов в проект, где уже есть эксперты по Data Vault, не требуется много специализированных навыков Data Vault. Более опытные разработчики и моделировщики могут направлять новых участников команды при выполнении этих задач. Следует отметить, что эти навыки применимы к командам, работающим без ETL-инструментов. В дополнение к этим навыкам требуется знание выбранного ETL-инструмента, например Microsoft SQL Server Integration Services. В главе 12 «Загрузка Data Vault» рассматривается процесс загрузки данных в Data Vault с использованием Microsoft SQL Server.</p>
<p>Помимо параллельной реализации бизнес-требований, в проекте работают и другие команды, сосредоточенные на различных видах деятельности, таких как сбор требований, data mining, управляемый BI самообслуживания и т. д. Эти процессы также выполняются параллельно с реализацией.</p>
<h3><strong>Техническая нумерация</strong></h3>
<p>В разделе 1.2 была представлена концепция технической нумерации, используемой в проектной документации для идентификации отдельных артефактов. Техническая нумерация — это присвоение номеров с десятичными точками текстовым документам и их параграфам, которые описывают артефакты и другие важные элементы информации. Этот метод также называется научной нумерацией.</p>
<p>Целью является уникальная идентификация каждого артефакта в документации и реализованном решении в рамках проекта. Она должна применяться ко всем документам или артефактам, создаваемым или используемым в каждом проекте или спринте.</p>
<p><strong>Примеры артефактов:</strong></p>
<ul>
<li>Отдельная роль в документе о ролях и обязанностях</li>
<li>Один запрос на изменение в документе запросов на изменения</li>
<li>Отдельное требование в документе требований</li>
<li>Одна задача в проектном плане</li>
<li>Один бизнес-объект в бизнес-глоссарии</li>
<li>Одна аббревиатура в глоссарии аббревиатур</li>
</ul>
<p>При назначении технических номеров этим артефактам используется иерархический и инкрементальный подход. Нумерация присваивается артефактам последовательно, отражая иерархию. Таблица 3.6 демонстрировала этот подход, назначая номера, разделённые точками, для каждой задачи. Каждому подзаданию присваивался номер, который включал номер WBS родительской задачи и номер самого подзадания через точку.</p>
<p>Если техническая нумерация применяется в программном обеспечении для обработки документов, таком как Microsoft Word, рекомендуется вручную назначать номера и избегать использования автоматической нумерации заголовков. Автоматическая нумерация изменяется при вставке нового заголовка между существующими или при их перестановке. Важно не изменять технические номера после их присвоения артефактам. Артефакты не должны перенумеровываться, чтобы поддерживать возможность перекрёстных ссылок между приложениями.</p>
<p>Существует несколько приложений, в которых артефакты ссылаются друг на друга по их техническим номерам:</p>
<ul>
<li><strong>Требования → исходные таблицы:</strong> это, вероятно, самая мощная схема перекрёстных ссылок, так как она идентифицирует исходные таблицы и атрибуты, используемые конкретным требованием. Должна существовать одна строка на каждое требование, определяющая источники для всех требований. Это одна из структур разбиения данных, упомянутая в предыдущем разделе.</li>
<li><strong>Исходные таблицы → таблицы Data Vault:</strong> эта схема создаётся перед разработкой ETL-процессов для загрузки таблиц Data Vault и указывает соответствие между исходной таблицей и целевыми таблицами Data Vault.</li>
<li><strong>Таблицы Data Vault → таблицы витрин данных (information mart):</strong> аналогично предыдущей схеме, этот документ показывает, как данные сопоставляются между таблицами Data Vault и витринами данных. Этот документ должен представлять собой простую матрицу без указания бизнес-правил, так как они должны быть задокументированы в требованиях.</li>
<li><strong>Требования → таблицы витрин данных:</strong> эта матрица аналогична первой схеме и указывает таблицы витрин данных, используемые определёнными требованиями. Опять же, должна существовать одна строка на каждое требование. Это вторая структура разбиения данных, упомянутая в предыдущем разделе.</li>
</ul>
<p><strong>Лучший подход</strong> — предоставлять эти схемы в виде матриц перекрёстных ссылок в инструменте моделирования или (если лучший вариант недоступен) в таблицах, например в Microsoft Excel. Таблица 3.7 демонстрирует, как должна выглядеть структура разбиения данных.</p>
<p><strong>Таблица 3.7 Пример соответствия требований таблицам витрин данных</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/table_3_7_Requirements_to_Information_Mart_Tables_Example-1.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1262 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/table_3_7_Requirements_to_Information_Mart_Tables_Example-1.jpeg" alt="" width="1011" height="343" srcset="https://datatalks.ru/wp-content/uploads/2025/02/table_3_7_Requirements_to_Information_Mart_Tables_Example-1.jpeg 1011w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_7_Requirements_to_Information_Mart_Tables_Example-1-300x102.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_7_Requirements_to_Information_Mart_Tables_Example-1-768x261.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_7_Requirements_to_Information_Mart_Tables_Example-1-450x153.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_7_Requirements_to_Information_Mart_Tables_Example-1-780x265.jpeg 780w" sizes="(max-width: 1011px) 100vw, 1011px" /></a></p>
<p>Таблица 3.7 демонстрирует сопоставление требований с целевыми объектами, также известное как соответствие требований таблицам витрин данных. В ней описано, какие таблицы измерений или фактов витрин данных используются для конкретного отчёта или элемента OLAP. В данном примере представлены три отчёта:</p>
<ul>
<li>Passenger,</li>
<li>Airplane Utilization и</li>
<li>Connections.</li>
</ul>
<p>Отчёт Passenger использует только таблицу Passenger Information в витрине данных, тогда как отчёт Connections использует таблицы Connections и Airplanes. Эти названия сущностей являются логическими; также предоставлены физические названия в качестве справочной информации. Кроме того, эта таблица ссылается на документ требований, в котором отчёты описаны более детально (в проекте может быть несколько документов требований, если команда решает разделить их, например, по функционалу и т. д.).</p>
<p>Хорошей практикой является использование аббревиатур в качестве префикса к техническому номеру, чтобы облегчить идентификацию типа артефакта, которому присваивается номер.</p>
<p><strong>Таблица 3.8 Примеры аббревиатур для типов артефактов</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/table_3_8_Example_Acronyms_for_Artifact_Types.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1263" src="https://datatalks.ru/wp-content/uploads/2025/02/table_3_8_Example_Acronyms_for_Artifact_Types.jpeg" alt="" width="527" height="307" srcset="https://datatalks.ru/wp-content/uploads/2025/02/table_3_8_Example_Acronyms_for_Artifact_Types.jpeg 527w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_8_Example_Acronyms_for_Artifact_Types-300x175.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_8_Example_Acronyms_for_Artifact_Types-450x262.jpeg 450w" sizes="(max-width: 527px) 100vw, 527px" /></a></p>
<p>Возможность уникально идентифицировать отдельные документы и артефакты является необходимым условием для их измерения. Без корректной идентификации это невозможно, поскольку фактические затраты не могут быть правильно сопоставлены с ними. А без возможности измерить фактические затраты невозможно сравнить их с запланированными затратами и, следовательно, невозможно оптимизировать процессы разработки. Оптимизация процессов разработки выполняется на этапе обзора и улучшения спринта. Требуемые концепции описаны в следующем разделе.</p>
<h2><strong>Обзор и улучшение</strong></h2>
<p>Прежде чем команда завершит спринт и начнёт следующий, проводятся два относительно коротких собрания:</p>
<ul>
<li><strong>Собрание обзора спринта:</strong> во время этого собрания команда, владелец продукта и другие заинтересованные стороны, такие как конечные пользователи, проводят обзор созданных артефактов.</li>
<li><strong>Ретроспективное собрание:</strong> сразу после собрания обзора спринта команда разработки встречается, чтобы определить те аспекты работы в спринте, которые требуют улучшения.</li>
</ul>
<p><strong>Первое собрание</strong> фокусируется на продукте: участники оценивают, соответствуют ли реализованные функции ожиданиям и зафиксированным требованиям. По этой причине в обсуждении участвуют все заинтересованные стороны, связанные с рассматриваемыми функциями. Если в ходе собрания выявляются проблемы или отклонения от определённых требований, необходимо создать запрос на изменение, который будет реализован в одном из последующих спринтов. Для проведения этого обзора команда должна быть способна чётко идентифицировать ожидаемые функции и проследить их происхождение до первоначальных требований. Именно поэтому техническая нумерация, описанная в разделе 1.2.4, играет важную роль в методологии Data Vault 2.0. Улучшение результатов проекта невозможно, если команда не может полностью определить источник возникших проблем, но это является ключевым условием успешной оптимизации проекта.</p>
<p><strong>Оптимизация проекта также требует анализа самого процесса. Это выполняется во время ретроспективного собрания.</strong> Команда анализирует выполненные в ходе итерации действия и принимает решения о том, как их улучшить, чтобы повысить общую эффективность проекта. В рамках анализа процесса также пересматриваются первоначальные оценки трудозатрат для запросов на изменения в рамках итерации. Это делается по той же причине: чтобы выявить причины недооценки или переоценки задач и устранить их в будущем.</p>
<p>Иногда agile-команды утверждают, что в agile-разработке не требуется оценка запросов на изменения. Однако в корпоративных организациях это может стать проблемой, так как общее управление проектом требует оценок для контроля сроков и бюджета.</p>
<h3><strong>Six Sigma</strong></h3>
<p>Six Sigma играет важную роль в процессе улучшения. Принципы Six Sigma применяются для достижения максимальной оптимизации гибкости процесса построения и внедрения корпоративных хранилищ данных в соответствии со стандартом Data Vault 2.0. Six Sigma опирается на измерения (оценки vs. фактические показатели) или KPI, чтобы определить, что пошло не так на уровне проекта, насколько спринт отклонился от намеченного курса и какие действия необходимо предпринять, чтобы привести процесс в соответствие.</p>
<p>Это процессная часть Six Sigma, применяемая к &#171;исправлению ошибок&#187; или &#171;оптимизации&#187; процесса создания систем бизнес-аналитики. Важно отметить, что такие измерения и KPI должны оценивать команды, а не отдельных членов команды. Data Vault 2.0, как и другие гибкие методологии, включая Disciplined Agile Delivery (DAD), ставит людей на первое место. Если сотрудники понимают, что их индивидуальная продуктивность оценивается, они найдут способы обхода этих измерений. Кроме того, в некоторых юрисдикциях измерение продуктивности отдельных сотрудников является незаконным. Метрики следует рассматривать как возможные индикаторы производительности. Чтобы выявить реальные причины проблем в проекте, следует разговаривать с его участниками, так как именно они, скорее всего, лучше всего знают, что происходит.</p>
<p>Six Sigma также применяется к данным, когда мы превращаем их в информацию, передаём в бизнес-среду и тестируем. Количество &#171;ошибок&#187;, обнаруженных в ходе тестирования, является показателем качества данных и количества выявленных дефектов. Измерение ошибок с помощью Six Sigma даёт представление о качестве процессов, разрабатываемых в системе бизнес-аналитики. Чем меньше ошибок совершается со временем, тем более оптимизированными и эффективными становятся процессы, что позволяет команде работать быстрее, дешевле и гибче.</p>
<p>Six Sigma — это широко используемая методология устранения дефектов из процессов и продуктов. Она представляет собой &#171;стратегическую инициативу, направленную на повышение прибыльности, увеличение доли рынка и улучшение удовлетворённости клиентов с использованием статистических инструментов, позволяющих добиться значительных скачков в качестве&#187;. Six Sigma рассматривается как &#171;новая стратегическая парадигма управления&#187;, которая включает в себя &#171;статистическое измерение, управленческую стратегию и культуру качества&#187;.</p>
<p><strong>Преимущества Six Sigma заключаются в том, что она:</strong></p>
<ul>
<li>Обеспечивает контроль качества продуктов и услуг</li>
<li>Создаёт инновационные методы повышения качества</li>
<li>Обеспечивает полное удовлетворение потребностей клиентов</li>
<li>Формирует устойчивую культуру качества</li>
</ul>
<p><strong>Ключевая концепция Six Sigma заключается в улучшении производительности процессов для достижения трех целей:</strong></p>
<ul>
<li>Снижение затрат на процессы</li>
<li>Повышение удовлетворенности клиентов</li>
<li>Увеличение выручки и, следовательно, прибыли</li>
</ul>
<p>Процесс в Six Sigma определяется так же, как и в большинстве других управленческих дисциплин. Это деятельность или серия действий, которые преобразуют входные данные в выходные с использованием повторяющегося процесса.</p>
<p>Существует множество типов входных данных в процессах, применяемых в проектах по хранилищам данных:</p>
<ul>
<li>Трудовые ресурсы</li>
<li>Материалы (например, офисные принадлежности)</li>
<li>Решения</li>
<li>Информация</li>
<li>Измерения</li>
</ul>
<p>Хотя для большинства производственных компаний основным выходным результатом процессов является продукт, в R&amp;D-ориентированных организациях результатом также могут быть процессы или другие разрабатываемые материалы.</p>
<p>Часто результаты выполнения процесса различаются по качеству, даже если сам процесс повторяется. Нет двух абсолютно одинаковых продуктов, и различия могут быть значительными или практически незаметными, но они всегда существуют.</p>
<p>Возможно анализировать отклонения в результате процесса, измерять и визуализировать их. Существует три характеристики, описывающие эти отклонения:</p>
<ul>
<li><strong>Расположение (Location)</strong> – среднее значение качества</li>
<li><strong>Разброс (Spread)</strong> – диапазон значений</li>
<li><strong>Форма (Shape)</strong> – характер распределения отклонений</li>
</ul>
<p>Чем больше отклонений в процессе, тем ниже качество результата. Следовательно, вариативность является главным врагом контроля качества. Однако отклонения зависят от различных факторов внутри организации или проекта, которые представлены на <strong>Рисунке 3.18 &#171;Треугольник производительности процесса&#187;.</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_18_Process_Performance_Triangle.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1257" src="https://datatalks.ru/wp-content/uploads/2025/02/3_18_Process_Performance_Triangle.jpeg" alt="" width="560" height="483" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_18_Process_Performance_Triangle.jpeg 560w, https://datatalks.ru/wp-content/uploads/2025/02/3_18_Process_Performance_Triangle-300x259.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_18_Process_Performance_Triangle-450x388.jpeg 450w" sizes="(max-width: 560px) 100vw, 560px" /></a></p>
<p>Вариативность в Six Sigma эквивалентна стандартному отклонению, статистическому измерению разброса данных. В статистике это отклонение обозначается греческой буквой σ (сигма).</p>
<p>Шесть стандартных отклонений означают, что результаты процесса максимально приближены к совершенству. Как показано на Рисунке 3.18, другие важные факторы — это временной цикл (cycle time) и выход (yield).</p>
<p><strong>Выход (yield)</strong> – это процент успешных результатов процесса, выраженный в процентах. Он показывает долю выходных данных с приемлемым качеством.</p>
<p>Таблица 3.9 предоставляет обзор уровней производительности, которые можно достичь при различных значениях стандартного отклонения (σ, то есть уровня вариативности).</p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/table_3_9_sigma_table.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1264 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/table_3_9_sigma_table.jpeg" alt="" width="463" height="503" srcset="https://datatalks.ru/wp-content/uploads/2025/02/table_3_9_sigma_table.jpeg 463w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_9_sigma_table-276x300.jpeg 276w, https://datatalks.ru/wp-content/uploads/2025/02/table_3_9_sigma_table-450x489.jpeg 450w" sizes="(max-width: 463px) 100vw, 463px" /></a></p>
<p><strong>Источники вариативности</strong></p>
<p>Причины вариативности многообразны. Вариативность подразделяется на общие причины (common causes) и специальные причины (special causes).</p>
<p><strong>Общие причины (common causes)</strong> присутствуют в любом повторяющемся процессе с стабильным и предсказуемым распределением во времени. Их трудно устранить, так как они являются неотъемлемой частью процесса. Единственный способ уменьшить их – это пересмотреть сам процесс. Однако редизайн процесса может ввести новые вариации.<br />
Верхняя часть Рисунка 3.19 показывает вариативность стабильного и предсказуемого процесса, обусловленную общими причинами.</p>
<p><strong>Рисунок 3.19 &#171;Общие и специальные причины вариативности&#187;</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_19_Common_and_special_causes_for_variation.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1244" src="https://datatalks.ru/wp-content/uploads/2025/02/3_19_Common_and_special_causes_for_variation.jpeg" alt="" width="817" height="626" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_19_Common_and_special_causes_for_variation.jpeg 817w, https://datatalks.ru/wp-content/uploads/2025/02/3_19_Common_and_special_causes_for_variation-300x230.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_19_Common_and_special_causes_for_variation-768x588.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_19_Common_and_special_causes_for_variation-450x345.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_19_Common_and_special_causes_for_variation-780x598.jpeg 780w" sizes="(max-width: 817px) 100vw, 817px" /></a></p>
<p><strong>Специальные причины (special causes)</strong> также называются назначаемыми причинами (assignable causes).</p>
<ul>
<li>Эти редкие и нестандартные факторы изменяют распределение процесса.</li>
<li>Если не устранить их, они непредсказуемо повлияют на результаты процесса.</li>
<li>Наличие специальных причин разрушает стабильность процессов.</li>
</ul>
<p>Это показано в нижней части Рисунка 3.19.</p>
<p><strong>Рисунок 3.20 &#171;Прорывные результаты в Six Sigma&#187;.</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_20_Breakthrough_results_in_Six_Sigma.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1245" src="https://datatalks.ru/wp-content/uploads/2025/02/3_20_Breakthrough_results_in_Six_Sigma.jpeg" alt="" width="969" height="518" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_20_Breakthrough_results_in_Six_Sigma.jpeg 969w, https://datatalks.ru/wp-content/uploads/2025/02/3_20_Breakthrough_results_in_Six_Sigma-300x160.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_20_Breakthrough_results_in_Six_Sigma-768x411.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_20_Breakthrough_results_in_Six_Sigma-450x241.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_20_Breakthrough_results_in_Six_Sigma-780x417.jpeg 780w" sizes="(max-width: 969px) 100vw, 969px" /></a></p>
<h4><strong>Применение Six Sigma в разработке программного обеспечения</strong></h4>
<p>Six Sigma изначально была разработана для производства и других процессов, которые более зрелые, чем процессы в разработке программного обеспечения. Однако, поскольку Six Sigma является независимой от области инициативой, ее концепции можно применять и в менее зрелых дисциплинах.</p>
<p>Это возможно, потому что разработка ПО также следует модельному процессу, схожему с процессами в производстве. Хотя процессы разработки часто включают инновационные и творческие задачи, это также характерно и для других инженерных дисциплин.</p>
<p>В контексте определения процесса, данного в этой главе, не важно, является ли процесс:</p>
<ul>
<li>импровизированным (ad-hoc),</li>
<li>уникальным каждый раз,</li>
<li>или высокоповторяющимся.</li>
</ul>
<p>В любом случае, это процесс, соответствующий нашему определению.<br />
Можно собирать различные метрики процессов разработки ПО:</p>
<ul>
<li>время между началом и завершением этапа процесса,</li>
<li>количество и качество выходных данных,</li>
<li>ожидаемая производительность продукта,</li>
<li>и др.</li>
</ul>
<p>И поскольку владельцы процессов имеют те же интересы, что и их коллеги в производстве, например, улучшение качества результата процесса, повышение производительности, лучшее удовлетворение потребностей клиентов и т. д., Six Sigma может быть применена и к процессам разработки программного обеспечения. Однако из-за различий между разработкой ПО и другими инженерными дисциплинами требуется дополнительное обдумывание.</p>
<p>Часто общий цикл выполнения процессов в разработке ПО значительно длиннее, чем при создании машинных изделий. Поэтому проекты Six Sigma могут:</p>
<ul>
<li>занимать больше времени</li>
<li>иметь больший риск, так как доступно меньше данных для статистического анализа.</li>
</ul>
<p>Взаимодействие между людьми значительно выше, чем во многих других производственных сферах. Творческие элементы присутствуют на протяжении всего жизненного цикла проекта.</p>
<p>Команды Six Sigma могут сосредоточиться либо на повторяющихся задачах в проекте (например, на проверках), либо на человеческих факторах. В любом случае важно правильно нормализовать данные, чтобы убедиться, что сравнения корректны.</p>
<p>В разработке ПО создается только одна мастер-копия. Ее дублирование простое и не приводит к вариациям в конечном продукте. Однако разработка отдельных компонентов ПО выполняется только один раз, и между этими компонентами могут быть различия.</p>
<p>Еще одним источником вариативности является внедрение ПО в среду пользователя.</p>
<h4><strong>Каркас Six Sigma</strong></h4>
<p>Компании, которые решают внедрить Six Sigma в свои организации, опираются на каркас Six Sigma, состоящий из нескольких важных компонентов.</p>
<p>Три основных элемента, которые определяют этот каркас:</p>
<ul>
<li>Приверженность высшего руководства</li>
<li>Вовлечение заинтересованных сторон</li>
<li>Стратегия улучшения</li>
</ul>
<p><strong>Стратегия улучшения включает пять этапов DMAIC</strong> (определение, измерение, анализ, улучшение и контроль) — подробнее в следующем разделе. Она также базируется на системах обучения, деятельности проектных команд и системе измерений.</p>
<p><strong>Все эти компоненты управляют тремя различными функциями Six Sigma:</strong></p>
<ul>
<li>Проектирование по Six Sigma (Design for Six Sigma)</li>
<li>Производственная Six Sigma (Manufacturing Six Sigma)</li>
<li>Операционная (транзакционная) Six Sigma (Transactional Six Sigma).</li>
</ul>
<p><strong>Приверженность высшего руководства</strong></p>
<p>Приверженность высшего руководства необходима, так как Six Sigma — это стратегическое управленческое решение, которое должно инициироваться топ-менеджментом.</p>
<p>Чтобы Six Sigma была успешной, все элементы каркаса (включая стратегию улучшения) требуют поддержки высшего руководства. Особенно важно, чтобы обучающие программы и деятельность проектных команд получали достаточное внимание. Без сильной поддержки сверху они редко оказываются успешными.</p>
<p>Важно, чтобы руководство проявляло не просто формальную приверженность, а реальное, практическое участие в инициативе, которая должна развиваться на протяжении нескольких лет.<br />
Вовлечение заинтересованных сторон</p>
<p>Для успеха инициативы Six Sigma требуется вовлечение не только высшего руководства, но и всех заинтересованных сторон.</p>
<p><strong>В улучшение процессов по Six Sigma должны быть вовлечены:</strong></p>
<ul>
<li>сотрудники</li>
<li>поставщики</li>
<li>клиенты</li>
<li>владельцы компании</li>
<li>другие участники ближайшего окружения компании</li>
</ul>
<p>Большая часть конкретных действий выполняется сотрудниками, которым нужна поддержка со стороны высшего руководства, например:</p>
<ul>
<li>доступ к обучающим курсам</li>
<li>участие в проектных командах</li>
<li>оценка эффективности процессов</li>
</ul>
<p>Ключевые поставщики также поощряются к запуску собственных инициатив Six Sigma, при этом им оказывается поддержка через обмен информацией и участие в обучающих программах. В некоторых случаях мелким компаниям даже оказывается финансовая поддержка.</p>
<p><strong>Обучение и система поясов</strong></p>
<p>Успех любой инициативы Six Sigma зависит от квалифицированных участников, таких как сотрудники.</p>
<p>Требуются знания в методологии улучшения, управлении процессами и статистических инструментах. Также важно понимать:</p>
<ul>
<li>процесс работы проектных команд</li>
<li>методы внедрения требований клиентов</li>
</ul>
<p>Этот набор навыков редко бывает изначально доступен внутри компании, поэтому он должен развиваться через программы обучения и другие методы передачи знаний.</p>
<p>Для этого в Six Sigma предусмотрены стандартизированные уровни подготовки, обозначенные системой поясов из боевых искусств:</p>
<ul>
<li>Белые пояса (White Belts)</li>
<li>Зеленые пояса (Green Belts)</li>
<li>Черные пояса (Black Belts)</li>
<li>Мастера черных поясов (Master Black Belts)</li>
<li>Чемпионы (Champions)</li>
</ul>
<p>Наибольшее значение имеют Зеленые и Черные пояса, так как именно они становятся ключевыми участниками команд Six Sigma.</p>
<p>Задача Черных и Зеленых поясов заключается в том, чтобы удерживать проект в фокусе.</p>
<p>Для работы проектных команд рекомендуется следующий порядок действий:</p>
<ul>
<li>Создать команду Six Sigma и установить долгосрочное управленческое видение для организации.</li>
<li>Сначала обучить чемпионов Six Sigma.</li>
<li>Выбрать бизнес-направления, в которых Six Sigma будет внедряться в первую очередь.</li>
<li>Обучить Зеленые и Черные пояса.</li>
<li>Назначить Черные пояса в качестве проектных менеджеров на полную занятость в критически важных процессах, чтобы сосредоточиться на ключевых проблемах качества.</li>
<li>Укрепить инфраструктуру для поддержки Six Sigma, например, путем внедрения систем управления знаниями, статистического контроля процессов и систем управления базами данных.</li>
<li>Убедиться, что высшее руководство следит за ходом работы команд Six Sigma. Ввести регулярный “День Six Sigma” и организовывать презентации или награждения за достижения.</li>
</ul>
<p>Для выявления новых областей улучшения процессов Six Sigma опирается на прагматичную систему измерения производительности. Она позволяет выявлять низкую эффективность процессов и помогает определять потенциальные проблемы, с которыми придется столкнуться в будущем.</p>
<p>Измерение основано на характеристиках продукта, которые отслеживаются во времени и консолидируются. Результаты, как правило, визуализируются в виде диаграмм тенденций и других графических представлений.</p>
<p>Как уже было указано, стратегия улучшения основана на этапах DMAIC. Следующий раздел рассматривает их подробно.</p>
<h4><strong>Улучшение по DMAIC</strong></h4>
<p>Стратегия улучшения, представленная в предыдущем разделе, основана на шагах DMAIC — подходе, который также называется прорывным (Breakthrough) подходом.</p>
<p><strong>Первым шагом</strong> в этом подходе является определение проблемы и четкое описание ее влияния на удовлетворенность клиентов, заинтересованных сторон, сотрудников и прибыльность. Члены проекта определяют следующие аспекты:</p>
<ul>
<li>Требования, критичные для клиента</li>
<li>Цели и задачи проекта</li>
<li>Роли и обязанности команды</li>
<li>Объем проекта и ресурсы</li>
<li>Базовый уровень производительности процесса</li>
<li>Карту процесса, включая поставщика, входные данные, процесс, выходные данные и клиента</li>
</ul>
<p>На этом этапе важно собрать и задокументировать требования клиента, а затем передать их на операционный уровень, где формируются цели и задачи проекта. Существует несколько методик, которые поддерживают команду проекта, включая:</p>
<ul>
<li>Устав проекта</li>
<li>Анализ вовлеченности заинтересованных сторон</li>
<li>Диаграммы аффинности</li>
<li>Голос клиента (Voice of the Customer)</li>
<li>Анализ качества</li>
<li>Анализ силового поля (Force Field Analysis)</li>
<li>Анализ Парето</li>
<li>Картирование процесса</li>
</ul>
<p><strong>Второй шаг</strong> — измерение текущей производительности, чтобы выявить возможности для улучшения. После внесения изменений бизнес может оценить их успешность, сравнив новую производительность с предыдущим базовым уровнем. Для измерений доступны различные статистические инструменты, включая средние значения, стандартное отклонение и вероятностные распределения.</p>
<p>После выявления проблем в процессе следующий шаг — поиск корневых причин <strong>на этапе анализа (analyze phase)</strong>. Возможности для улучшения приоритизируются по двум критериям:</p>
<ul>
<li>Их влияние на удовлетворенность клиентов</li>
<li>Их влияние на прибыльность</li>
</ul>
<p><strong>На этапе улучшения (improve phase)</strong> внедряются выявленные на предыдущем шаге возможности для улучшения. Участники проекта разрабатывают несколько возможных решений и выбирают наиболее эффективное по результатам и производительности.</p>
<p>В то время как другие методологии улучшения изменяют один параметр процесса за раз, Six Sigma использует статистически спроектированные эксперименты для одновременного изменения нескольких переменных и получения множественных измерений в одних и тех же экспериментальных условиях.</p>
<p>Последним шагом улучшения по DMAIC является <strong>этап контроля (control step)</strong>. Его цель — контролировать улучшенные процессы и гарантировать устойчивость инициативы Six Sigma. Однако, если результаты улучшений, выполненных на предыдущих шагах, окажутся под угрозой, процесс улучшения DMAIC может начаться заново, как показано на Рисунке 3.21.</p>
<h4><strong>Применение Six Sigma к хранилищам данных</strong></h4>
<p>Оба типа встреч —<strong> обзор спринта (sprint review meeting)</strong> и <strong>ретроспектива (retrospective meeting)</strong> — являются обязательными, если организация стремится сократить длину итерации с четырех до трех недель или с трех до двух недель.</p>
<p>Без постоянного совершенствования как способности поставлять нужные функции с ожидаемым качеством, так и деятельности, которая ведет к их созданию (перспектива процесса), команда не сможет достичь таких целей.</p>
<p>Если команды хотят сократить длину итерации, им необходимо проанализировать свою деятельность и определить, сколько времени уходит на каждую отдельную задачу. Затем команда определяет, на что уходит слишком много времени (например, на документацию, внедрение и т. д.) и разбирается, как сократить время на эти процессы.</p>
<p>В некоторых случаях технологии могут помочь, например, развертывание blue-green (описано в Главе 8 &#171;Физический дизайн хранилища данных&#187;) или автоматизация ETL-процессов.</p>
<p>В других случаях ключевую роль играет ограничение функционала (scoping): команда может уменьшить объем первой версии функции, исключив ненужные возможности.</p>
<p><strong>Еще одним фактором являются сами люди:</strong></p>
<ul>
<li>Дополнительное обучение может сократить продолжительность процессов</li>
<li>Дополнительные и более качественные ресурсы (технологические, организационные и человеческие) также могут ускорить работу</li>
</ul>
<p>С учетом этого подхода разницы между разработкой ПО и разработкой хранилищ данных в контексте Six Sigma практически нет. Поэтому к хранилищам данных применяются те же концепции, что и в разделе [&#171;Применение Six Sigma к программному обеспечению&#187;](см. предыдущий раздел).</p>
<h3><strong>Всеобщее управление качеством (Total Quality Management)</strong></h3>
<p>Для достижения высочайшего качества менеджеры и команды часто обращаются к Total Quality Management (TQM) — набору теорий, методов, техник и стратегий управления качеством, предназначенных для конкуренции на мировом уровне.</p>
<p><strong>TQM</strong> — это управленческий процесс, в котором основное внимание уделяется постоянному улучшению качества.</p>
<p>Термин &#171;Total&#187; (Всеобщее) в TQM указывает на то, что каждый сотрудник организации и каждая функциональная единица должны участвовать в непрерывном совершенствовании качества.</p>
<p>В этом смысле:</p>
<ul>
<li>Качество означает соответствие или превышение ожиданий пользователей по качеству продукта или услуги.</li>
<li>Управление означает улучшение и поддержание бизнес-систем, включая их процессы и деятельность.</li>
</ul>
<p>Типичные действия в рамках TQM:</p>
<ul>
<li>Проектирование экспериментов</li>
<li>Круги качества</li>
<li>Ценностная инженерия</li>
<li>Затраты на качество</li>
<li>Информационные системы</li>
<li>Методы Тагучи</li>
<li>Общее продуктивное обслуживание</li>
<li>Статистический контроль процессов</li>
<li>Гарантия качества</li>
<li>Устойчивый (робастный) дизайн</li>
<li>Компьютеризированное проектирование</li>
<li>Развертывание функций качества</li>
<li>Непрерывное улучшение</li>
<li>Партисипативное управление (участие сотрудников в управлении)</li>
</ul>
<p>Не включены деятельности, имеющие значение только для производственной отрасли, такие как планирование производственных ресурсов (MRP &#8212; Manufacturing Resource Planning).</p>
<p>Однако некоторые подходы могут быть адаптированы к хранилищам данных, особенно к системам DWH, построенным по стандарту Data Vault.</p>
<p>Кроме того, ряд концепций TQM уже описан в других частях этой главы (или будет рассмотрен в следующих разделах). Например:</p>
<ul>
<li><strong>Партисипативное управление уже применяется в Scrum:</strong> вместо того чтобы принимать решения на высшем уровне организационной структуры проекта, полномочия передаются на более низкий уровень.</li>
<li><strong>То же касается TQM:</strong> ответственность за качество распределяется максимально низко.</li>
<li>Члены проекта должны иметь право принимать обоснованные решения для улучшения качества продукта или услуги.</li>
<li>Эти решения принимаются без предварительного одобрения со стороны руководства.</li>
</ul>
<p>Типичные инициативы по внедрению TQM следуют поэтапному подходу, состоящему из пяти фаз, представленных на Рисунке 3.22.</p>
<p><strong>Рисунок 3.22 Успешное внедрение TQM в пять фаз</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_22_Successful_TQM_implementation_in_five_phases.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1246 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/3_22_Successful_TQM_implementation_in_five_phases.jpeg" alt="" width="803" height="998" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_22_Successful_TQM_implementation_in_five_phases.jpeg 803w, https://datatalks.ru/wp-content/uploads/2025/02/3_22_Successful_TQM_implementation_in_five_phases-241x300.jpeg 241w, https://datatalks.ru/wp-content/uploads/2025/02/3_22_Successful_TQM_implementation_in_five_phases-768x955.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_22_Successful_TQM_implementation_in_five_phases-450x559.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_22_Successful_TQM_implementation_in_five_phases-780x969.jpeg 780w" sizes="(max-width: 803px) 100vw, 803px" /></a></p>
<p>Как показано на рисунке, пять фаз включают:</p>
<ul>
<li><strong>Фаза подготовки</strong> – значительное количество времени, усилий, ресурсов и энергии тратится до внедрения TQM, чтобы снизить риск неудачи.</li>
<li><strong>Фаза планирования</strong> – люди собираются вместе, устанавливают графики и цели.</li>
<li><strong>Фаза оценки</strong> – используется для лучшего понимания внутренней организации, внешних продуктов или услуг, конкурентов и клиентов.</li>
<li><strong>Фаза внедрения</strong> – развёртывание практик качества и поддерживающих систем внутри организации.</li>
<li><strong>Фаза сетевого взаимодействия</strong> – участники инициативы TQM объединяются с аналогичными усилиями в других частях организации, укрепляя связи и формируя альянсы.</li>
</ul>
<p>Однако не стоит путаться из-за Рисунка 3.22.</p>
<p>Только фаза подготовки выполняется однократно в организации.<br />
Остальные фазы являются непрерывными и развивающимися процессами, которые повторяются в рамках реализации TQM для дальнейшего улучшения качества.</p>
<h4><strong>Измерения качества данных</strong></h4>
<p>Так как методология Data Vault 2.0 фокусируется на управлении качеством данных в рамках TQM, стоит рассмотреть две методологии, которые могут стать частью инициативы TQM в хранилищах данных.</p>
<p>Обе методологии основаны на объективной оценке качества данных.</p>
<p>Качество данных имеет много различных измерений, которые представляют интерес для бизнес-пользователей и могут использоваться для классификации качества данных (или информации).</p>
<p><strong>Таблица 3.10 содержит список основных измерений качества данных.</strong></p>
<table border="0" cellspacing="0">
<colgroup width="160"></colgroup>
<colgroup width="1078"></colgroup>
<tbody>
<tr>
<td align="left" valign="middle" bgcolor="#B4C7DC" height="17" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Dimension (Измерение)&quot;}"><b><span style="font-family: Liberation Serif;">Dimension (Измерение)</span></b></td>
<td align="left" valign="middle" bgcolor="#B4C7DC" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Definition (Определение)&quot;}"><b><span style="font-family: Liberation Serif;">Definition (Определение)</span></b></td>
</tr>
<tr>
<td align="left" valign="middle" height="32" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Accessibility (Доступность)&quot;}"><b><span style="font-family: Liberation Serif;">Accessibility (Доступность)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Указывает, насколько данные доступны или могут быть легко и быстро извлечены бизнес-пользователем.&quot;}"><span style="font-family: Liberation Serif;">Указывает, насколько данные доступны или могут быть легко и быстро извлечены бизнес-пользователем.</span></td>
</tr>
<tr>
<td align="left" valign="middle" height="47" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Appropriate Amount of Data (Соответствующий объем данных)&quot;}"><b><span style="font-family: Liberation Serif;">Appropriate Amount of Data (Соответствующий объем данных)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Предоставляет информацию о подходящем объеме данных для задачи бизнес-пользователя.&quot;}"><span style="font-family: Liberation Serif;">Предоставляет информацию о подходящем объеме данных для задачи бизнес-пользователя.</span></td>
</tr>
<tr>
<td align="left" valign="middle" height="32" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Believability (Правдоподобность)&quot;}"><b><span style="font-family: Liberation Serif;">Believability (Правдоподобность)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Указывает, насколько данные считаются истинными и заслуживающими доверия бизнес-пользователем.&quot;}"><span style="font-family: Liberation Serif;">Указывает, насколько данные считаются истинными и заслуживающими доверия бизнес-пользователем.</span></td>
</tr>
<tr>
<td align="left" valign="middle" height="32" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Completeness (Полнота)&quot;}"><b><span style="font-family: Liberation Serif;">Completeness (Полнота)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Определяется степенью доступности данных, то есть отсутствием пропущенных данных и наличием данных в достаточной широте и глубине для выполнения задачи бизнес-пользователя. Это определяется как ожидаемая полнота. Отсутствие необязательных данных не влияет на полноту данных.&quot;}"><span style="font-family: Liberation Serif;">Определяется степенью доступности данных, то есть отсутствием пропущенных данных и наличием данных в достаточной широте и глубине для выполнения задачи бизнес-пользователя. Это определяется как ожидаемая полнота. Отсутствие необязательных данных не влияет на полноту данных.</span></td>
</tr>
<tr>
<td align="left" valign="middle" height="47" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Concise Representation (Краткость представления)&quot;}"><b><span style="font-family: Liberation Serif;">Concise Representation (Краткость представления)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Указывает, представлены ли данные в компактном формате.&quot;}"><span style="font-family: Liberation Serif;">Указывает, представлены ли данные в компактном формате.</span></td>
</tr>
<tr>
<td align="left" valign="middle" height="32" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Conformity (Соответствие)&quot;}"><b><span style="font-family: Liberation Serif;">Conformity (Соответствие)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Указывает, представлены ли данные в одном и том же, согласованном формате, если они доступны в нескольких местах. Обеспечивает соответствие стандартным определениям данных, включая тип данных, размер и формат.&quot;}"><span style="font-family: Liberation Serif;">Указывает, представлены ли данные в одном и том же, согласованном формате, если они доступны в нескольких местах. Обеспечивает соответствие стандартным определениям данных, включая тип данных, размер и формат.</span></td>
</tr>
<tr>
<td align="left" valign="middle" height="32" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Ease of Manipulation (Простота обработки)&quot;}"><b><span style="font-family: Liberation Serif;">Ease of Manipulation (Простота обработки)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Определяет, легко ли данные обрабатывать и применять к различным задачам.&quot;}"><span style="font-family: Liberation Serif;">Определяет, легко ли данные обрабатывать и применять к различным задачам.</span></td>
</tr>
<tr>
<td align="left" valign="middle" height="32" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Free-of-Error (Отсутствие ошибок)&quot;}"><b><span style="font-family: Liberation Serif;">Free-of-Error (Отсутствие ошибок)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Указывает, свободны ли данные от ошибок, а значит, являются правильными и надежными.&quot;}"><span style="font-family: Liberation Serif;">Указывает, свободны ли данные от ошибок, а значит, являются правильными и надежными.</span></td>
</tr>
<tr>
<td align="left" valign="middle" height="17" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Integrity (Целостность)&quot;}"><b><span style="font-family: Liberation Serif;">Integrity (Целостность)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Указывает, являются ли данные корректными в контексте их взаимосвязей.&quot;}"><span style="font-family: Liberation Serif;">Указывает, являются ли данные корректными в контексте их взаимосвязей.</span></td>
</tr>
<tr>
<td align="left" valign="middle" height="32" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Interpretability (Интерпретируемость)&quot;}"><b><span style="font-family: Liberation Serif;">Interpretability (Интерпретируемость)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Указывает, используют ли данные правильный язык, символы, определения и единицы измерения.&quot;}"><span style="font-family: Liberation Serif;">Указывает, используют ли данные правильный язык, символы, определения и единицы измерения.</span></td>
</tr>
<tr>
<td align="left" valign="middle" height="32" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Objectivity (Объективность)&quot;}"><b><span style="font-family: Liberation Serif;">Objectivity (Объективность)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Определяет, насколько данные являются беспристрастными, непредвзятыми и объективными.&quot;}"><span style="font-family: Liberation Serif;">Определяет, насколько данные являются беспристрастными, непредвзятыми и объективными.</span></td>
</tr>
<tr>
<td align="left" valign="middle" height="32" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Relevancy (Актуальность)&quot;}"><b><span style="font-family: Liberation Serif;">Relevancy (Актуальность)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Указывает, являются ли данные полезными и применимыми для задачи бизнес-пользователя.&quot;}"><span style="font-family: Liberation Serif;">Указывает, являются ли данные полезными и применимыми для задачи бизнес-пользователя.</span></td>
</tr>
<tr>
<td align="left" valign="middle" height="17" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Reputation (Репутация)&quot;}"><b><span style="font-family: Liberation Serif;">Reputation (Репутация)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Предоставляет информацию о репутации источника или содержания данных.&quot;}"><span style="font-family: Liberation Serif;">Предоставляет информацию о репутации источника или содержания данных.</span></td>
</tr>
<tr>
<td align="left" valign="middle" height="17" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Security (Безопасность)&quot;}"><b><span style="font-family: Liberation Serif;">Security (Безопасность)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Указывает, правильно ли защищены данные в плане ограничения доступа.&quot;}"><span style="font-family: Liberation Serif;">Указывает, правильно ли защищены данные в плане ограничения доступа.</span></td>
</tr>
<tr>
<td align="left" valign="middle" height="32" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Timeliness (Актуальность по времени)&quot;}"><b><span style="font-family: Liberation Serif;">Timeliness (Актуальность по времени)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Предоставляет информацию о восприятии бизнес-пользователем своевременности и обновленности данных.&quot;}"><span style="font-family: Liberation Serif;">Предоставляет информацию о восприятии бизнес-пользователем своевременности и обновленности данных.</span></td>
</tr>
<tr>
<td align="left" valign="middle" height="32" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Understandability (Понятность)&quot;}"><b><span style="font-family: Liberation Serif;">Understandability (Понятность)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Указывает, легко ли бизнес-пользователю понять данные.&quot;}"><span style="font-family: Liberation Serif;">Указывает, легко ли бизнес-пользователю понять данные.</span></td>
</tr>
<tr>
<td align="left" valign="middle" height="32" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Uniqueness (Уникальность)&quot;}"><b><span style="font-family: Liberation Serif;">Uniqueness (Уникальность)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Обеспечивает, что данные не хранятся избыточно.&quot;}"><span style="font-family: Liberation Serif;">Обеспечивает, что данные не хранятся избыточно.</span></td>
</tr>
<tr>
<td align="left" valign="middle" height="47" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Value-Added (Ценность добавленной информации)&quot;}"><b><span style="font-family: Liberation Serif;">Value-Added (Ценность добавленной информации)</span></b></td>
<td align="left" valign="middle" data-sheets-value="{ &quot;1&quot;: 2, &quot;2&quot;: &quot;Предоставляет информацию о выгодах и преимуществах данных для бизнес-пользователя.&quot;}"><span style="font-family: Liberation Serif;">Предоставляет информацию о выгодах и преимуществах данных для бизнес-пользователя.</span></td>
</tr>
</tbody>
</table>
<p><strong>Оценка измерений качества данных может быть:</strong></p>
<ul>
<li>Независимой от задачи – не требует знаний о контексте использования данных и может применяться к любому набору данных.</li>
<li>Зависимой от задачи – требует понимания бизнес-правил организации, внутренних регламентов компании или законодательных требований.</li>
</ul>
<h4><strong>Полное управление качеством данных (Total Data Quality Management)</strong></h4>
<p>Первая методология — Total Data Quality Management (TDQM), которая применяет человеческие и количественные ресурсы для улучшения продуктов и услуг, аналогично TQM.<br />
TDQM поддерживает миграцию баз данных, продвигает использование стандартов данных и применение бизнес-правил для улучшения баз данных.</p>
<p>В TDQM существует четыре циклические фазы, представленные на Рисунке 3.23.</p>
<p><strong>Рисунок 3.23. Фазы TDQM</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_23_TDQM_Phases.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1247" src="https://datatalks.ru/wp-content/uploads/2025/02/3_23_TDQM_Phases.jpeg" alt="" width="682" height="451" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_23_TDQM_Phases.jpeg 682w, https://datatalks.ru/wp-content/uploads/2025/02/3_23_TDQM_Phases-300x198.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_23_TDQM_Phases-450x298.jpeg 450w" sizes="(max-width: 682px) 100vw, 682px" /></a></p>
<p><strong>Фаза определения</strong> – анализируются данные и собираются бизнес-требования.<br />
Определяется информационная система производства данных.<br />
На выходе получается логический и физический дизайн информационного продукта с атрибутами качества.<br />
Создаётся E/R-модель качества, которая определяет информационный продукт и качество данных.</p>
<p><strong>Фаза измерения</strong> – определяются метрики качества данных и выявляются проблемы качества после их анализа.</p>
<p><strong>Фаза анализа</strong> – анализируются выявленные проблемы качества данных, и определяются первопричины ошибок.</p>
<p><strong>Фаза улучшения</strong> – выбираются ключевые области для улучшения, а также разрабатываются стратегии и методы.<br />
Эти стратегии и методы применяются в фазе определения, когда цикл TDQM начинается заново.</p>
<h4><strong>Качество хранилища данных (Data Warehouse Quality)</strong></h4>
<p>Вторая методология — Data Warehouse Quality (DWQ), разработанная в рамках европейского проекта по качеству хранилищ данных.<br />
Хотя в DWQ используются те же фазы, что и в Total Data Quality Methodology, их значение и взаимосвязь отличаются.<br />
Рисунок 3.24 показывает процессный поток методологии DWQ.</p>
<p><strong>Рисунок 3.24. Фазы DWQ</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/3_24_DWQ_Phases.jpeg"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1248" src="https://datatalks.ru/wp-content/uploads/2025/02/3_24_DWQ_Phases.jpeg" alt="" width="1158" height="312" srcset="https://datatalks.ru/wp-content/uploads/2025/02/3_24_DWQ_Phases.jpeg 1158w, https://datatalks.ru/wp-content/uploads/2025/02/3_24_DWQ_Phases-300x81.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/3_24_DWQ_Phases-1024x276.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/02/3_24_DWQ_Phases-768x207.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/3_24_DWQ_Phases-450x121.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/3_24_DWQ_Phases-780x210.jpeg 780w" sizes="(max-width: 1158px) 100vw, 1158px" /></a></p>
<p>Входными данными для фазы определения являются:</p>
<ul>
<li>определение данных из операционных систем,</li>
<li>перспективы заинтересованных сторон,</li>
<li>информация о проекте и контексте хранилища данных.</li>
</ul>
<p>В этой фазе определяются релевантные измерения качества данных для хранилища, включая их связь с объектами хранилища данных.</p>
<p>Бизнес-пользователи и другие заинтересованные стороны взвешивают эти измерения качества.</p>
<p>Фаза измерения использует измерения качества из фазы определения и определяет зависимости между ними.</p>
<p>Фаза анализа использует результаты фазы измерения, чтобы выявить критические области, сравнивая фактические показатели качества данных с требованиями качества данных бизнес-пользователей.</p>
<p>Список измерений качества данных, требующих улучшения, применяется в фазе улучшения для повышения качества данных.</p>
<h4><strong>Интеграция TQM с методологией Data Vault 2.0</strong></h4>
<p>В методологии Data Vault 2.0 TQM служит механизмом управления для применения гибких методологий, CMMI и Six Sigma.<br />
Благодаря этому TQM связывает элементы улучшения из этих методов, чтобы постоянно совершенствоваться и превышать ожидания бизнес-пользователей, бизнес-спонсоров и других заинтересованных сторон.</p>
<p>TQM имеет несколько ключевых элементов, которые важны при внедрении ориентированного на клиента процесса постоянного улучшения:</p>
<ul>
<li><strong>Ориентация на клиента:</strong> качество в контексте TQM определяется клиентом. В случае хранилищ данных бизнес-пользователь определяет качество артефактов, создаваемых в проекте хранилища данных. Поэтому именно пользователи решают, стоит ли усилие команды хранилища данных, обучение, постоянное совершенствование процессов и повышение качества затраченных ресурсов.</li>
<li><strong>Всеобщее вовлечение сотрудников:</strong> для достижения высшего качества артефактов хранилища данных каждый сотрудник должен участвовать в процессах постоянного улучшения. Руководство обязано создать необходимые условия для поддержки этих усилий. Процессы непрерывного улучшения должны быть интегрированы в обычные бизнес-операции.</li>
<li><strong>Ориентация на процессы:</strong> аналогично Six Sigma, TQM фокусируется на процессах. Это идеально подходит для Data Vault 2.0, где четко определенные процессы с четкими этапами приводят к ожидаемым результатам. Показатели производительности контролируются постоянно. Если возникают неожиданные отклонения от ожидаемых результатов, они фиксируются и передаются в управление проектом.</li>
<li><strong>Интеграция:</strong> TQM не ограничивается одной функциональной командой. Для достижения всеобщего качества требуется интеграция различных функциональных подразделений, обеспечивающая их взаимосвязанную работу.</li>
<li><strong>Стратегический и системный подход:</strong> тотальное качество не достигается случайно. Оно является результатом стратегического планирования и управления и включает интеграцию качества в стратегический план организации.</li>
<li><strong>Постоянное улучшение:</strong> TQM невозможно без непрерывного повышения возможностей организации. TQM управляет этими постоянными улучшениями.</li>
<li><strong>Принятие решений на основе фактов:</strong> процесс улучшения основывается на измерениях производительности. Для этого организация должна постоянно собирать и анализировать данные.</li>
<li><strong>Коммуникация:</strong> эффективная коммуникация необходима для поддержания мотивации сотрудников на всех уровнях организации.</li>
</ul>
<p>Обсуждаемые в начале этого раздела встречи должны интегрировать эти элементы, чтобы быть успешными с точки зрения TQM.</p>
<p>Иногда, когда в отчетах или OLAP обнаруживается ошибочная информация, организация не следует рекомендованному подходу TQM для определения первопричины ошибки и ее устранения (вероятно, в исходной системе или бизнес-процессах). Вместо этого организация принимает решение исправить ошибку где-то между исходной системой и конечными отчетами. Если выбран такой подход, то единственно допустимый способ исправления ошибки в хранилище данных — применение мягких бизнес-правил на выходе из Raw Data Vault, например, используя Business Vault или при предоставлении информационного хранилища.<br />
В главе 13 &#171;Реализация качества данных&#187; показано, как реализовать управление качеством данных в хранилище. Однако, с точки зрения TQM, цель этих усилий — создание замкнутого цикла процесса. Это достигается путем вовлечения бизнес-пользователей в выравнивание данных в исходных системах и исправление ошибок непосредственно в исходных системах, а не в хранилище данных.</p>
<p>Однако <strong>TQM</strong> — это не просто исправление качества данных (DQ). Хотя TQM включает в себя мероприятия, связанные с качеством данных, его суть заключается в идентификации ошибок в отчетах, анализе данных и оформлении запросов на изменения в исходных системах для исправления процессов, данных или обоих аспектов одновременно.<br />
Без замкнутого цикла обработки (как описано выше: пользователи исправляют и согласовывают наборы данных в исходных системах) это превращается в простое управление качеством данных (DQ). Вместо этого TQM требует вовлеченности людей, а также замыкания цикла между исходными системами и уровнем представления за счет обратной связи и устранения ошибок, что позволяет устранить разрывы во всей системе.</p>
<p>Глава 9 расскажет о <strong>управлении эталонными данными (MDM), к</strong>оторое позволяет бизнес-пользователям участвовать в управлении данными и требует взаимодействия &#171;менеджмента&#187; и управления качеством данных. Эти же принципы применяются для устранения разрывов и согласования всех исходных систем в соответствии с концепцией эталонных данных, определяемой бизнес-пользователями.</p>
<p>В этой же главе рассматривается управляемая <strong>самостоятельная аналитика BI (Managed Self-Service BI)</strong>, которая позволяет бизнес-пользователям напрямую взаимодействовать с данными в корпоративном хранилище, вносить исправления в режиме реального времени, а также публиковать сообщения, создаваемые в процессе Managed Self-Service BI. Эти сообщения передаются обратно в операционные системы через <strong>Service-Oriented Architecture (SOA)</strong> и <strong>Enterprise Service Bus (ESB)</strong>.</p>
<p>Для этого необходима функция обратной записи (write-back capabilities), которая позволит бизнес-пользователям вносить исправления в исходные системы.</p>
<p>Сообщение <a href="https://datatalks.ru/chapter-3-data-vault-2-0-methodology/">Перевод 3 Главы &#8212; Методология Data Vault 2.0</a> появились сначала на <a href="https://datatalks.ru">DataTalks.RU. Data Engineering / DWH / Data Pipeline</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datatalks.ru/chapter-3-data-vault-2-0-methodology/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Перевод 2 Главы &#8212; Масштабируемая архитектура хранилища данных</title>
		<link>https://datatalks.ru/data-vault-2-0-chapter-2-scalable-data-warehouse-architecture/</link>
					<comments>https://datatalks.ru/data-vault-2-0-chapter-2-scalable-data-warehouse-architecture/#respond</comments>
		
		<dc:creator><![CDATA[Data Engineer (Admin)]]></dc:creator>
		<pubDate>Sun, 16 Feb 2025 20:28:08 +0000</pubDate>
				<category><![CDATA[Data Vault 2.0]]></category>
		<guid isPermaLink="false">https://datatalks.ru/?p=1104</guid>

					<description><![CDATA[<p>Перевод книги &#171;Building a Scalable Data Warehouse with Data Vault 2.0&#187; подготовлен автором сайта ГЛАВА 2. Масштабируемая архитектура хранилища данных Масштабируемые хранилища данных, как желаемое решение некоторых проблем, рассмотренных в предыдущей главе, обладают определёнными архитектурными аспектами, которые объясняются в данной главе. Среди них: нагрузка, сложность данных, сложность запросов, доступность и задержка данных. В этой главе представлена [&#8230;]</p>
<p>Сообщение <a href="https://datatalks.ru/data-vault-2-0-chapter-2-scalable-data-warehouse-architecture/">Перевод 2 Главы &#8212; Масштабируемая архитектура хранилища данных</a> появились сначала на <a href="https://datatalks.ru">DataTalks.RU. Data Engineering / DWH / Data Pipeline</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>Перевод книги &#171;Building a Scalable Data Warehouse with Data Vault 2.0&#187; подготовлен автором сайта</em></p>
<h1>ГЛАВА 2. Масштабируемая архитектура хранилища данных</h1>
<p>Масштабируемые хранилища данных, как желаемое решение некоторых проблем, рассмотренных в предыдущей главе, обладают определёнными архитектурными аспектами, которые объясняются в данной главе. Среди них: нагрузка, сложность данных, сложность запросов, доступность и задержка данных.</p>
<p>В этой главе представлена архитектура хранилища данных на основе Data Vault, включая stage слой хранилища, самого хранилища данных и витрин данных. Также показано, как использовать бизнес-слой Data Vault и другие компоненты предлагаемой архитектуры.</p>
<p><strong>Ключевые слова:</strong></p>
<ul>
<li>сложность данных (data complexity)</li>
<li>сложность запросов (query complexity)</li>
<li>задержка данных (data latency)</li>
<li>хранилище данных (data warehouse)</li>
<li>Data Vault</li>
<li>архитектура данных (data architecture)</li>
</ul>
<p>Сегодняшние системы хранилищ данных позволяют аналитикам легко получать доступ к интегрированным данным. Для достижения этой цели команда, разрабатывающая хранилище данных, должна обработать и смоделировать данные в соответствии с требованиями пользователей. Лучший подход к разработке хранилища данных — это итеративный процесс разработки. Это означает, что функциональность хранилища данных, запрашиваемая бизнес-пользователями, разрабатывается, реализуется и разворачивается итерациями (иногда называемыми спринтами или циклами). В каждой итерации хранилище данных получает новую функциональность.</p>
<p>Этот подход противоположен стратегии &#171;большого взрыва&#187; (big-bang), при которой вся функциональность разрабатывается в одном крупном процессе и затем развертывается целиком.</p>
<p>Однако, даже при итеративном подходе, по мере выполнения проекта затраты (и связанные с ними усилия) на добавление новой функциональности, как правило, возрастают из-за необходимости учитывать существующие зависимости.</p>
<p>На Рисунке 2.1 показано, что внедрение первой витрины данных требует относительно небольших усилий. Но при реализации второй витрины команда разработки должна поддерживать уже существующее решение и учитывать существующие зависимости, например, источники данных, интегрированные в первой витрине, или операционные системы, использующие данные из существующих таблиц.</p>
<p>Чтобы гарантировать, что ранее разработанная функциональность не будет нарушена при развертывании новых фичей для второй витрины данных, старая функциональность должна быть повторно протестирована. Во многих случаях существующее решение необходимо рефакторить, чтобы сохранить работоспособность отдельных витрин данных при добавлении новых источников в систему. Все эти действия увеличивают трудозатраты на создание второй витрины данных, а также на внедрение любой последующей витрины или другой новой функциональности.</p>
<p>Этот дополнительный объём работы изображён в виде роста графика на Рисунке 2.1: как только создана первая витрина данных, решение переходит в режим поддержки всей существующей функциональности. Следующий проект реализует вторую витрину данных. Для этого требуется не только добавить новую функциональность, но и поддерживать уже имеющуюся. Из-за зависимостей существующая функциональность должна регулярно рефакториться и повторно тестироваться.</p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/2_1_The_maintenance_nightmare.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1170 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/2_1_The_maintenance_nightmare.jpeg" alt="" width="1293" height="611" srcset="https://datatalks.ru/wp-content/uploads/2025/02/2_1_The_maintenance_nightmare.jpeg 1293w, https://datatalks.ru/wp-content/uploads/2025/02/2_1_The_maintenance_nightmare-300x142.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/2_1_The_maintenance_nightmare-1024x484.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/02/2_1_The_maintenance_nightmare-768x363.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/2_1_The_maintenance_nightmare-450x213.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/2_1_The_maintenance_nightmare-780x369.jpeg 780w" sizes="(max-width: 1293px) 100vw, 1293px" /></a></p>
<p><strong>РИСУНОК 2.1: Кошмар поддержки</strong></p>
<p>Другими словами, расширяемость многих архитектур хранилищ данных, включая представленные в Главе 1, Введение в хранилища данных, оставляет желать лучшего. Более того, типичные архитектуры хранилищ данных часто не обладают другими измерениями масштабируемости, кроме описанного измерения расширяемости. Эти измерения мы обсудим в следующем разделе.</p>
<h2>Измерения масштабируемых архитектур хранилищ данных</h2>
<p>Бизнес-пользователи систем хранилищ данных ожидают, что можно будет загружать и подготавливать всё больше данных с точки зрения разнообразия, объёма и скорости. Кроме того, нагрузка на типичные среды хранилищ данных продолжает расти, особенно если первая версия хранилища данных оказалась успешной среди первых пользователей. Таким образом, масштабируемость имеет несколько измерений.</p>
<h3>Нагрузка (Workload)</h3>
<p><strong>Корпоративное хранилище данных (Enterprise Data Warehouse, EDW)</strong> является «безусловно самым крупным и вычислительно затратным бизнес-приложением» в типичном предприятии. Системы EDW состоят из огромных баз данных, содержащих исторические данные объёмом от нескольких гигабайт до терабайт.</p>
<p>Успешные системы EDW сталкиваются с двумя проблемами, связанными с нагрузкой на систему:</p>
<ul>
<li>во-первых, они испытывают стремительный рост объёмов данных и нагрузки приложений, а</li>
<li>во-вторых, растёт число одновременных пользователей.</li>
</ul>
<p>Для обеспечения требуемой производительности системы EDW реализуются на крупномасштабных параллельных вычислительных платформах, таких как <strong>среды массово-параллельной обработки (Massively Parallel Processing, MPP)</strong> или <strong>симметричной многопроцессорной обработки (Symmetric Multiprocessing, SMP)</strong>, а также на кластерах и программном обеспечении для параллельных баз данных. Фактически, большинство средних и крупных хранилищ данных невозможно было бы реализовать без масштабных параллельных аппаратных решений и соответствующего программного обеспечения для параллельных баз данных.</p>
<p>Для обработки требуемой нагрузки одного только параллельного оборудования или программного обеспечения недостаточно. Логическая и физическая структура баз данных должна быть оптимизирована для ожидаемых объёмов данных.</p>
<h3>Сложность данных (Data Complexity)</h3>
<p>Ещё одним измерением масштабируемости корпоративного хранилища данных является сложность данных. На рост сложности данных влияют следующие факторы:</p>
<ul>
<li><strong>Разнообразие данных (Variety of data):</strong> сегодня предприятия собирают не только традиционные мастер-данные или транзакционные данные (например, реляционные или мэйнфрейм-данные). Всё больше появляется полуструктурированных данных, таких как электронные письма, электронные формы, файлы HTML и XML, а также неструктурированных данных, включая коллекции документов, данные социальных сетей, изображения, видео и аудиофайлы. Ещё один тип данных — это данные, генерируемые сенсорами и машинами, которые могут требовать специальной обработки. Во многих случаях компании стремятся извлекать структурированную информацию из неструктурированных или полуструктурированных данных, чтобы повысить их бизнес-ценность. Хотя файлы могут иметь структуру, их содержимое может её не иметь. Например, невозможно найти лицо конкретного человека в видео без полной обработки всех кадров и создания метаданных, указывающих, где в содержимом появляются лица.</li>
<li><strong>Объём данных (Volume of data):</strong> скорость, с которой компании генерируют и накапливают новые данные, растёт. Примеры включают контент с веб-сайтов или социальных сетей, коллекции документов и электронных писем, данные веб-журналов и данные, генерируемые машинами. Рост объёмов данных приводит к созданию гораздо более крупных наборов данных, объём которых может достигать сотен терабайт, пета-байтов и даже превышать их.</li>
<li><strong>Скорость поступления данных (Velocity of data):</strong> увеличивается не только разнообразие и объём данных, но и скорость их создания. Один из примеров — финансовые данные с фондовых рынков, таких как биржи. Эти данные генерируются с очень высокой частотой и сразу анализируются для реагирования на изменения рынка. Другие примеры включают данные по транзакциям с банковскими картами для выявления мошенничества, а также данные с датчиков или камер видеонаблюдения (CCTV), которые используются для автоматического анализа видео и изображений в режиме реального времени или почти реального времени.</li>
<li><strong>Достоверность (надёжность) данных &#8212; Veracity (trustworthiness) of data:</strong> для уверенности в данных необходимо, чтобы они имели строгий контроль качества, прозрачную историю происхождения (data lineage) и надёжную интеграцию.</li>
</ul>
<h3>Сложность аналитики (Analytical Complexity)</h3>
<p>Из-за наличия больших объёмов данных с высокой скоростью поступления и большим разнообразием, компании требуют всё более сложных аналитических задач для получения аналитических инсайтов, необходимых для решения бизнес-проблем. Некоторые из таких анализов требуют подготовки данных таким образом, который не был предусмотрен изначальными разработчиками хранилища данных. Например, данные, которые подаются в алгоритм data mining, должны обладать особыми характеристиками с точки зрения их разнообразия, объёма и скорости.</p>
<p><strong>Рассмотрим пример ритейл-маркетинга:</strong> точность и своевременность маркетинговых кампаний необходимо улучшить при переходе от розничных магазинов к онлайн-каналам, где требуется более детальное понимание клиентов:</p>
<ul>
<li>Для определения сегментации клиентов и их покупательского поведения бизнесу может потребоваться исторический анализ и отчётность по демографии клиентов и их транзакциям.</li>
<li>Возможности кросс-продаж можно выявить с помощью анализа корзин покупок (market basket analysis), который показывает, какие товары продаются вместе.</li>
<li>Для понимания поведения клиентов в онлайн-среде требуется <strong>анализ последовательности кликов (click-stream analysis)</strong>. Это помогает предлагать клиентам <strong>дополнительные товары (up-sell)</strong> при посещении веб-сайта.</li>
</ul>
<p>С учётом огромного объёма данных из социальных сетей и пользовательского контента компании могут использовать анализ отзывов о продуктах, рейтингов, лайков и дизлайков, комментариев, взаимодействий со службой поддержки и других данных.<br />Эти примеры ясно показывают, что для решения таких новых и сложных аналитических задач требуются источники данных различной сложности. Кроме того, становится всё более распространённым комбинирование структурированных и неструктурированных данных.</p>
<h3>Сложность запросов (Query Complexity)</h3>
<p>Когда поставщики решений бизнес-аналитики (BI) выбирают реляционную систему управления базами данных (RDBMS) для хранения и управления данными хранилища, это естественный выбор. Реляционные базы данных предоставляют простые структуры данных и высокоуровневые, ориентированные на наборы языки, что делает их идеальными для приложений хранилищ данных.</p>
<p>Процессоры языка SQL внутри движка базы данных преобразуют SQL-запросы в параллельные низкоуровневые операции, чтобы повысить производительность запросов (ускорение, <strong>speedup</strong>) и обеспечить постепенное масштабирование для увеличенной нагрузки, сохраняя требуемый уровень производительности (масштабирование, <strong>scale-up</strong>).</p>
<p>Многие RDBMS, такие как Microsoft SQL Server, оптимизированы для приложений хранилищ данных, например, с использованием эвристических методов для распознавания шаблонов запросов к звездной схеме, которые SQL-оптимизатор использует для повышения производительности запросов. Microsoft SQL Server также применяет продвинутые методы фильтрации для улучшения производительности запросов, используя такие функции, как оператор <strong>bitmap showplan</strong>. Однако некоторые из этих функций доступны только при соблюдении определённых правил при написании SQL-запросов (например, использовании условий <strong>equi-join</strong> только во внутренних соединениях (INNER JOIN)).</p>
<p>Однако в некоторых случаях запросы к хранилищу данных могут быть сложными и, учитывая его огромные размеры, выполняться очень долго. Примеры таких запросов включают анализ временных рядов и запросы к реляционным OLAP-кубам. Для бизнес-аналитика медленное время отклика хранилища данных неприемлемо, так как это значительно снижает продуктивность.</p>
<h3>Доступность (Availability)</h3>
<p>Команда хранилища данных отвечает за доступность всей системы хранилища, включая витрины данных, отчёты, OLAP-кубы и любые другие интерфейсы, используемые бизнес-пользователями. В большинстве случаев обе стороны подписывают <strong>соглашение об уровне обслуживания (Service Level Agreement, SLA)</strong>, которое фиксирует требования бизнеса и является основой для планирования доступности хранилища данных.</p>
<p>Доступность системы хранилища данных может быть затронута при добавлении новой функциональности. Например, если необходимо загрузить и интегрировать новые источники данных в витрину данных, это увеличит время, необходимое для загрузки всех источников данных и построения витрин. Одним из решений проблемы является параллельная загрузка данных, так как добавление дополнительных вычислительных ресурсов может обеспечить доступность системы. Однако возможность «просто добавить вычислительную мощность» должна быть предусмотрена в архитектуре хранилища данных.</p>
<p>Кроме того, все крупные реляционные СУБД, включая Enterprise-версию Microsoft SQL Server 2014, предлагают множество функций, таких как <strong>партиционирование/сегментирование (partitioning)</strong> и <strong>снимки базы данных (snapshots)</strong>, которые помогают соответствовать требованиям бизнес-пользователей по доступности. Ещё один вариант — <strong>создание фейловер-кластера (fail-over cluster)</strong>, который обеспечивает резервный сервер в случае аварии.</p>
<h3>Безопасность (Security)</h3>
<p>По мере роста объёмов данных увеличивается и необходимость их защиты — фактически, потребность в обеспечении безопасности возрастает экспоненциально относительно размера и разнообразия данных. Безопасность усложняет систему, как при хранении данных, так и при их извлечении. Чем больше объём данных, тем выше вероятность того, что злоумышленник сможет незаметно нарушить безопасность.</p>
<p>Современные масштабируемые хранилища данных должны обеспечивать надлежащий уровень безопасности с самого начала проекта. Простое использование NoSQL не решает этих проблем — более того, оно их усугубляет.</p>
<p><strong>Система бизнес-аналитики Data Vault 2.0</strong> направлена на решение проблем безопасности, обеспечивая прямые точки интеграции на уровне модели данных, уровней реализации, архитектуры и компонентов проекта.</p>
<h2>Архитектура Data Vault 2.0</h2>
<p><strong>Архитектура Data Vault 2.0</strong> учитывает расширяемость и измерения масштабируемости, описанные в предыдущем разделе, модифицируя типовую трёхуровневую архитектуру хранилища данных, которая была представлена в предыдущей главе.</p>
<p>Как мы изложили в Главе 1, <strong>основная цель корпоративного хранилища данных (EDW)</strong> — это предоставление и представление информации, то есть агрегированных, суммарных и консолидированных данных в контексте. Чтобы подчеркнуть эту ключевую задачу EDW, мы предпочитаем термин <strong>&#171;витрина информации&#187; (information mart)</strong>, а не <strong>&#171;витрина данных&#187; (data mart)</strong>, который обычно используется в сообществе BI.</p>
<p><strong>Другие модификации типовой архитектуры из Главы 1 включают:</strong></p>
<ul>
<li><strong>Зону стейджинга</strong>, которая не хранит исторические данные и не вносит никаких изменений в данные, за исключением проверки ожидаемого типа данных.</li>
<li><strong>Слой хранилища данных</strong>, смоделированный по методологии Data Vault.</li>
<li>Один или несколько слоёв <strong>витрин информации (information mart)</strong>, которые зависят от слоя хранилища данных.</li>
<li>Опциональный <strong>Metrics Vault,</strong> который записывает и фиксирует информацию о времени выполнения.</li>
<li>Опциональный <strong>Business Vault</strong>, предназначенный для хранения данных, к которым были применены бизнес-правила. В большинстве случаев бизнес-правила изменяют или трансформируют данные, превращая их в полезную информацию. Это ещё один вид витрины информации.</li>
<li>Опциональный <strong>Operational Vault</strong>, который хранит данные, поступающие в хранилище из операционных систем.</li>
</ul>
<p>Функциональность управляемой BI самообслуживания (Managed Self-Service BI), позволяющая бизнес-пользователям самостоятельно выполнять анализ данных без участия IT, включая возможность обратной записи информации в слой корпоративного хранилища данных.</p>
<p>Все опциональные Vault-ы – <strong>Metrics Vault, Business Vault и Operational Vault</strong> – являются частью Data Vault и интегрированы в слой хранилища данных.</p>
<p><strong>Референсная архитектура Data Vault 2.0 представлена на Рисунке 2.2. Архитектура Data Vault</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/2_2_data_vault_architecture.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1171 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/2_2_data_vault_architecture.jpeg" alt="" width="1309" height="960" srcset="https://datatalks.ru/wp-content/uploads/2025/02/2_2_data_vault_architecture.jpeg 1309w, https://datatalks.ru/wp-content/uploads/2025/02/2_2_data_vault_architecture-300x220.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/2_2_data_vault_architecture-1024x751.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/02/2_2_data_vault_architecture-768x563.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/2_2_data_vault_architecture-450x330.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/2_2_data_vault_architecture-780x572.jpeg 780w" sizes="(max-width: 1309px) 100vw, 1309px" /></a></p>
<p><strong>Архитектура Data Vault 2.0 основана на трёх уровнях:</strong></p>
<ul>
<li><strong>Зона стейджинга (staging area),</strong> собирающая сырой (raw) данные из источников.</li>
<li><strong>Слой корпоративного хранилища данных (enterprise data warehouse layer),</strong> смоделированный в соответствии с моделью Data Vault 2.0.</li>
<li><strong>Слой предоставления информации (information delivery layer)</strong>, содержащий витрины информации (information marts), организованные в звёздные схемы (star schemas) и другие структуры.</li>
</ul>
<p>Эта архитектура поддерживает <strong>пакетную загрузку (batch loading)</strong> из источников данных и <strong>загрузку в реальном времени (real-time loading)</strong> через <strong>шину корпоративных сервисов (ESB, Enterprise Service Bus)</strong> или другую <strong>сервис-ориентированную архитектуру (SOA, Service-Oriented Architecture)</strong>.</p>
<p>Также возможно интегрировать неструктурированные базы данных NoSQL в эту архитектуру. Благодаря платформенной независимости Data Vault 2.0, NoSQL может быть использован на любом уровне хранилища данных, включая зону стейджинга, корпоративное хранилище данных и уровень предоставления информации.</p>
<p>Таким образом, NoSQL-база данных может использоваться как стейджинг и загружать данные в реляционный слой Data Vault. Однако возможно и двустороннее взаимодействие между NoSQL и Data Vault с использованием <strong>хэшированного бизнес-ключа (hashed business key)</strong>. В этом случае система становится гибридным решением, а витрины информации получают данные из обеих сред.</p>
<p>Однако системы реального времени и NoSQL выходят за рамки данной книги. Поэтому в дальнейшем мы сосредоточимся на реляционных аспектах архитектуры.</p>
<p>Одно из ключевых отличий архитектуры Data Vault от типичных хранилищ данных заключается в том, что большинство бизнес-правил применяется на этапе построения витрин информации (information marts), а значит, переносится ближе к конечному пользователю.</p>
<p>В Data Vault проводится разграничение между <strong>жёсткими (hard)</strong> и <strong>мягкими (soft) бизнес-правилами</strong>. Этот вопрос рассмотрен в следующем разделе.</p>
<h3><strong>Определение бизнес-правил</strong></h3>
<p>В Data Vault 2.0 различают жёсткие (hard) и мягкие (soft) бизнес-правила.</p>
<p>В общем смысле, бизнес-правила модифицируют входящие данные для соответствия требованиям бизнеса.</p>
<h4><strong>Жёсткие (hard) бизнес-правила</strong></h4>
<p><strong>Жёсткие бизнес-правила</strong> – это технические правила, обеспечивающие согласованность доменов данных (data type matching).</p>
<p><strong>Пример типичного жёсткого бизнес-правила</strong> – усечение строковых данных, если их длина превышает заданное значение в стейджинговой таблице.</p>
<p>Жёсткие бизнес-правила применяются при извлечении данных из источников и загрузке их в зону стейджинга.</p>
<p>Они влияют только на приведение типов данных (например, длину строк или символы Unicode), но не изменяют значения данных для соответствия аналитическим требованиям (например, не конвертируют между американской и метрической системой измерений).</p>
<p><strong>Другие примеры жёстких бизнес-правил:</strong></p>
<ul>
<li>Нормализация иерархических COBOL-копибуков из мэйнфреймов или XML-структур.</li>
<li>Выделение системных колонок (например, вычисление технических идентификаторов).</li>
</ul>
<p><strong>Главное правило: </strong>Жёсткие бизнес-правила никогда не изменяют смысл входящих данных – они только определяют способ их хранения.</p>
<h4><strong>Мягкие (soft) бизнес-правила</strong></h4>
<p>В отличие от жёстких, мягкие бизнес-правила определяются бизнес-пользователями и изменяют смысл данных.</p>
<p>Такие правила преобразуют данные или меняют их интерпретацию, например, изменяя <strong>уровень детализации (grain)</strong>.</p>
<p><strong>Примеры мягких бизнес-правил:</strong></p>
<ul>
<li><strong>Агрегация данных</strong> – например, группировка клиентов по уровню дохода, возрастным группам, сегментам.</li>
<li><strong>Консолидация данных</strong> – объединение данных из нескольких источников.</li>
<li><strong>Трансформация данных</strong> – изменение структуры данных для соответствия бизнес-требованиям.</li>
</ul>
<p>Таким образом, мягкие бизнес-правила определяют, как данные агрегируются, объединяются и преобразуются, чтобы соответствовать аналитическим задачам бизнеса.</p>
<h3><strong>Применение бизнес-правил</strong></h3>
<p>Поскольку необходимо согласовать типы данных исходной системы с таблицами зоны стейджинга, мы применяем жёсткие бизнес-правила при загрузке данных в зону стейджинга (Рисунок 2.3).</p>
<p>Этот процесс происходит не позднее, чем в момент вставки данных в стейджинговые таблицы, потому что сервер управления базами данных (DBMS) проверяет соответствие типов данных вставляемых значений и вызывает исключение (exception), если невозможно преобразовать входные данные к требуемому формату, заданному в определении данных колонки (data definition).</p>
<p>Например, если попытаться вставить буквенно-цифровой номер клиента в колонку с типом integer, то возникнет ошибка, потому что система ожидает числовой формат.</p>
<p>Этот процесс можно оптимизировать, добавив логику преобразования типов данных в <strong>ETL-процесс (Extract, Transform, Load)</strong>, который загружает данные в зону стейджинга. Таким образом, жёсткие бизнес-правила реализуются уже на этапе ETL-потока данных.</p>
<p><strong>Рисунок 2.3. Применение жёстких и мягких бизнес-правил в корпоративном хранилище данных Data Vault</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/2_3_Application_of_hard_and_soft_business_rules_in_a_Data_Vault.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1175 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/2_3_Application_of_hard_and_soft_business_rules_in_a_Data_Vault.jpeg" alt="" width="1548" height="847" srcset="https://datatalks.ru/wp-content/uploads/2025/02/2_3_Application_of_hard_and_soft_business_rules_in_a_Data_Vault.jpeg 1548w, https://datatalks.ru/wp-content/uploads/2025/02/2_3_Application_of_hard_and_soft_business_rules_in_a_Data_Vault-300x164.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/2_3_Application_of_hard_and_soft_business_rules_in_a_Data_Vault-1024x560.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/02/2_3_Application_of_hard_and_soft_business_rules_in_a_Data_Vault-768x420.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/2_3_Application_of_hard_and_soft_business_rules_in_a_Data_Vault-1536x840.jpeg 1536w, https://datatalks.ru/wp-content/uploads/2025/02/2_3_Application_of_hard_and_soft_business_rules_in_a_Data_Vault-450x246.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/2_3_Application_of_hard_and_soft_business_rules_in_a_Data_Vault-780x427.jpeg 780w" sizes="(max-width: 1548px) 100vw, 1548px" /></a></p>
<p>Жёсткие бизнес-правила несут определённые риски для ETL-рутин.</p>
<hr />
<blockquote>
<p><span style="color: inherit; font-family: inherit; font-size: inherit; font-weight: inherit; letter-spacing: -0.02em;"><span style="color: #ff6600;">ETL-рутины (или просто ETL-процессы)</span> — это набор процедур или сценариев, используемых для извлечения (Extract), трансформации (Transform) и загрузки (Load) данных из различных источников в систему хранения данных, такую как хранилище данных (data warehouse) или базу данных.</span></p>
</blockquote>
<hr />
<p>Если входные данные не соответствуют установленному правилу, а этот случай не был учтён, то ETL-рутина может прерваться, и процесс загрузки остановится.</p>
<p>В отличие от них, мягкие бизнес-правила только изменяют данные или их значение, но не влияют на структурные ограничения, поэтому мы должны обрабатывать их отдельно.</p>
<p>Для этого необходимо разграничить применение жёстких и мягких бизнес-правил.</p>
<p>В типичных хранилищах данных, например, в двух- и трёхслойных архитектурах, описанных в предыдущей главе, мягкие бизнес-правила также часто применяются на ранних этапах загрузки.</p>
<p>Это объясняется тем, что слой хранилища данных построен либо по модели звёздной схемы (Kimball), либо нормализован в третьей нормальной форме (3NF).</p>
<p>Чтобы данные соответствовали этим структурам, ETL-потоки должны трансформировать их в соответствии с бизнес-требованиями пользователей.</p>
<p>Эта трансформация, по сути, является реализацией мягких бизнес-правил, включая агрегацию и консолидацию входных данных.</p>
<p>Раннее применение бизнес-правил улучшает их единообразное использование и повышает качество данных.</p>
<h4><strong>Проблема изменений бизнес-правил</strong></h4>
<p>Однако возникает проблема, если бизнес-правила изменяются.</p>
<p>Чем раньше бизнес-правила применены в архитектуре хранилища данных, тем больше зависимостей возникает в верхних слоях хранилища.</p>
<p>Рассмотрим пример из авиационной отрасли.</p>
<p>Регистрационный номер самолёта – это стандартизированный буквенно-цифровой идентификатор воздушного судна, который используется по всему миру.</p>
<p>Каждый номер содержит префикс, указывающий страну регистрации самолёта.</p>
<p><strong>Например:</strong></p>
<ul>
<li>Регистрационный номер &#171;D-EBUT&#187; указывает, что самолёт зарегистрирован в Германии (префикс &#171;D&#187;).</li>
<li>В Германии такие номера являются &#171;умными ключами&#187; (smart keys) – этот концепт подробно рассматривается в Главе 4. Моделирование Data Vault.</li>
<li>В случае немецкого самолёта &#171;D-EBUT&#187; второй символ номера указывает, что воздушное судно – одномоторное.</li>
</ul>
<p>В США обычно используется префикс &#171;N&#187;.</p>
<p>До 31 декабря 1948 года в США также существовал второй префикс, обозначавший категорию самолёта (см. Таблицу 2.1).</p>
<p><strong>Таблица 2.1. Префиксы категорий самолётов в США до декабря 1948 года</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/table_2_1.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1172 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/table_2_1.jpeg" alt="" width="732" height="274" srcset="https://datatalks.ru/wp-content/uploads/2025/02/table_2_1.jpeg 732w, https://datatalks.ru/wp-content/uploads/2025/02/table_2_1-300x112.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/table_2_1-450x168.jpeg 450w" sizes="(max-width: 732px) 100vw, 732px" /></a></p>
<p>Например, самолет с регистрационным номером N-X-211 зарегистрирован в экспериментальной категории.</p>
<p>Однако FAA решила прекратить использование второго префикса и теперь присваивает номера от 3 (N1A) до 6 символов (N99999), которые не несут никакого дополнительного смысла, за исключением первого префикса, указывающего на страну регистрации.</p>
<p>Фактически, вторая буква теперь всегда является числом от 1 до 9.</p>
<p><strong>Теперь рассмотрим влияние этого изменения на хранилище данных.</strong></p>
<p>Если категория самолета извлекалась из (теперь уже исторического) регистрационного номера N, то вторая буква номера использовалась для идентификации категории самолета сразу после загрузки данных из стейджинговой зоны в нормализованное хранилище данных, где категория, скорее всего, хранилась в виде отдельной колонки в таблице самолетов.</p>
<p>Однако после изменения формата регистрационных номеров вторая позиция теперь содержит число от 1 до 9, которое не несет никакого смысла.</p>
<p>Чтобы обновить бизнес-правило, наиболее простым подходом было бы введение новой категории (&#171;Неизвестная категория&#187;), к которой будут отнесены самолеты, если второй символ их регистрационного номера находится в диапазоне от 1 до 9.</p>
<p>Однако, поскольку новых самолетов с какой-либо категорией, кроме &#171;Неизвестной&#187;, больше не появится, логично полностью убрать колонку категории (если только анализ исторических самолетов не является приоритетом).</p>
<p>Это решение еще более оправдано, если учесть, что в современной авиации самолеты классифицируются по другим критериям, таким как код операции, класс летной годности и другие категории.</p>
<p>Таким образом, категоризация, приведенная в Таблице 2.1, становится устаревшей.</p>
<p>Таким образом, это изменение в бизнес-правиле требует замены одной категории на несколько новых категорий.</p>
<p>В нормализованном хранилище данных потребуется удалить старый столбец категории и добавить несколько ссылок на новые категории для самолетов.</p>
<p>После внесения изменений в ETL-процессы, которые загружают данные из стейджинговой зоны в нормализованное хранилище данных, можно изменить витрину данных, построенную поверх слоя хранилища, и модифицировать ETL-рутины витрины данных.</p>
<p><strong>При таком подходе возникает несколько вопросов:</strong></p>
<ul>
<li>Как обрабатывать исторические данные в нормализованном хранилище данных?</li>
<li>Где хранить исторические данные для последующего анализа (если бизнесу это понадобится в будущем)?</li>
<li>Как анализировать как исторические, так и современные самолеты (это бизнес-решение)?</li>
<li>Будут ли существовать отдельные измерения (для исторической категории и современных категорий) в одной витрине данных, или потребуется создать отдельные витрины данных для исторических и современных самолетов?</li>
<li>Какое значение по умолчанию использовать для исторической категории в современных самолетах?</li>
<li>Какие значения по умолчанию использовать для современных категорий в отношении старых самолетов?</li>
</ul>
<p><strong>В архитектуре Data Vault 2.0</strong> категоризация воздушного судна загружается в таблицу, называемую <strong>спутником (satellite)</strong>, которая содержит описательные данные (базовые сущности моделирования Data Vault 2.0 подробно рассматриваются в главе 4). Когда логика в исходной системе изменяется – в данном случае формат N-Number – старый спутник закрывается (в него больше не загружаются новые данные). Все новые данные загружаются в новый спутник с обновленной структурой, соответствующей структуре исходных данных. В этом процессе бизнес-правила не применяются. Загружаются все данные.</p>
<p>Поскольку теперь существуют две таблицы – одна с историческими данными, а другая с новыми данными, – становится проще применять бизнес-правила при загрузке данных из Data Vault в информационный витринный слой (information mart). Также легко создать одну информационную витрину для анализа исторических, более старых воздушных судов, и другую – для анализа современных самолетов, построенных после 1948 года. Однако реальное преимущество разделения жестких (hard) и мягких (soft) правил становится очевидным при рассмотрении ETL-джобов, которые нужно адаптировать под новую категоризацию: никаких.</p>
<p>ETL-джобы, загружающие исторические данные, остаются неизменными и готовы загружать дополнительные исторические данные при необходимости (например, для повторной загрузки плоских файлов из архива). Новые данные загружаются в другую целевую таблицу (второй спутник), и, следовательно, это модифицированная копия &#171;исторической&#187; ETL-рутины. Единственное, что требуется изменить, – это информационная витрина (и соответствующие процессы её загрузки).</p>
<h3><strong>Слой промежуточного хранения (Staging Area Layer)</strong></h3>
<p>Слой промежуточного хранения используется при пакетной загрузке данных в хранилище данных. Его основная цель – максимально быстро извлечь исходные данные из исходной системы, чтобы уменьшить нагрузку на операционные системы. Кроме того, staging-слой позволяет выполнять SQL-запросы к исходным данным, что может быть невозможно при прямом доступе к плоским файлам, таким как CSV или Excel.</p>
<p>Следует отметить, что в отличие от традиционных архитектур, описанных в предыдущей главе, staging-слой не содержит исторических данных. В нем хранятся только данные текущей загрузки в слой хранилища данных. Однако есть исключение: если требуется загрузить несколько пакетов данных (например, из-за ошибки на выходных, когда необходимо загрузить данные за последние несколько дней), в staging-области может находиться несколько пакетов.</p>
<p><strong>Основная причина отсутствия истории в staging-слое</strong> – необходимость избегать проблем, связанных с изменением структуры данных. Исходная таблица может меняться со временем. Если бы staging-слой хранил исторические данные, пришлось бы разрабатывать дополнительную логику загрузки данных в хранилище. Эта логика фактически представляла бы собой бизнес-правила, которые со временем становились бы все сложнее. Как описано в предыдущем разделе, цель архитектуры Data Vault 2.0 заключается в переносе сложных бизнес-правил ближе к конечному пользователю, чтобы обеспечить быструю адаптацию к изменениям.</p>
<p><strong>Промежуточный слой (staging area)</strong> состоит из таблиц, которые дублируют структуры исходной системы. Это включает в себя все таблицы и столбцы источника, включая первичные ключи. Однако индексы и внешние ключи, которые используются для обеспечения ссылочной целостности в исходной системе, не дублируются. Кроме того, все столбцы допускают значения NULL, поскольку мы хотим позволить хранилищу данных загружать необработанные данные из исходной системы, включая некорректные данные, которые могут присутствовать в источнике (особенно в плоских файлах). Единственные бизнес-правила, которые применяются к входящим данным, – так называемые жесткие бизнес-правила (hard business rules). Обычной практикой является сохранение оригинальных имен таблиц и столбцов из исходной системы, однако это не является обязательным.</p>
<p><strong>В дополнение к столбцам из исходной системы, каждая таблица в промежуточном слое включает:</strong></p>
<ul>
<li>Порядковый номер (sequence number)</li>
<li>Метку времени (timestamp)</li>
<li>Источник записи (record source)</li>
<li>Вычисления хеш-ключей для всех бизнес-ключей и их комбинаций</li>
</ul>
<p>Эти поля являются метаинформацией, необходимой для последующей загрузки данных в следующий слой – слой хранилища данных (Data Warehouse layer). Порядковый номер идентифицирует порядок данных в исходной системе. Его можно использовать, если порядок записей в источнике важен при загрузке в хранилище данных, например, в RSS-каналах новостей или транзакционных данных без временных меток.</p>
<ul>
<li><strong>Метка времени</strong> – это дата и время поступления записи в хранилище данных.</li>
<li><strong>Источник записи</strong> указывает, из какой системы поступила запись.</li>
<li><strong>Хеш-ключ</strong> используется в целях идентификации.</li>
</ul>
<p>Подробное описание этих столбцов представлено в главе 4.</p>
<h3><strong>Слой хранилища данных (Data Warehouse Layer)</strong></h3>
<p>Второй слой в архитектуре Data Vault 2.0 – это хранилище данных, основное назначение которого – хранение всей исторической, изменяющейся во времени информации. Хранилище данных содержит необработанные данные, не модифицированные никакими бизнес-правилами, кроме жестких бизнес-правил. Таким образом, данные хранятся в той детализации (гранулярности), в которой они предоставляются исходными системами. Данные являются неизменяемыми (nonvolatile), и каждое изменение в исходной системе отслеживается структурой Data Vault. Данные из нескольких исходных систем, а также внутри одной исходной системы, интегрируются с использованием бизнес-ключей, которые обсуждаются в главе 4. В отличие от информационной витрины (information mart), где информация организована по предметным областям, данные в Data Vault структурированы по функциональному принципу.</p>
<p>При пакетной загрузке данные поступают из промежуточного слоя, а при загрузке в реальном времени данные поступают напрямую из <strong>корпоративной сервисной шины (Enterprise Service Bus, ESB)</strong> в хранилище данных. Однако, как уже упоминалось ранее, хранилище данных в режиме реального времени выходит за рамки данной книги. Мы рассматриваем загрузку операционных данных в главе 12, где описаны аналогичные шаблоны загрузки непосредственно в хранилище данных.</p>
<p>Слой хранилища данных смоделирован с использованием методологии Data Vault 2.0, которая рассматривается в главах 4–6. Этот слой часто называют слоем необработанных данных (Raw Data Vault), поскольку он содержит необработанные данные, смоделированные по принципам Data Vault 2.0.</p>
<h3><strong>Слой информационной витрины (Information Mart Layer)</strong></h3>
<p>В отличие от традиционных хранилищ данных, слой хранилища данных в архитектуре Data Vault 2.0 не доступен напрямую для конечных пользователей. Обычно конечный пользователь обращается только к информационной витрине, которая предоставляет данные в удобном для него виде. Поскольку цель корпоративного хранилища данных – предоставление ценной информации конечным пользователям, для этого слоя используется термин &#171;информация&#187; вместо &#171;данные&#187;.</p>
<p>Информация в информационной витрине ориентирована на предметную область и может быть представлена в агрегированном виде, в плоской или широкой структуре, подготовлена для отчетности, иметь высокую индексацию, избыточность и быть очищенной по качеству. Она часто организована по схеме «звезда» (star schema) и служит основой как для реляционной отчетности, так и для многомерных OLAP-кубов. Поскольку конечный пользователь взаимодействует только с этим слоем хранилища данных, использование модели Data Vault в слое хранилища остается для него прозрачным. Если конечному пользователю требуется нормализованное хранилище данных в третьей нормальной форме, можно также предоставить информационную витрину, соответствующую этим требованиям.</p>
<p>Инструменты фронтального уровня также могут выполнять обратную запись информации в слой корпоративного хранилища данных.</p>
<p>Другими примерами информационных витрин являются <strong>Error Mart</strong> и <strong>Meta Mart</strong>. Они представляют собой центральные хранилища ошибок в хранилище данных и метаданных соответственно. Их отличие от стандартных информационных витрин заключается в том, что Error Mart и Meta Mart нельзя перестроить из <strong>Raw Data Vault</strong> или других источников данных. Однако они схожи с обычными витринами тем, что конечные пользователи, такие как администраторы, используют их для анализа ошибок в процессе загрузки данных, других проблем в хранилище данных или метаданных, которые хранятся для хранилища данных, его источников и преобразований, ведущих к информации, представленной в информационных витринах.</p>
<p>Глава 14, Загрузка размерной информационной витрины (Loading the Dimensional Information Mart), подробно рассматривает, как загружать информационные витрины для размерных OLAP-кубов из структур Data Vault 2.0 в хранилище данных.</p>
<h3><strong>Хранилище метрик (Metrics Vault)</strong></h3>
<p>Хотя три предыдущих слоя (промежуточный слой, слой хранилища данных и информационные витрины) являются обязательными в архитектуре Data Vault 2.0 (за исключением случаев реального времени, которые не рассматриваются в этой книге), <strong>Metrics Vault</strong> (описанный в этом разделе), <strong>Business Vault</strong> (раздел 2.2.7) и <strong>Operational Vault</strong> (раздел 2.2.8) являются дополнительными расширениями архитектуры Data Vault 2.0.</p>
<p>Metrics Vault используется для сбора и записи информации о времени выполнения, включая историю запусков, метрики процессов и технические метрики, такие как загрузка процессора (CPU load), использование оперативной памяти (RAM usage), метрики дискового ввода-вывода (disk I/O) и пропускная способность сети (network throughput).</p>
<p>Аналогично хранилищу данных, Metrics Vault моделируется по методологии Data Vault 2.0. Данные хранятся в необработанном формате, являются системно- или процесс-ориентированными и не подлежат аудиту. Хранилище может включать в себя технические метаданные и технические метрики ETL-джобов или окружения хранилища данных.</p>
<p>На основе Metrics Vault строится Metrics Mart, который предоставляет пользователям информацию о метриках производительности.</p>
<p>Глава 10, Управление метаданными (Metadata Management), содержит пример отслеживания аудиторской информации во время загрузки ETL и хранения этих данных в Metrics Vault.</p>
<h3><strong>Business Vault</strong></h3>
<p>Поскольку некоторые бизнес-правила, применяемые к структурам Data Vault 2.0, могут становиться сложными, предусмотрена возможность добавления структур Business Vault в слой хранилища данных. Business Vault — это частично моделируемое хранилище данных, основанное на принципах проектирования Data Vault, но содержащее данные, измененные в соответствии с бизнес-правилами. Другими словами, данные в Business Vault уже были изменены на основе бизнес-правил.</p>
<p>В большинстве случаев Business Vault служит промежуточным слоем между Raw Data Vault и информационными витринами, упрощая создание пользовательских структур.</p>
<p>На Рисунке 2.4 показано, что Business Vault располагается поверх корпоративного хранилища данных Data Vault. Это связано с тем, что Business Vault загружается перед загрузкой информационных витрин, облегчая этот процесс. Сложные бизнес-правила (мягкие правила, soft rules) получают данные как из Raw Data Vault, так и из сущностей Business Vault.</p>
<p><strong>Рис. 2.4: Business Vault расположен внутри корпоративного хранилища данных Data Vault</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/2_4_Business_Vault_is_located_within_the_Data_Vault.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1173 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/2_4_Business_Vault_is_located_within_the_Data_Vault.jpeg" alt="" width="1287" height="878" srcset="https://datatalks.ru/wp-content/uploads/2025/02/2_4_Business_Vault_is_located_within_the_Data_Vault.jpeg 1287w, https://datatalks.ru/wp-content/uploads/2025/02/2_4_Business_Vault_is_located_within_the_Data_Vault-300x205.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/2_4_Business_Vault_is_located_within_the_Data_Vault-1024x699.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/02/2_4_Business_Vault_is_located_within_the_Data_Vault-768x524.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/2_4_Business_Vault_is_located_within_the_Data_Vault-450x307.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/2_4_Business_Vault_is_located_within_the_Data_Vault-780x532.jpeg 780w" sizes="(max-width: 1287px) 100vw, 1287px" /></a></p>
<p>Хотя Business Vault моделируется по принципам Data Vault 2.0, к нему не предъявляются такие же строгие требования к аудируемости исходных данных. Вместо этого Business Vault может быть удален и воссоздан из Raw Data Vault в любой момент. Business Vault предоставляет разработчикам, создающим информационные витрины, консолидированное представление данных из Raw Data Vault.</p>
<p>Как и Metrics Vault, <strong>Business Vault не хранится в отдельном слое.</strong> Вместо этого он существует как расширение модели Data Vault внутри слоя хранилища данных. Глава 14, &#171;Загрузка размерной информационной витрины&#187; (Loading the Dimensional Information Mart), показывает, как использовать Business Vault для наполнения информационной витрины.</p>
<h3><strong>Operational Vault</strong></h3>
<p><strong>Operational Vault</strong> — это расширение Data Vault, к которому могут обращаться операционные системы напрямую (Рисунок 2.5). В некоторых случаях такие системы могут либо извлекать данные из корпоративного хранилища данных, либо записывать их обратно.</p>
<p>Примеры таких систем включают системы управления мастер-данными (MDM), такие как Microsoft Master Data Services (MDS), или системы управления метаданными. В обоих случаях прямая работа на уровне хранилища данных, а не через информационную витрину или промежуточный слой, дает преимущества.</p>
<p>Другие примеры включают приложения для интеллектуального анализа данных (data mining), которые проводят анализ необработанных данных непосредственно в слое хранилища данных. Во многих случаях, когда подключаемому приложению требуется поддержка работы в реальном времени (как при чтении, так и при записи), прямой доступ к Operational Vault является наилучшим решением.</p>
<p><strong>Рис. 2.5: Operational Data Vault</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/2_5_Operational_Data_Vault.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1174 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/2_5_Operational_Data_Vault.jpeg" alt="" width="1289" height="892" srcset="https://datatalks.ru/wp-content/uploads/2025/02/2_5_Operational_Data_Vault.jpeg 1289w, https://datatalks.ru/wp-content/uploads/2025/02/2_5_Operational_Data_Vault-300x208.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/2_5_Operational_Data_Vault-1024x709.jpeg 1024w, https://datatalks.ru/wp-content/uploads/2025/02/2_5_Operational_Data_Vault-768x531.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/2_5_Operational_Data_Vault-450x311.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/2_5_Operational_Data_Vault-780x540.jpeg 780w" sizes="(max-width: 1289px) 100vw, 1289px" /></a></p>
<p>По этой причине интеграция данных в реальном времени из <strong>сервис-ориентированной архитектуры (SOA)</strong> или <strong>корпоративной сервисной шины (ESB)</strong> выполняет запись данных непосредственно в Operational Vault. Хотя в начале этого раздела мы определили Operational Vault как расширение Data Vault, подключаемые приложения могут считывать данные напрямую из существующих структур Data Vault. Таким образом, структуры Data Vault в некоторой степени становятся структурами Operational Vault.</p>
<h3><strong>Управляемый самообслуживаемый BI (Managed Self-Service BI)</strong></h3>
<p>Обычный сценарий в проектах по построению хранилищ данных заключается в том, что после первоначального успеха инициативы по хранилищу данных бизнес начинает требовать все больше и больше функций. Однако из-за ограниченных ресурсов команды IT не все запросы бизнеса могут быть выполнены.</p>
<p>Во многих случаях запрашиваемая функциональность важна или применима только для ограниченного числа бизнес-пользователей или имеет низкое бизнес-воздействие. Тем не менее, она остается важной для тех, кто ее требует. Однако IT приходится расставлять приоритеты в обработке запросов, чтобы ответственно использовать собственные IT-ресурсы. В результате новые функции могут быть отложены или полностью отклонены. Такая низкая скорость реакции на запросы бизнеса приводит к растущему недовольству среди бизнес-пользователей.</p>
<p>Подход, называемый самообслуживаемый BI (self-service BI), позволяет конечным пользователям полностью обходить IT из-за его низкой отзывчивости. В этом подходе бизнес-пользователи самостоятельно выполняют весь процесс извлечения данных из операционных систем, интеграции и консолидации сырых данных. Однако у такого подхода, в котором IT не участвует, есть множество проблем:</p>
<p>Прямой доступ к исходным системам: конечные пользователи не должны напрямую получать доступ к данным из исходных систем. Это может привести к раскрытию сырых данных, которые потенциально являются конфиденциальными, а также обойти механизмы безопасности, реализованные через списки управления доступом (ACLs).</p>
<p>Неинтегрированные сырые данные: при получении данных из нескольких исходных систем бизнес-пользователи остаются один на один с задачей интеграции сырых данных. Если этот процесс выполняется вручную (например, в Microsoft Excel), он становится трудоемким и подверженным ошибкам.</p>
<p>Низкое качество данных: данные из исходных систем часто содержат проблемы, связанные с качеством данных. Перед их использованием в аналитике требуется очистка. Без соответствующих инструментов эта задача становится дополнительной нагрузкой для конечного пользователя. Или, что еще хуже, очистка данных вообще не выполняется.</p>
<p>Неконсолидированные сырые данные: для анализа данных из нескольких источников зачастую требуется консолидация. Без нее результаты бизнес-анализа могут быть бессмысленными.</p>
<p>Нестандартизированные бизнес-правила: поскольку в self-service BI конечные пользователи работают только с сырыми данными, им приходится самостоятельно реализовывать все бизнес-правила, преобразующие данные в осмысленную информацию. Но кто проверит, соответствует ли эта реализация стандартам организации?</p>
<p>Во многих случаях конечные пользователи, даже если они являются power users и владеют SQL, MDX и другими технологиями, не имеют в распоряжении подходящих инструментов для выполнения этих задач. Вместо этого значительная часть работы выполняется вручную, что делает процесс подверженным ошибкам.</p>
<p>Однако, исходя из нашего опыта, полностью предотвратить работу power users с исходными данными, их подготовку и последующую передачу в отчетность для руководства невозможно. Организациям необходим компромисс между гибкостью IT и управлением данными, который позволит power users получать нужные им данные быстро и в приемлемом качестве.</p>
<p>Чтобы преодолеть эти проблемы, стандарт Data Vault 2.0 позволяет опытным или продвинутым бизнес-пользователям самостоятельно выполнять задачи анализа данных на основе сырых данных из хранилища данных. Фактически, IT, использующее Data Vault 2.0, приветствует инициативу бизнес-пользователей по использованию данных, доступных в корпоративном хранилище данных (будь то Raw Data Vault или Business Vault) и применению собственных инструментов для преобразования данных в осмысленную информацию. Это связано с тем, что IT не может своевременно обеспечить требуемую функциональность. Вместо этого IT извлекает сырые данные из операционных систем или других источников и интегрирует их с использованием бизнес-ключа в Raw Data Vault. Кроме того, IT может создавать структуры Business Vault, чтобы предоставить консолидированное представление отдельных частей модели или предварительно вычислить ключевые показатели эффективности (KPI) для обеспечения их согласованности.</p>
<p>Бизнес-пользователь затем использует<strong> сырые данные (из Raw Data Vault)</strong> и <strong>бизнес-данные (из Business Vault)</strong> для создания локальных информационных витрин с помощью специализированных инструментов. Эти инструменты получают данные из корпоративного хранилища данных, применяют набор пользовательских бизнес-правил и представляют конечному пользователю обработанный результат.</p>
<p>Этот подход называется управляемым самообслуживанием BI (managed self-service BI) и является частью стандарта Data Vault 2.0. В рамках этого подхода IT трансформируется в сервисную организацию, которая предоставляет power users доступ к нужным данным в требуемые сроки. Интеграция данных осуществляется по бизнес-ключу, а при необходимости пользователя данные могут быть консолидированы и проверены на качество. Процессы консолидации и проверки качества выполняются при загрузке данных в Business Vault, как будет показано далее в этой книге.</p>
<p>Кроме того, Business Vault реализует некоторые из важнейших бизнес-правил. Power users имеют прямой доступ как к Raw Data Vault, так и к Business Vault, и в зависимости от конкретной задачи могут выбирать либо сырые данные, либо консолидированные и очищенные данные. Более того, оба типа данных уже интегрированы, поэтому бизнес-пользователь может также объединять консолидированные данные с сырыми данными из конкретных исходных систем.</p>
<p>Эта книга продемонстрирует, что загрузка сырых данных в Raw Data Vault является очень простой задачей, включая интеграцию с использованием бизнес-ключей. Фактически, это можно выполнить в коротких итерациях спринтов, как будет объяснено в Главе 3, Методология Data Vault 2.0. Когда пользователи запрашивают дополнительные данные, которые отсутствуют в хранилище данных, возможно извлечь и интегрировать эти данные в Raw Data Vault, чтобы предоставить их power user для выполнения задачи в рамках управляемого самообслуживания BI (managed self-service BI).</p>
<h3><strong>Другие фичи (Other Features)</strong></h3>
<p><strong>Архитектура Data Vault 2.0</strong> предлагает дополнительные возможности для поддержки <strong>реального времени (RT)</strong> и <strong>околореального времени (NRT)</strong>, неструктурированных данных и сред NoSQL. Однако описание этих возможностей выходит за рамки данной книги.</p>
<p>В этой главе была представлена архитектура Data Vault 2.0, являющаяся фундаментальным элементом стандарта Data Vault 2.0. Следующие две главы сосредоточатся на методологии проекта и моделировании Data Vault, которые также являются двумя основными столпами стандарта Data Vault 2.0.</p>


<p class="wp-block-paragraph"></p>
<p>Сообщение <a href="https://datatalks.ru/data-vault-2-0-chapter-2-scalable-data-warehouse-architecture/">Перевод 2 Главы &#8212; Масштабируемая архитектура хранилища данных</a> появились сначала на <a href="https://datatalks.ru">DataTalks.RU. Data Engineering / DWH / Data Pipeline</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datatalks.ru/data-vault-2-0-chapter-2-scalable-data-warehouse-architecture/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Перевод 1 Главы &#8212; Введение в хранилища данных</title>
		<link>https://datatalks.ru/data-vault-2-0-chapter-1-introduction-to-data-warehousing/</link>
					<comments>https://datatalks.ru/data-vault-2-0-chapter-1-introduction-to-data-warehousing/#respond</comments>
		
		<dc:creator><![CDATA[Data Engineer (Admin)]]></dc:creator>
		<pubDate>Sun, 16 Feb 2025 20:27:13 +0000</pubDate>
				<category><![CDATA[Data Vault 2.0]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[Data Vault 2.0 Architecture]]></category>
		<category><![CDATA[Data Vault 2.0 Methodology]]></category>
		<category><![CDATA[Data Vault 2.0 Modeling]]></category>
		<category><![CDATA[Enterprise Data Warehouse]]></category>
		<category><![CDATA[Raw Data Vault]]></category>
		<category><![CDATA[Variety]]></category>
		<category><![CDATA[Velocity]]></category>
		<category><![CDATA[Volume]]></category>
		<guid isPermaLink="false">https://datatalks.ru/?p=1101</guid>

					<description><![CDATA[<p>Перевод книги &#171;Building a Scalable Data Warehouse with Data Vault 2.0&#187; подготовлен автором сайта Глава 1 &#171;Введение в хранилища данных&#187; Аннотация В этой главе вводится базовая терминология хранилищ данных, их применения и бизнес-контекст. Дается краткое описание их истории и направления развития. Представлены основные архитектуры хранилищ данных, принятые в индустрии. Описаны проблемы, с которыми сталкиваются специалисты [&#8230;]</p>
<p>Сообщение <a href="https://datatalks.ru/data-vault-2-0-chapter-1-introduction-to-data-warehousing/">Перевод 1 Главы &#8212; Введение в хранилища данных</a> появились сначала на <a href="https://datatalks.ru">DataTalks.RU. Data Engineering / DWH / Data Pipeline</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><em>Перевод книги &#171;Building a Scalable Data Warehouse with Data Vault 2.0&#187; подготовлен автором сайта</em></p>
<h1>Глава 1 &#171;Введение в хранилища данных&#187;</h1>
<h2>Аннотация</h2>
<p>В этой главе вводится базовая терминология хранилищ данных, их применения и бизнес-контекст. Дается краткое описание их истории и направления развития. Представлены основные архитектуры хранилищ данных, принятые в индустрии. Описаны проблемы, с которыми сталкиваются специалисты по хранилищам данных, включая такие темы, как большие данные, изменяющиеся бизнес-требования, проблемы производительности, сложность, аудитируемость, контрольные точки перезапуска и колебания в составе команды.</p>
<p><strong>Ключевые слова</strong></p>
<ul>
<li>данные</li>
<li>хранилище данных</li>
<li>большие данные</li>
<li>системы поддержки принятия решений</li>
<li>масштабируемость</li>
<li>бизнес-аналитика</li>
</ul>
<p>Информация стала важнейшим активом любой организации. Корпоративные пользователи на всех уровнях, включая оперативное управление, средний и высший менеджмент, запрашивают информацию, чтобы принимать обоснованные решения и приносить пользу бизнесу. Каждый уровень имеет свои требования к запрашиваемой информации, но среди общих характеристик можно выделить точность, полноту и согласованность, если назвать лишь некоторые.</p>
<p>Рациональный менеджер использует доступную и проверенную информацию как основу для взвешенных решений, которые потенциально могут повлиять на конечный результат бизнеса.</p>
<p>Когда мы используем термины «данные» или «информация», мы часто применяем их взаимозаменяемо. Однако оба этих термина, а также термины «знание» и «мудрость» имеют значимые и четкие различия. В то же время они взаимосвязаны в иерархии информации.</p>
<p><strong>РИСУНОК 1.1 Иерархия информации</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/1_1_the_information_hierarchy.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1135 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/1_1_the_information_hierarchy.jpeg" alt="" width="899" height="630" srcset="https://datatalks.ru/wp-content/uploads/2025/02/1_1_the_information_hierarchy.jpeg 899w, https://datatalks.ru/wp-content/uploads/2025/02/1_1_the_information_hierarchy-300x210.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/1_1_the_information_hierarchy-768x538.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/1_1_the_information_hierarchy-450x315.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/1_1_the_information_hierarchy-780x547.jpeg 780w" sizes="(max-width: 899px) 100vw, 899px" /></a></p>
<p><strong>Данные, находящиеся внизу иерархии,</strong> представляют собой конкретные, объективные факты или наблюдения.</p>
<p>Примеры могут выражаться в виде утверждений, таких как «Рейс DL404 прибывает в 08:30 утра» или «LAX находится в Калифорнии, США». Такие факты сами по себе не несут внутреннего смысла, но могут быть легко зафиксированы, переданы и сохранены в электронном виде.</p>
<p><strong>Информация представляет собой конденсированную форму исходных данных.</strong> Бизнес-пользователи превращают данные в информацию, организуя их в единицы анализа (например, клиенты, продукты, даты) и наделяя их значимостью и целью. Важно, чтобы эта значимость и цель учитывались в контексте, в котором информация получена и используется. Менеджеры одного функционального подразделения имеют другие информационные потребности, чем менеджеры из других подразделений, и рассматривают информацию со своей точки зрения. Аналогично, эти информационные потребности различаются на разных уровнях организационной иерархии. Как правило, чем выше пользователь информации находится в организационной иерархии, тем более обобщенная (или конденсированная) информация ему требуется.</p>
<p><strong>Знание, находящееся ближе к вершине иерархии информации,</strong> представляет собой информацию, которая была синтезирована и помещена в контекст, чтобы принести ценность. Менеджеры используют информацию и добавляют к ней собственный опыт, суждения и мудрость, создавая знание, которое является более богатым и глубоким, чем информация, и, следовательно, более ценным. Это сочетание исходной информации с ценностями, правилами и дополнительными сведениями из других контекстов.</p>
<p><strong>Верхний уровень пирамиды представлен мудростью,</strong> которая помещает знание из нижележащего слоя в структуру, позволяющую применять его к неизвестным и не обязательно интуитивным ситуациям. Поскольку знание и мудрость трудно структурировать и они часто являются неявными, их сложно зафиксировать в машинных системах и передать. Именно поэтому целью хранилищ данных не является создание знания или мудрости. Вместо этого хранилища данных (или бизнес-аналитика) сосредоточены на агрегировании, консолидации и обобщении данных в информацию путем помещения данных в правильный контекст.</p>
<p>Из-за ценности, которую информация предоставляет пользователям в организации, информационные активы должны быть легко доступны по запросу пользователя и соответствовать ожидаемому качеству. В прошлом этот анализ проводился непосредственно на операционных системах, таких как интернет-магазин или система управления взаимоотношениями с клиентами (CRM). Однако из-за огромных объемов данных в современных организациях извлечение полезной и значимой информации из таких необработанных данных становится проблемой для аналитических бизнес-пользователей.</p>
<p>Еще одной проблемой является наличие в типичной организации изолированных баз данных, называемых «островками данных». Единственными связями между этими островками данных и другими источниками данных являются бизнес-ключи, используемые для идентификации бизнес-объектов в обеих системах. Поэтому интеграция разрозненных источников данных должна осуществляться на основе этих бизнес-ключей, но часто выходит за рамки возможностей обычного бизнес-аналитика.</p>
<p>Операционные пользователи часто выполняют запросы или обновляют данные конкретного бизнес-объекта в своей повседневной работе. Эти операции выполняются с помощью транзакционных запросов. Примеры включают создание заявки в службу поддержки, бронирование авиабилета или отправку электронного письма. В этих случаях операционный пользователь работает с бизнес-объектами, которые являются частью его бизнес-процессов.</p>
<p>Пользователи среднего или высшего менеджмента часто выполняют другие задачи. Им требуется информация о бизнесе или бизнес-подразделении, за которое они несут ответственность. Они используют эту информацию для принятия управленческих решений. Для этого они часто выполняют аналитические запросы к базе данных, чтобы обобщить данные за определенный период. Таким образом, они преобразуют необработанные данные, например транзакции по продажам, в более полезную информацию, например отчет о продажах по месяцам и клиентам.</p>
<p>Такие аналитические запросы отличаются от транзакционных, так как они часто агрегируют или суммируют большой объем исходных данных. Если бизнес-пользователь выполняет аналитический запрос к операционной базе данных, система управления реляционной базой данных (RDBMS) должна извлечь все связанные записи с дискового хранилища для выполнения агрегации.</p>
<h2>История хранилищ данных</h2>
<p>До появления хранилищ данных пользователи должны были запрашивать необходимую информацию непосредственно из необработанных данных, хранящихся в операционных системах, как описано во введении к этой главе. Эти необработанные данные часто хранятся в реляционных базах данных, обслуживающих пользовательские приложения.</p>
<p>Хотя выполнение запросов к операционной базе данных позволяет бизнес-пользователям получать информацию в реальном времени, использование аналитических запросов для преобразования исходных данных в полезную информацию замедляет работу операционной базы данных. Это связано с необходимостью агрегирования, требующего чтения большого количества записей в реальном времени для получения сводной информации (например, объем продаж за месяц, доход за год и т. д.).</p>
<p>Использование одной и той же базы данных как для операционных, так и для аналитических пользователей часто перегружает базу данных и снижает удобство работы с данными для обеих групп пользователей.</p>
<h3><strong>Системы поддержки принятия решений</strong></h3>
<p>Для обеспечения быстрого доступа к информации, необходимой для процессов принятия решений, предприятия внедрили системы поддержки принятия решений (Decision Support Systems, DSS). Такие системы объединяют различные расширяемые и интерактивные ИТ-технологии и инструменты, которые помогают менеджерам в принятии решений путем обработки и анализа данных.</p>
<p>Для достижения своих целей DSS включает базу данных аналитических моделей, которая наполняется выбранными данными, извлекаемыми из исходных систем. Исходные системы — это операционные системы, доступные в организации, но они также могут включать любые другие источники корпоративных данных. Примеры таких данных могут включать обменные курсы, информацию о погоде или любые другие сведения, необходимые менеджерам для обоснованного принятия решений. Необработанные данные агрегируются внутри базы данных аналитических моделей или на этапе загрузки в систему.</p>
<p>Для загрузки данных используются инструменты ETL (extract, transform, load — извлечение, преобразование, загрузка), предназначенные для извлечения, преобразования и загрузки данных из источников в целевые хранилища:</p>
<p>База данных аналитических моделей на Рисунке 1.2 наполняется процессом ETL данными из пяти источников. Затем данные агрегируются либо в процессе ETL (на этапе подготовки данных), либо при выполнении бизнес-пользователем запроса к базе данных. Бизнес-пользователи могут выполнять ad-hoc запросы и другие сложные аналитические запросы к базе данных аналитических моделей. В большинстве случаев данные уже подготовлены для их целей и содержат только релевантную информацию.</p>
<p>Поскольку система поддержки принятия решений отделена от исходных систем, взаимодействие с DSS не замедляет работу операционных систем.</p>
<p><strong>РИСУНОК 1.2 Система поддержки принятия решений</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/1_2_Decision_support_system.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1136 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/1_2_Decision_support_system.jpeg" alt="" width="918" height="472" srcset="https://datatalks.ru/wp-content/uploads/2025/02/1_2_Decision_support_system.jpeg 918w, https://datatalks.ru/wp-content/uploads/2025/02/1_2_Decision_support_system-300x154.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/1_2_Decision_support_system-768x395.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/1_2_Decision_support_system-450x231.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/1_2_Decision_support_system-780x401.jpeg 780w" sizes="(max-width: 918px) 100vw, 918px" /></a></p>
<p>В следующем разделе рассматриваются системы хранилищ данных, которым посвящена эта книга. Эти системы были внедрены в 1990-х годах и с тех пор обеспечивают работу backend-части систем поддержки принятия решений.</p>
<h3><strong>Системы хранилищ данных</strong></h3>
<p><strong>Система хранилища данных (Data Warehouse, DWH)</strong> — это система поддержки принятия решений, основанная на данных. Она поддерживает процесс принятия решений на стратегическом уровне, а также операционные решения, например, аналитику в реальном времени для выявления мошенничества с кредитными картами или динамические рекомендации товаров и услуг.</p>
<p>Хранилище данных предоставляет бизнес-пользователям на всех целевых уровнях неизменяемые, тематически ориентированные данные, которые интегрированы и согласованы. Тематическая ориентация отличается от функциональной ориентации ERP или операционной системы тем, что фокусируется на конкретных предметных областях для анализа. Примерами предметных областей в страховой компании могут быть клиент, страховой полис, страховая премия и страховой случай. В производственной компании предметные области могут включать продукт, заказ, поставщика, спецификацию материалов и сырье. Такой подход позволяет интегрированный анализ всех данных, связанных с одним и тем же реальным событием или объектом.</p>
<p>Прежде чем бизнес-пользователи смогут использовать информацию, предоставляемую хранилищем данных, данные загружаются из исходных систем в хранилище данных. Как было описано во введении к этой главе, интеграция различных источников данных внутри организации или за ее пределами часто осуществляется на основе бизнес-ключей. Это становится проблемой, если бизнес-объект, например клиент, имеет разные бизнес-ключи в каждой системе. Такая ситуация может возникнуть, если в одной системе номер клиента является алфавитно-цифровым, а другая операционная система позволяет использовать только числовые идентификаторы.</p>
<p>Другие проблемы возникают, когда база данных операционной системы содержит &#171;грязные&#187; данные, что часто случается при отсутствии бизнес-правил или при наличии устаревшей или некорректной информации. Примеры &#171;грязных&#187; данных включают опечатки, ошибки передачи данных или нечитабельный текст, обработанный системой оптического распознавания символов (OCR). Прежде чем такие данные могут быть представлены бизнес-пользователям в традиционном хранилище данных, они должны пройти очистку, что является частью процесса загрузки данных в витрину данных. Другие проблемы включают несовместимые типы данных или разные кодировки символов в различных исходных системах. Однако существуют исключения из процедуры очистки данных, например, если необходимо отразить качество данных для бизнес-пользователей.</p>
<p>Еще одной задачей, часто выполняемой при загрузке данных в хранилище, является агрегирование исходных данных до требуемого уровня детализации. Гранулярность данных — это единица данных, которую поддерживает хранилище. Примером различной гранулярности данных является разница между данными по конкретному продавцу и данными по региону продаж. В некоторых случаях бизнес-пользователи хотят анализировать только продажи в регионе и не интересуются продажами отдельного продавца. В других случаях бизнес-аналитики, напротив, хотят изучить продажи конкретного продавца, например, при расчете комиссионных.</p>
<p>В большинстве случаев инженеры хранилищ данных стремятся загружать данные с максимально возможной детализацией, чтобы обеспечить возможность многослойного анализа. Однако в некоторых случаях операционные системы предоставляют только исходные данные с высокой степенью агрегирования.</p>
<p>Важной характеристикой многих хранилищ данных является сохранение исторических данных. Все данные, загруженные в хранилище, сохраняются и доступны для временного анализа. Это позволяет отслеживать изменения данных с течением времени и часто является требованием бизнес-пользователей, например, для анализа динамики продаж в определенном регионе за последние кварталы. Поскольку данные в хранилище являются историческими и в большинстве случаев больше не доступны в исходных системах, они считаются неизменяемыми. Это также является важным требованием для аудируемости информационной системы.</p>
<p>Следующий раздел представляет корпоративные хранилища данных, которые являются дальнейшим развитием хранилищ данных и предоставляют централизованный обзор всей организации.</p>
<h2>Среда корпоративного хранилища данных</h2>
<p><strong>Корпоративные хранилища данных (Enterprise Data Warehouse, EDW)</strong> возникли из обычных хранилищ данных, описанных в предыдущем разделе. Вместо того чтобы сосредотачиваться на одной предметной области для анализа, корпоративное хранилище данных стремится представить все бизнес-данные организации и ее бизнес-правила. Данные в хранилище затем представляются таким образом, чтобы все необходимые предметные области были доступны для бизнес-пользователей.</p>
<p>Следующие разделы представляют основные бизнес-требования к корпоративным хранилищам данных.</p>
<h3><strong>Доступ</strong></h3>
<p>Доступ к EDW требует, чтобы конечные пользователи могли подключаться к хранилищу данных с предложенных клиентских рабочих станций. Подключение должно быть немедленным, по запросу и с высокой производительностью. Однако для пользователей, особенно бизнес-пользователей, доступ означает гораздо больше, чем просто доступность: им должно быть легко понимать значение информации, представленной системой. Это включает в себя правильное обозначение содержимого хранилища данных, а также наличие соответствующих приложений для анализа, представления и использования информации, предоставляемой хранилищем данных.</p>
<h3><strong>Несколько предметных областей</strong></h3>
<p>Поскольку каждая функция или подразделение предприятия имеет разные требования к анализируемым данным, корпоративное хранилище данных должно предоставлять несколько предметных областей, чтобы удовлетворить потребности отдельных пользователей. Каждая предметная область содержит данные, которые являются релевантными для пользователя. Пользователь запрашивает данные, и хранилище данных предоставляет ожидаемую версию истины, что означает соответствие требуемому определению информации.</p>
<p>Для достижения этой цели все исходные данные, необходимые для предметных областей, интегрируются, очищаются и загружаются в корпоративное хранилище данных. Затем они используются для построения витрин данных, разработанных для конкретной предметной области. Такие витрины данных также называются зависимыми витринами данных, поскольку они зависят от хранилища данных как источника данных. В отличие от них, независимые витрины данных получают данные непосредственно из операционных систем. Поскольку такой подход требует тех же усилий по очистке и интеграции данных, что и построение хранилища данных, часто оказывается проще загружать данные из центрального хранилища данных.</p>
<h3><strong>Единая версия истины</strong></h3>
<p>Интеграция всех доступных в организации бизнес-данных направлена на достижение единой версии истины в данных. В типичной организации существует множество операционных систем или даже обычных хранилищ данных. Хотя некоторые из этих систем интегрированы, часто наблюдается несоответствие данных, хранящихся в операционных базах данных. Это может быть связано с задержками или ошибками синхронизации, ручным вводом данных или использованием различных исходных источников данных для операционной информации. В результате в организации могут существовать разные версии истины, например, относительно адреса доставки клиента.</p>
<p>Бизнес должен самостоятельно решать, как очищать данные при их загрузке в корпоративное хранилище данных, что часто требует выбора ведущих систем или определения приоритетов источников данных. В некоторых случаях автоматический выбор и проверка на основе бизнес-правил оказывается достаточным, а в других требуется ручной выбор для получения проверенной, единой версии истины.</p>
<p>Последовательная, единая версия истины корпоративного хранилища данных является важной целью для его пользователей. Однако разные отделы часто требуют уникальную версию истины, поскольку у них может быть разное определение того, «что является истиной». Именно поэтому корпоративное хранилище данных предоставляет несколько предметных областей, как описано в предыдущем разделе. Каждая предметная область предоставляет необходимую информацию своим пользователям в нужном контексте.</p>
<h3><strong>Единая версия фактов</strong></h3>
<p>В то время как цель «единой версии истины» заключается в предоставлении интегрированной, очищенной версии организационной информации, то есть агрегированных и консолидированных данных в определенном контексте, цель «единой версии фактов» — это предоставление всех данных, в любое время. В этом случае корпоративное хранилище данных (EDW) должно хранить и потенциально предоставлять все исходные данные, которые критичны для деятельности организации (см. следующий раздел).</p>
<p>Ведущий автор этой книги был одним из первых специалистов в индустрии хранилищ данных, кто продвигал эту идею, особенно из-за требований к соответствию нормативным требованиям. В конечном итоге это привело к созданию концепции Data Vault, которая стала ключевым принципом в модели Data Vault 2.0 и реализуется в Raw Data Vault.</p>
<p>Единая версия фактов также важна с точки зрения аудита и соответствия нормативным требованиям, что будет рассмотрено в разделе 1.2.10. Позже в этой книге мы узнаем, что EDW, основанные на Data Vault, предоставляют обе версии: и единую версию истины, и единую версию фактов.</p>
<h3><strong>Критическая важность для бизнеса</strong></h3>
<p>Из-за значимости хранилища данных как основы для стратегических бизнес-решений центральное хранилище данных становится критически важным корпоративным активом. Более того, хранилища данных не только предоставляют агрегированные данные для принятия бизнес-решений, но также передают обогащенную информацию обратно в операционные системы для поддержки обработки транзакций, создания персонализированных предложений и демонстрации промо-акций по дополнительным продажам.</p>
<p>Критическая важность также требует определенного уровня качества данных в хранилище данных. Если исходные системы не предоставляют данные в требуемом качестве, задача хранилища данных — исправить любые проблемы с качеством данных и улучшить их с помощью очистки данных, интеграции данных или других подходящих методов.</p>
<h3><strong>Масштабируемость</strong></h3>
<p><strong>Масштабируемость</strong> — это способность архитектуры хранилища данных адаптироваться к увеличению объемов данных и росту количества пользовательских запросов, которые необходимо обрабатывать. Архитектура должна быть построена таким образом, чтобы поддерживать добавление новых данных — не только увеличивающихся объемов, но и более сложных данных. Если объем данных превышает возможности оборудования, должна быть возможность распределять хранилище данных между несколькими машинами и полностью использовать возможности добавленного оборудования. Этот концепт называется массово-параллельной обработкой (MPP, Massively Parallel Processing). Если архитектура не является масштабируемой, добавление нового оборудования либо не оказывает никакого эффекта, либо дает лишь минимальное улучшение после достижения определенного уровня расширения.</p>
<p>Еще одна проблема в области хранилищ данных заключается в том, что внесение изменений в хранилище часто оказывается сложным из-за существующих зависимостей. Если построение первой версии хранилища данных было относительно простым, то создание второй версии занимает гораздо больше времени. Это связано с тем, что архитектура хранилища данных изначально не была спроектирована с учетом возможных изменений.</p>
<p>В разделе 1.4 рассматриваются различные архитектуры хранилищ данных. В Главе 2 будет предложена альтернативная архитектура масштабируемого хранилища данных. Ее преимущество заключается, в том числе, в высокой масштабируемости при внесении изменений в модель данных.</p>
<h3><strong>Большие данные (Big Data)</strong></h3>
<p><strong>Big Data</strong> — это не просто «много данных» или «больше данных, чем я могу обработать». Мы определяем Big Data по трем характеристикам:</p>
<ul>
<li>Объем (<strong>Volume</strong>)</li>
<li>Скорость (<strong>Velocity</strong>)</li>
<li>Разнообразие (<strong>Variety</strong>)</li>
</ul>
<p><strong>Первая характеристика — это объем данных Volume.</strong> Часто под Big Data подразумевают значительно больший объем данных, чем тот, с которым пользователь привык работать. Однако это понятие субъективно: Big Data для одного человека или компании может означать 1 ГБ сырых данных, но это будет считаться малым объемом для того, кто загружает терабайты или даже петабайты данных.</p>
<p>Загрузка данных в режиме реального времени предъявляет особые требования, и, соответственно, определение Big Data в этом случае отличается от определения при загрузке данных ночными пакетами или в режиме, близком к реальному времени (near real-time, когда данные из операционных систем доступны в хранилище данных в течение, как правило, 15 минут).</p>
<p>Определение Big Data также зависит от доступного оборудования хранилища данных.</p>
<p><strong>Вторая характеристика — скорость Velocity.</strong> В источниках данных содержится не просто огромный объем статической информации — процесс загрузки этих данных сам по себе может быть сложной задачей. Однако данные в операционных системах часто постоянно изменяются. Чем больше данных содержится в системе-источнике, тем больше изменений в ней происходит.</p>
<p>Таким образом, типичный Big Data-проект должен работать с большим количеством обновлений, изменяющихся данных и новых данных, которые добавляются в систему-источник.</p>
<p><strong>Третья характеристика — разнообразие Variety.</strong> Big Data часто не имеют единой структуры. Структура данных может изменяться со временем или вообще отсутствовать, как в случае неструктурированных данных (например, текстов, мультимедиа).</p>
<p>Вместо использования колонок и строк реляционных таблиц неструктурированные наборы данных используют другие типы структур, например, лингвистические структуры. С точки зрения вычислений такие данные считаются неструктурированными, поскольку их структура не так очевидна, как в реляционных таблицах.</p>
<p>В других случаях Big Data представляют собой совокупность данных из множества небольших источников, но в таком количестве, что их суммарный объем становится значительным, а структура данных — очень разнообразной.</p>
<p>Поскольку объем доступных данных постоянно растет, архитектура хранилища данных должна не только масштабироваться (volume), но и эффективно обрабатывать скорость поступления данных (velocity) и их разнообразие (variety).</p>
<p>В некоторых случаях данные постоянно находятся в движении: это означает, что они обрабатываются или передаются частями, которые меньше исходного набора данных. Например, передача данных по сети TCP/IP: передаваемые данные разбиваются на IP-пакеты, которые затем передаются через сеть.</p>
<p>Это создает дополнительные проблемы для Big Data, поскольку данные постоянно поступают в сеть и выходят из нее. Чтобы их проанализировать, их необходимо собирать, объединять и агрегировать — в некоторых случаях в реальном времени.</p>
<p>Это повышает требования к архитектуре и планированию Big Data и подводит нас к вопросам производительности, которые рассматриваются в следующем разделе.</p>
<h3><strong>Проблемы производительности</strong></h3>
<p>Еще одной проблемой в хранилищах данных является производительность системы. Производительность играет важную роль при загрузке новых порций данных из источников в хранилище данных, поскольку процесс загрузки включает очистку и интеграцию данных в рамках доступного временного окна. Часто это окно ограничивается временем, когда пользователи не работают с системой, обычно в ночное время.</p>
<p>Другой причиной важности производительности является удобство использования хранилища данных, которое зависит от времени отклика системы на аналитические запросы пользователей.</p>
<p>Производительность систем хранилищ данных зависит от того, как система управления базами данных (СУБД) хранит данные на диске. Данные сохраняются в страницах фиксированного размера. Например, Microsoft SQL Server выделяет 8 КБ дискового пространства на каждую страницу. Каждая страница содержит несколько записей определенной таблицы. Чем шире таблица (чем больше у нее колонок), тем меньше строк может поместиться на одной странице.</p>
<p>Чтобы получить содержимое определенного столбца в определенной строке, необходимо считать всю страницу, на которой находятся эти данные. Поскольку аналитические запросы, часто используемые в хранилищах данных, выполняют агрегацию информации, приходится считывать много страниц для извлечения всего лишь одной строки.</p>
<p>Пример типичной агрегации — подсчет общей суммы продаж в заданном регионе. Это может быть суммирование значений в столбце invoice_total. Если в таблице много столбцов, система вынуждена загружать избыточные данные, которые не нужны для выполнения агрегации.</p>
<p>Поэтому одна из целей хранилищ данных — уменьшение ширины столбцов, что помогает улучшить производительность. Подобные принципы применяются и при загрузке новых данных в хранилище.</p>
<p>Другие способы улучшения производительности систем хранилищ данных включают:</p>
<ul>
<li><strong>Параллелизацию загрузочных шаблонов</strong> – вместо последовательной загрузки таблиц по одной, загружается несколько таблиц одновременно.</li>
<li><strong>Распределение данных между несколькими узлами</strong> – используется в MPP-системах (массово-параллельная обработка), таких как NoSQL-базы данных.</li>
</ul>
<p>Оба этих метода критически важны для Data Vault 2.0 и повлияли на изменения в моделировании Data Vault по сравнению с первой версией (Data Vault 1.0).</p>
<h3><strong>Сложность</strong></h3>
<p>Системы хранилищ данных часто сталкиваются с проблемами сложности из-за множества бизнес-требований. Технические сложности возникают в трех областях:</p>
<ul>
<li>Проблемы источников данных (<strong>sourcing issues</strong>).</li>
<li>Проблемы трансформации данных (<strong>transformation issues</strong>).</li>
<li>Проблемы загрузки в целевые системы (<strong>target issues</strong>).</li>
</ul>
<h4><strong>Проблемы источников данных</strong></h4>
<p>Эти проблемы связаны с системами, из которых извлекаются данные. К типичным проблемам относятся:</p>
<ul>
<li>Ограниченная доступность систем-источников.</li>
<li>Использование межсистемных объединений (joins), фильтрации или агрегации.</li>
<li>Проблемы с индексами в исходных данных.</li>
<li>Отсутствие ключей источника или даже полных наборов данных.</li>
<li>Некачественные или вышедшие за допустимые пределы данные.</li>
<li>Сложность структуры данных в системе-источнике.</li>
<li>Нагрузка на CPU, RAM и диск в системе-источнике.</li>
<li>Блокировки транзакционных записей.</li>
</ul>
<h4><strong>Проблемы трансформации данных</strong></h4>
<p>Эти проблемы возникают при преобразовании данных, чтобы они соответствовали ожиданиям целевой системы. Часто при трансформации выполняются следующие операции:</p>
<ul>
<li>Очистка данных.</li>
<li>Управление качеством данных и их согласование.</li>
<li>Объединение (joins), консолидация, агрегация и фильтрация.</li>
<li>Присвоение последовательностей, что часто препятствует параллельной обработке.</li>
<li>Коррекция типов данных и обработка ошибок.</li>
<li>Проблемы с сортировкой данных, такие как необходимость в больших кешах, частые переполнения диска и работа с большими ключами.</li>
<li>Применение бизнес-правил непосредственно при трансформации данных.</li>
<li>Множественные источники и целевые системы в одном потоке данных.</li>
<li>Узкие места в трансформации (transformation bottlenecks).</li>
</ul>
<h4><strong>Проблемы загрузки в целевые системы</strong></h4>
<p>Эти проблемы возникают при загрузке данных в хранилище и включают:</p>
<ul>
<li>Отсутствие оптимизации базы данных.</li>
<li>Обновление индексов, что может приводить к взаимоблокировкам (deadlocks).</li>
<li>Одновременное выполнение INSERT, UPDATE и DELETE в одном потоке данных, что замедляет обработку из-за необходимости соблюдать определенный порядок выполнения.</li>
<li>Загрузка нескольких целевых систем одновременно.</li>
<li>Широкие таблицы, как обсуждалось в разделе 1.2.8.</li>
<li>Отсутствие контроля над разбиением данных (partitioning) в целевой системе.</li>
</ul>
<h4><strong>Основная причина проблем</strong></h4>
<p>Часто системы хранилищ данных пытаются выполнить слишком много операций в одном цикле загрузки, вместо того чтобы разделить процесс на более простые этапы. В результате процессы загрузки становятся чрезмерно сложными, что снижает производительность и увеличивает затраты на сопровождение.</p>
<p>В конечном итоге это негативно сказывается на гибкости и эффективности всей команды, так как она вынуждена исправлять проблемы, а не разрабатывать новые функции.</p>
<h3><strong>Аудит и соответствие требованиям</strong></h3>
<p>Обычное требование к хранилищу данных — возможность предоставлять информацию об источнике и времени извлечения данных, хранящихся в системе. <strong>Это требование обусловлено несколькими причинами:</strong></p>
<ul>
<li>Разработчики хранилища данных стремятся выявлять возможные ошибки и понимать поток данных в системе.</li>
<li>Ценность данных зависит от их источника или возраста. Эта информация может использоваться в бизнес-правилах.</li>
<li>Соответствие нормативным требованиям (compliance) требует отслеживания потока данных и процессов, если информация используется как основа для бизнес-решений. Должно быть четко видно, откуда поступили данные и когда они были загружены в хранилище.</li>
</ul>
<p><strong>Однако Inmon приводит аргументы против добавления аудита в хранилище данных:</strong></p>
<ul>
<li>Аудит требует загрузки дополнительных данных, которые в противном случае не загружались бы в хранилище.</li>
<li>Это может изменить расписание загрузки данных. Например, если хранилище данных будет единственным местом аудита, это потребует загрузки всех изменений операционных данных, а не только ежедневных пакетных обновлений, как это принято в большинстве проектов хранилищ данных.</li>
<li>Требования к резервному копированию и восстановлению изменяются кардинально, если требуется аудит.</li>
<li>Аудитирование источников данных вынуждает хранилище данных загружать исходные данные с максимально возможной детализацией.</li>
</ul>
<p><strong>С нашей точки зрения, аудит должен ограничиваться ответами на такие вопросы, как:</strong></p>
<ul>
<li>Откуда был извлечен этот конкретный набор данных?</li>
<li>Когда данные были извлечены?</li>
<li>Какой процесс отвечал за извлечение данных?</li>
<li>Где эти данные использовались?</li>
</ul>
<p>Хранилище данных не должно отвечать на вопрос о том, как данные были получены операционной системой — на этот вопрос обычно может ответить только сама система-источник. В некоторых случаях хранилище данных получает информацию о пользователе и времени создания или изменения записи. Если такая информация доступна, мы храним ее только для справочных целей.</p>
<p>Для поддержки аудита в хранилище данных добавляется метаинформация, которая отслеживает источник данных и дату/время загрузки. Однако ответить на вопрос о том, где именно использовались данные, сложнее, так как витрины данных (data marts) часто агрегируют данные для бизнес-пользователей.</p>
<p>Чтобы упростить аудит, процессы хранилища данных должны быть простыми и понятными.</p>
<h3><strong>Затраты</strong></h3>
<p>Еще одной проблемой в хранилищах данных является снижение затрат, так как ИТ в целом рассматривается руководством как фактор затрат. Стоимость хранилища данных определяется множеством факторов, начиная от стоимости хранения и заканчивая ценой низкого качества данных и плохого планирования. Дополнительным фактором затрат является изменение бизнес-требований, которое требует адаптации хранилища данных.</p>
<p>Стоимость хранения — это часто недооцениваемый фактор затрат в хранилищах данных. В начале проекта затраты обычно невысоки. Если хранилище данных создавалось как теневой ИТ-проект (то есть инициировалось бизнес-подразделением, реализовывалось внешними ИТ-консультантами и обходило внутреннюю ИТ-службу), то его расходы могли даже быть скрыты в бюджете другого проекта или активности.</p>
<p>Однако по мере роста объема данных затраты на хранение увеличиваются. В некоторых случаях это происходит экспоненциально и включает не только покупку новых дисков. <strong>Если в хранилище данных добавляется больше данных, то:</strong></p>
<ul>
<li>Требуется более быстрый доступ к сети для работы с данными,</li>
<li>Нужны более мощные вычислительные ресурсы для их обработки,</li>
<li>Требуются лучшие и более дорогие контроллеры жестких дисков.</li>
</ul>
<h4><strong>Основные факторы затрат</strong></h4>
<p>Хотя растущие затраты на хранение — важный аспект, они не являются главным фактором расходов в хранилищах данных.</p>
<p><strong>Основные затраты включают:</strong></p>
<ul>
<li>Стоимость хранения</li>
<li>Стоимость низкого качества данных</li>
<li>Стоимость плохого планирования</li>
<li>Стоимость изменений бизнес-требований (см. следующий раздел)</li>
</ul>
<p>Наибольшее влияние оказывают затраты на низкое качество данных и плохое планирование. Даже если команда проекта тщательно спланировала хранилище данных и обеспечила его качество, изменение бизнес-требований все равно может привести к значительным затратам. Единственный способ минимизировать их — продуманное упреждающее планирование.</p>
<p>Это особенно актуально, когда бизнес-требования формируются &#171;выше по потоку&#187; хранилища данных. Как было сказано ранее, это не только снижает производительность, но и увеличивает стоимость обслуживания.</p>
<h4><strong>Снижение затрат за счет гибкости</strong></h4>
<p>Бизнес-требования не должны быть встроены в процесс загрузки хранилища данных, их следует переносить на уровень загрузки витрин данных (data marts) — ближе к конечным пользователям.</p>
<p><strong>Это позволяет:</strong></p>
<ul>
<li>Обеспечить гибкость команды,</li>
<li>Контролировать затраты на поддержку и разработку (за счет авто-генерации),</li>
<li>Быстрее реагировать на изменения бизнес-требований,</li>
<li>Снизить стоимость производства витрин данных.</li>
</ul>
<p>Гибкость команды прямо пропорциональна сложности обработки данных. Если разделить сложные бизнес-требования на отдельные компоненты, можно упростить различные секции загрузки архитектуры. В результате значительная часть реализации может быть автоматически сгенерирована, что повышает оперативность реакции на изменения бизнес-требований.</p>
<h3><strong>Другие бизнес-требования</strong></h3>
<p>Современная деловая среда характеризуется быстро меняющимися условиями и неопределенностью. Поэтому изменения бизнес-требований происходят довольно часто.</p>
<p>Разработчики хранилищ данных стараются избежать частых изменений за счет тщательного планирования и заблаговременного проектирования. Этот подход часто основывается на традиционных каскадных методах разработки программного обеспечения.</p>
<p><strong>В таких подходах обычно выделяют четыре фазы:</strong></p>
<ol>
<li>Определение требований к хранилищу данных.</li>
<li>Архитектурное планирование и проектирование хранилища данных.</li>
<li>Разработка хранилища данных.</li>
<li>Тестирование хранилища данных.</li>
</ol>
<p>В отличие от этого, гибкие методы разработки ПО созданы для повышения качества программного обеспечения путем использования обратной связи от клиентов для поиска наилучших решений. Чтобы соответствовать этим требованиям, хранилище данных должно быть адаптивным и устойчивым к изменениям.</p>
<p>Изменения в существующих структурах не должны делать недействительными уже хранящиеся данные или используемые приложения. Одним из главных преимуществ гибких методов является способность быстро реагировать на изменения в бизнесе. Более подробно этот вопрос рассматривается в главе 3 — Методология Data Vault 2.0.</p>
<h4><strong>Инструменты для работы с данными</strong></h4>
<p>Чтобы поддерживать как инженеров хранилищ данных, так и бизнес-пользователей, необходим набор инструментов для запросов, анализа и представления информации. К таким инструментам относятся:</p>
<ul>
<li>Системы отчетности,</li>
<li>Анализаторы запросов,</li>
<li>OLAP-браузеры (онлайн-аналитическая обработка),</li>
<li>Инструменты для анализа данных (data mining) и другие.</li>
</ul>
<p>Примером является Microsoft SQL Server 2014, который содержит эти инструменты &#171;из коробки&#187;.</p>
<h4><strong>Сохранение знаний в команде</strong></h4>
<p>Еще одним важным бизнес-требованием является способность проектной команды адаптироваться к естественной текучести кадров. Важный фактор успеха в области хранилищ данных — сохранение знаний и навыков команды, независимо от ухода ключевых сотрудников.</p>
<p><strong>Решения для этого включают:</strong></p>
<ul>
<li>Хорошо документированную систему хранилища данных,</li>
<li>Легко понятный дизайн,</li>
<li>Использование BI-решений (бизнес-аналитики) от крупных вендоров.</li>
</ul>
<p>Например, решения Microsoft широко известны в отрасли и поддерживаются другими вендорами и консалтинговыми компаниями.</p>
<h4><strong>Роль Data Vault 2.0</strong></h4>
<p>Все вышеперечисленное является основными компонентами Data Vault 2.0 и его инноваций.</p>
<p>DV2.0 охватывает Big Data, NoSQL, производительность, гибкость команд, сложность и множество других вопросов. Он определяет стандарты и передовые практики для моделирования, реализации, методологии и архитектуры хранилищ данных.</p>
<h2>Введение в Data Vault 2.0</h2>
<p>Data Vault представляет собой систему бизнес-аналитики. Полное название системы Data Vault — Common Foundational Warehouse Architecture. Эта система включает в себя различные аспекты, связанные с проектированием, реализацией и управлением хранилищем данных.</p>
<p>Исторический анализ Data Vault 1.0 показывает, что первая версия была сильно сосредоточена на моделировании (Data Vault Modeling), то есть физических и логических моделях, формирующих сырой корпоративный склад данных.</p>
<p>Data Vault 2.0, в отличие от предыдущей версии, расширился и теперь включает в себя все необходимые компоненты, обеспечивающие успешную работу хранилищ данных и систем бизнес-аналитики.</p>
<p><strong>Эти компоненты:</strong></p>
<ul>
<li><strong>Data Vault 2.0 Modeling</strong> – Изменения модели для повышения производительности и масштабируемости.</li>
<li><strong>Data Vault 2.0 Methodology</strong> – Использование лучших практик Scrum и Agile.</li>
<li><strong>Data Vault 2.0 Architecture</strong> – Интеграция с NoSQL и Big Data-системами.</li>
<li><strong>Data Vault 2.0 Implementation</strong> – Автоматизация на основе шаблонов, генерация на уровне CMMI 5.</li>
</ul>
<p>Каждый из этих компонентов играет ключевую роль в общем успехе проекта корпоративного хранилища данных. Они сочетаются с известными в отрасли и проверенными временем методами, включая CMMI (Capability Maturity Model Integration), Six Sigma, TQM (Total Quality Management) и PMP (Project Management Professional).</p>
<h4><strong>Основные особенности Data Vault 2.0</strong></h4>
<ul>
<li><strong>Data Vault 2.0 Modeling</strong> теперь включает изменения, позволяющие моделям беспрепятственно работать с NoSQL и Big Data-системами.</li>
<li><strong>Data Vault 2.0 Methodology</strong> ориентирована на 2-3-недельные спринты с адаптациями и оптимизациями для повторяющихся задач хранилища данных.</li>
<li><strong>Data Vault 2.0 Architecture</strong> включает NoSQL, потоковую обработку данных в реальном времени и Big Data-системы, работающие с неструктурированными данными.</li>
<li><strong>Data Vault 2.0 Implementation</strong> делает акцент на автоматизацию и шаблонные методы для экономии времени, сокращения ошибок и повышения производительности команды, работающей с хранилищем данных.</li>
</ul>
<h2>Архитектура хранилища данных</h2>
<p>Чтобы удовлетворить технические ожидания, инженеры хранилищ данных могут использовать различные архитектурные подходы для построения хранилищ данных.</p>
<p>Обычно архитектуры хранилищ данных основаны на многоуровневых подходах, что характерно для информационных систем.</p>
<p>Две типичные архитектуры таких хранилищ будут описаны в следующих разделах.</p>
<h3>Типичная двухслойная архитектура</h3>
<p>Кимбалл представил широко используемую двухслойную архитектуру.</p>
<p>В этой архитектуре, представленной на Рисунке 1.3, есть только два уровня, которые являются частью самой системы хранилища данных.</p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/1_3_The_Kimball_Data_Lifecycle.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1138 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/1_3_The_Kimball_Data_Lifecycle.jpeg" alt="" width="922" height="459" srcset="https://datatalks.ru/wp-content/uploads/2025/02/1_3_The_Kimball_Data_Lifecycle.jpeg 922w, https://datatalks.ru/wp-content/uploads/2025/02/1_3_The_Kimball_Data_Lifecycle-300x149.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/1_3_The_Kimball_Data_Lifecycle-768x382.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/1_3_The_Kimball_Data_Lifecycle-450x224.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/1_3_The_Kimball_Data_Lifecycle-780x388.jpeg 780w" sizes="(max-width: 922px) 100vw, 922px" /></a></p>
<h4><strong>Этап загрузки данных</strong></h4>
<p>Сырые данные из источников загружаются в промежуточную (stage) область.<br />Цель этого этапа — создать точную копию всех данных, которые должны быть загружены в хранилище данных.</p>
<p><strong>Основное назначение промежуточной области:</strong></p>
<ul>
<li>Сократить количество операций на исходной системе.</li>
<li>Уменьшить время извлечения данных из исходной системы.</li>
<li>Таблицы в промежуточной области строятся по образцу таблиц в исходной системе.</li>
</ul>
<p><strong>Промежуточная область необходима в случаях, когда:</strong></p>
<ul>
<li>Трансформации сложны и не могут выполняться на лету.</li>
<li>Данные поступают из нескольких источников в разное время.</li>
</ul>
<h4><strong>Этап загрузки в хранилище данных</strong></h4>
<p>После загрузки в stage, Кимбалл предлагает перемещение данных в хранилище.<br />Это хранилище данных построено на основе размерной модели и состоит из витрин данных (data marts), представляющих бизнес-процессы.</p>
<p>Эти витрины объединяются с помощью конформных измерений (conformed dimensions).<br />Такой подход был впервые предложен Кимбаллом в 1996 году.</p>
<h4><strong>Размерная модель Dimensional Modeling</strong></h4>
<p>Размерная модель — это де-факто стандарт, который прост в использовании для бизнес-пользователей и аналитических инструментов, таких как OLAP.</p>
<p>Поскольку размерная модель представляет собой логическое объединение конформных витрин данных, правила обработки данных должны быть реализованы до загрузки в хранилище, чтобы выравнивать и согласовывать наборы данных.</p>
<p>Мы обсудим размерное моделирование в главе 7 – Dimensional Modeling.</p>
<p>Приложения для доступа к данным используют размерную модель, чтобы:</p>
<ul>
<li>Предоставлять пользователям информацию.</li>
<li>Позволять проводить гибкий (ad-hoc) анализ.</li>
</ul>
<p>Преимущества и недостатки двухслойной архитектуры</p>
<p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Преимущество:</strong> Проще построить размерное хранилище на основе исходных данных по сравнению с другими архитектурами.</p>
<p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Недостаток: </strong>Сложнее создать вторую размерную модель из тех же исходных данных, так как данные придется загружать заново из промежуточной области.</p>
<p>Невозможно повторно использовать существующие ETL-пакеты.</p>
<h3>Типичная трехслойная архитектура</h3>
<p>Чтобы преодолеть ограничения двухслойной архитектуры, широко используется трехслойная архитектура.</p>
<p><strong>Рисунок 1.4 Хранилище данных Инмона</strong></p>
<p><a href="https://datatalks.ru/wp-content/uploads/2025/02/1_4_The_Inmon_Data_Warehouse.jpeg" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter wp-image-1139 size-full" src="https://datatalks.ru/wp-content/uploads/2025/02/1_4_The_Inmon_Data_Warehouse.jpeg" alt="" width="919" height="446" srcset="https://datatalks.ru/wp-content/uploads/2025/02/1_4_The_Inmon_Data_Warehouse.jpeg 919w, https://datatalks.ru/wp-content/uploads/2025/02/1_4_The_Inmon_Data_Warehouse-300x146.jpeg 300w, https://datatalks.ru/wp-content/uploads/2025/02/1_4_The_Inmon_Data_Warehouse-768x373.jpeg 768w, https://datatalks.ru/wp-content/uploads/2025/02/1_4_The_Inmon_Data_Warehouse-450x218.jpeg 450w, https://datatalks.ru/wp-content/uploads/2025/02/1_4_The_Inmon_Data_Warehouse-780x379.jpeg 780w" sizes="(max-width: 919px) 100vw, 919px" /></a><br />Эта архитектура была представлена Инмоном и включает атомарное хранилище данных,<br />которое часто реализуется в виде нормализованного операционного хранилища данных (ODS).<br />ODS располагается между промежуточной областью (staging area) и размерной моделью.</p>
<h4><strong>Описание слоев трехслойной архитектуры</strong></h4>
<p><strong>Промежуточная область (Stage Area)</strong></p>
<ul>
<li>Работает так же, как в двухслойной архитектуре.</li>
<li>Служит для извлечения данных из источников перед загрузкой в хранилище.</li>
</ul>
<p><strong>Хранилище данных (Data Warehouse / ODS)</strong></p>
<ul>
<li>Содержит сырые данные.</li>
<li>Моделируется в третьей нормальной форме (3NF).</li>
<li>Интегрирует все данные предприятия, но при этом сохраняет физические таблицы исходных систем.</li>
<li>Функционирует аналогично большой операционной базе данных.</li>
</ul>
<p><strong>Размерная модель (Dimensional Model / Data Marts)</strong></p>
<ul>
<li>Основана на нормализованных бизнес-данных.</li>
<li>Бизнес-пользователи могут анализировать данные через предметно-ориентированные витрины данных (data marts).</li>
<li>Похожая схема использовалась в двухслойной архитектуре.</li>
</ul>
<h4><strong>Преимущества трехслойной архитектуры</strong></h4>
<ul>
<li>Упрощенное создание новых витрин данных
<ul>
<li>В отличие от двухслойной архитектуры, данные уже очищены и интегрированы в ODS.</li>
<li>Нет необходимости в дополнительной обработке данных при создании новых витрин.</li>
</ul>
</li>
<li>Гибкость в предоставлении данных
<ul>
<li>В двухслойной архитектуре витрин данных может быть несколько, чтобы удовлетворить различные группы пользователей.</li>
<li>В трехслойной архитектуре процесс построения новых витрин значительно упрощен.</li>
</ul>
</li>
</ul>
<h4><strong>Недостатки трехслойной архитектуры</strong></h4>
<ul>
<li>Усложнение построения хранилища данных. Требуется больше ресурсов и времени на обработку данных.</li>
<li>Проблемы с изменением модели данных. Если многие витрины данных зависят от операционного хранилища (ODS), изменение модели данных может создать дополнительные сложности.</li>
</ul>
<p>В следующей главе мы рассмотрим альтернативную трехслойную архитектуру,<br />которая позволяет быстрее вносить изменения в хранилище данных.</p>


<p class="wp-block-paragraph"></p>
<p>Сообщение <a href="https://datatalks.ru/data-vault-2-0-chapter-1-introduction-to-data-warehousing/">Перевод 1 Главы &#8212; Введение в хранилища данных</a> появились сначала на <a href="https://datatalks.ru">DataTalks.RU. Data Engineering / DWH / Data Pipeline</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://datatalks.ru/data-vault-2-0-chapter-1-introduction-to-data-warehousing/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
