Модель данных vs схема vs метаданные
Три термина — модель данных, схема, метаданные — постоянно встречаются рядом, звучат похоже и потому путаются. Эту путаницу важно убрать в самом начале курса: дальше все три слова используются часто, и если для вас они сливаются в одно, вы будете терять смысл предложений. Этот урок даёт каждому термину точное определение и показывает, как они соотносятся.
Заодно разберём слово «схема» отдельно — у него в мире данных есть целых два разных значения, и это отдельный источник путаницы.
Модель данных: определение
Модель данных — это абстрактное, формальное описание структуры данных предметной области: какие сущности существуют, какие у них атрибуты, как они связаны, какие правила целостности действуют.
Ключевое слово — абстрактное. Модель — это идея, замысел, чертёж. Она существует на трёх уровнях (conceptual, logical, physical из соответствующего урока), но даже физическая модель — это всё ещё описание, проект. Модель отвечает на вопрос «как ДОЛЖНЫ быть устроены данные».
Модель данных живёт в ER-диаграммах, в проектной документации, в голове проектировщика. Это интеллектуальный артефакт. Базы данных может ещё не существовать, а модель уже есть.
Схема: определение
Схема (schema) — это конкретная реализация модели в конкретной системе хранения: набор определений таблиц, колонок, типов, ключей и ограничений, который реально создан в базе данных.
Ключевое слово — конкретная реализация. Если модель — это чертёж, то схема — это построенный по чертежу каркас здания. Схема — то, что вы получаете, исполнив DDL-команды (CREATE TABLE, CREATE INDEX). Схема существует внутри конкретной СУБД, ею управляет СУБД, её можно запросить у СУБД.
Схема отвечает на вопрос «как данные устроены ПРЯМО СЕЙЧАС в этой базе».
Связь простая: модель реализуется в схему. Одна модель может породить несколько схем — например, в PostgreSQL и в MySQL, или в dev- и prod-окружении. И наоборот, по существующей схеме можно восстановить модель (это называется reverse engineering — обратное проектирование).
Метаданные: определение
Метаданные (metadata) — это «данные о данных»: любая информация, описывающая сами данные, а не являющаяся данными предметной области.
Если данные предметной области — это «клиент Иван, заказ на 3500 рублей», то метаданные — это всё, что описывает эти данные:
- что колонка
totalимеет типNUMERIC(10,2); - что таблица
ordersсодержит 1,2 млн строк; - что таблица
ordersбыла последний раз изменена вчера в 14:30; - что колонка
emailозначает «электронная почта клиента для уведомлений»; - что данные в
raw.paymentsприходят из Stripe; - кто имеет доступ на чтение таблицы
customers.
Метаданные — широкое понятие. Их принято делить на виды:
- Технические метаданные — типы колонок, размеры таблиц, индексы, расписания загрузок. По сути, схема — это разновидность технических метаданных.
- Бизнес-метаданные — человеческие описания: что означает сущность, как считается метрика, кто владелец данных.
- Операционные метаданные — информация о процессах: когда таблица обновлялась, сколько строк загрузилось, не было ли ошибок.
Как все три соотносятся
Соберём картину. Модель — это абстрактный замысел структуры. Схема — конкретная реализация этого замысла в СУБД. Метаданные — это вся информация о данных, и схема входит в метаданные как их техническая часть.
| Термин | Что это | Уровень | Где живёт | Отвечает на вопрос |
|---|---|---|---|---|
| Модель данных | Абстрактное описание структуры | Замысел | Диаграммы, документация | Как данные ДОЛЖНЫ быть устроены |
| Схема | Конкретная реализация модели | Реализация | Внутри СУБД | Как данные устроены СЕЙЧАС в этой базе |
| Метаданные | Любая информация о данных | Описание | Каталог данных, СУБД, документация | Что мы знаем о данных и об их структуре |
Аналогия для запоминания. Модель данных — архитектурный проект дома. Схема — построенный дом, конкретное здание по этому проекту. Метаданные — это паспорт здания плюс вся документация: площадь, год постройки, материалы, дата последнего ремонта, владелец, чертежи. Проект (модель) входит в документацию (метаданные), реальное здание (схему) тоже описывает документация.
Слово «схема»: два значения
Отдельная ловушка: слово «схема» (schema) в мире данных имеет два разных значения, и из контекста надо понимать, какое имеется в виду.
Значение 1: схема как структура. То, о чём весь этот урок: набор определений таблиц, колонок, ключей — реализация модели. «У этой таблицы такая-то схема», «изменение схемы», «schema migration» — здесь «схема» означает структуру.
Значение 2: схема как пространство имён. В PostgreSQL и некоторых других СУБД SCHEMA — это именованный контейнер, группирующий таблицы внутри базы данных, аналог папки. Команда CREATE SCHEMA analytics; создаёт пространство имён, а analytics.orders — это таблица orders внутри схемы-контейнера analytics.
-- Здесь "схема" — это пространство имён (контейнер, аналог папки):
CREATE SCHEMA staging;
CREATE TABLE staging.raw_orders (id BIGINT, payload TEXT);
-- А "схема" таблицы raw_orders как структура — это вот это:
-- две колонки: id типа BIGINT и payload типа TEXT.
Одно и то же слово, два смысла. Когда говорят «схема staging» — это контейнер. Когда «схема таблицы orders» или «миграция схемы» — это структура.
Не путайте два значения «схемы». Если в тексте или разговоре слово «схема» сбивает с толку — подставьте вместо него: для значения 1 — «структура таблиц», для значения 2 — «пространство имён» или «контейнер». Сразу станет ясно, о чём речь. В этом курсе «схема» по умолчанию означает структуру (значение 1), если явно не сказано иное.
Почему различать термины важно практически
Это не педантизм ради педантизма. Различие напрямую влияет на работу.
- «Модель надо пересмотреть» и «схему надо мигрировать» — разные задачи. Первая — про чертёж, может не затрагивать существующую базу. Вторая — про изменение реальной структуры в работающей СУБД с данными.
- «Метаданные потеряны» не означает «данные потеряны». Можно иметь все данные, но не знать, что означает колонка
flag_7— это потеря бизнес-метаданных, и она тоже дорого обходится. - Современные каталоги данных (data catalog) — это инструменты для управления именно метаданными: они собирают технические, бизнес- и операционные метаданные всех таблиц компании, чтобы можно было найти нужные данные и понять их.
Чем больше становится данных в компании, тем важнее метаданные. В хранилище на тысячи таблиц без хороших метаданных невозможно понять, какие данные есть, что они означают и можно ли им доверять. Поэтому управление метаданными (data catalog, документация, lineage) — серьёзная инженерная дисциплина, а не «бумажная» работа.
Ещё несколько близких терминов
Раз уж урок наводит порядок в терминологии, упомянем ещё несколько слов, которые встречаются рядом и тоже путаются.
Структура данных (data structure) в контексте баз — то же, что схема в первом значении: организация данных. Но осторожно: в программировании «структура данных» означает совсем другое (массив, список, дерево как способ хранения в памяти). Из контекста обычно ясно, идёт речь о базе или о коде.
Словарь данных (data dictionary) — документ или хранимая структура, описывающая все элементы данных: список таблиц, колонок, их типов, смыслов, правил. По сути, словарь данных — это организованная часть метаданных, ориентированная на людей. В крупных компаниях data modeler ведёт корпоративный словарь данных.
DDL (Data Definition Language) — подмножество SQL для определения структуры: команды CREATE, ALTER, DROP. DDL — это инструмент, которым схему создают и меняют. Когда вы исполняете DDL-скрипт, вы материализуете модель в схему.
Каталог данных (data catalog) — современный инструмент, который автоматически собирает метаданные всех таблиц компании в одном месте, чтобы данные можно было найти, понять их смысл и происхождение. Каталог данных — это «поисковик по данным компании».
| Термин | Коротко | Связь с уроком |
|---|---|---|
| Структура данных | Организация данных (в БД = схема) | Синоним схемы в значении 1 |
| Словарь данных | Описание всех элементов данных | Организованная часть метаданных |
| DDL | SQL для определения структуры | Инструмент создания схемы из модели |
| Каталог данных | Инструмент сбора метаданных | Управление метаданными в масштабе |
Не пугайтесь обилия терминов. Все они вращаются вокруг трёх главных понятий урока: модель (замысел), схема (реализация), метаданные (информация о данных). Словарь данных и каталог данных — про метаданные; DDL — про переход от модели к схеме; структура данных — синоним схемы. Удержав три главных понятия, остальное легко расставить по местам.
Попробуй сам
Возьмите любую таблицу из своей учебной базы (можно staff из урока про аномалии) и выпишите для неё все три вещи раздельно. Модель: словами опишите, какую сущность таблица представляет и какие у неё свойства и правила — это абстрактный замысел. Схема: выполните в своей СУБД команду, показывающую структуру таблицы (в PostgreSQL это \d staff в psql, в SQLite — .schema staff), и посмотрите на конкретные определения колонок и типов. Метаданные: выпишите хотя бы по одному примеру технических (тип колонки), бизнес- (что означает каждая колонка человеческими словами) и операционных метаданных (когда таблица создана/менялась). Затем проговорите, почему схема — это одновременно и реализация модели, и часть метаданных.