Правила нормализации данных#
По умолчанию, нормализация не поддерживается. Предпочтительнее работать с плоскими структурами. Ниже приведены стратегии для нормализации потоков данных.
Object (вложенные структуры)#
Strategy: Unnest
Пример:
Инструкция:
- Все ключи и значения вложенного объекта "поднимаются" в родителя.
- Атрибуты вложенного объекта переименовываются через префикс.
Результат:
Array (списки)#
Strategy: Flatten
Нормализация списков не всегда целесообразна. В частности, списки с высокой размерностью могут быть не оптимальным выбором для хранения данных. Перед их использованием рекомендуется оценить необходимость их применения в конкретном сценарии.
Пример:
Инструкция:
- Приводим к 1 НФ, в ключ добавляем вложенные поля
Результат:
Аrray of object (список вложенных структур)#
Strategy: Join
Является частным видом стратегии Flatten
Пример:
{
"shk_id": 777,
"nm_id": 101,
"seller_id": 555,
"orders": [
{
"rid": 1001,
"pickpoint_id": 123
},
{
"rid": 1002,
"pickpoint_id": 124
}
]
}
Инструкция:
- Приводим к 1 НФ, в ключ добавляем вложенные поля.
Результат:
[
{
"shk_id": 777,
"nm_id": 101,
"seller_id": 555,
"rid": 1001,
"pickpoint_id": 123
},
{
"shk_id": 777,
"nm_id": 101,
"seller_id": 555,
"rid": 1002,
"pickpoint_id": 124
}
]
Спорные ситуации#
meta объекты#
В существующих потоках присутствуют объекты, содержащие техническую информацию. Структуру таких объектов трудно зафиксировать так как они меняются слишком часто и хаотично. В таких случаях, стоит уточнить содержание мета объектов и сценарии их использования.
В общем случае есть следующие варианты урегулирования:
- (Предпочтительный) убрать meta объект из контракта т.к. данные не нужны для аналитики.
- Оставить только нужные поля, поднять их на уровень объекта, от meta отказаться.
- Зафиксировать структуру meta и поддерживать ее актуальность.