Первая нормальная форма

Введение в моделирование данных в Snowflake

Nuno Rocha

Director of Engineering

Процесс нормализации данных

  • Нормализация данных: многоэтапный процесс структурирования данных для минимизации дублирования и зависимостей

Faded steps after UNF

Введение в моделирование данных в Snowflake

Процесс нормализации данных (1)

  • Нормализация данных: многоэтапный процесс структурирования данных для минимизации дублирования и зависимостей

Steps from UNF to 1NF

Введение в моделирование данных в Snowflake

Процесс нормализации данных (2)

  • Нормализация данных: многоэтапный процесс структурирования данных для минимизации дублирования и зависимостей

Steps from UNF to 3NF

Введение в моделирование данных в Snowflake

Процесс нормализации данных (3)

  • Нормализация данных: многоэтапный процесс структурирования данных для минимизации дублирования и зависимостей

Steps from UNF to 3NF

Введение в моделирование данных в Snowflake

Первая нормальная форма

  • Первая нормальная форма (1NF): гарантирует, что каждый столбец сущности содержит уникальные атомарные значения

All products table with category highlighted

Введение в моделирование данных в Snowflake

Первая нормальная форма (1)

  • Данные категорий в UNF: категория L не изолирована, что не позволяет обновлять значения

List of all products that contain L

Введение в моделирование данных в Snowflake

Первая нормальная форма (2)

  • Шаг проверки: запросите уникальные значения, чтобы оценить соответствие 1NF.
SELECT DISTINCT category 
FROM allproducts;

List of categories

Введение в моделирование данных в Snowflake

Функции Snowflake для 1NF

  • TRIM
  • LATERAL & FLATTEN
  • SPLIT
Введение в моделирование данных в Snowflake

Функции Snowflake для 1NF

  • TRIM: удаляет пробелы в начале и конце значений
SELECT TRIM(category)
FROM allproducts;

TRIM function in category

Введение в моделирование данных в Snowflake

Функции Snowflake для 1NF

  • TRIM: удаляет пробелы в начале и конце значений.
  • LATERAL & FLATTEN: обрабатывают список значений как таблицу с отдельными элементами.
  • SPLIT: разделяет значения по заданному разделителю.
SELECT TRIM(f.value)
FROM allproducts,
LATERAL FLATTEN(INPUT => SPLIT(allproducts.category, ',')) f;

LATERAL, FLATTEN and SPLIT function in category

Введение в моделирование данных в Snowflake

Применение 1NF

  • Шаг 1: создайте новую сущность для переноса значений атрибутов из UNF
CREATE OR REPLACE TABLE categories (
    category_id NUMBER(10,0) PRIMARY KEY,
    category VARCHAR(255)
);
Введение в моделирование данных в Snowflake

Применение 1NF

  • Шаг 2.1: заполните новую сущность данными из исходной ненормализованной сущности
  • INSERT INTO: SQL-команда для добавления новых строк в таблицу.
INSERT INTO categories (category_id, category)
___;
Введение в моделирование данных в Snowflake

Применение 1NF

  • Шаг 2.2: выберите данные из таблицы allproducts — исходной ненормализованной сущности
INSERT INTO categories (category_id, category)
SELECT 
    ___,
    ___
FROM allproducts;
Введение в моделирование данных в Snowflake

Применение 1NF

  • Шаг 2.3: используйте функцию для разделения значений в конкретном атрибуте
INSERT INTO categories (category_id, category)
SELECT 
    ___, 
    TRIM(f.value)
FROM allproducts,
LATERAL FLATTEN(INPUT => SPLIT(allproducts.category, ',')) f;
Введение в моделирование данных в Snowflake

Применение 1NF

  • Шаг 2.4: выберите номер строки для определения уникального идентификатора
INSERT INTO categories (category_id, category)
SELECT 
    ROW_NUMBER() OVER (ORDER BY TRIM(f.value)), 
    TRIM(f.value)
FROM allproducts,
LATERAL FLATTEN(INPUT => SPLIT(allproducts.category, ',')) f;
Введение в моделирование данных в Snowflake

Применение 1NF

  • Шаг 2.4: агрегируйте данные для получения уникальных значений категорий
INSERT INTO categories (category_id, category)
SELECT 
    ROW_NUMBER() OVER (ORDER BY TRIM(f.value)), 
    TRIM(f.value)
FROM allproducts,
LATERAL FLATTEN(INPUT => SPLIT(allproducts.category, ',')) f
GROUP BY TRIM(f.value);
Введение в моделирование данных в Snowflake

На пути к нормализации данных

All products data, from UNF to 1NF

Введение в моделирование данных в Snowflake

Обзор терминологии и функций

  • Нормализация данных: процесс структурирования данных для минимизации дублирования и зависимостей
  • Нормальные формы: правила применения нормализации данных
  • Первая нормальная форма (1NF): гарантирует, что каждый столбец сущности содержит уникальные атомарные значения
  • INSERT INTO: SQL-команда для добавления новых строк в таблицу
  • TRIM: SQL-функция для удаления пробелов в начале и конце значений
  • LATERAL FLATTEN(INPUT => SPLIT()): функция Snowflake для разбиения значений на строки
  • ROW_NUMBER() OVER (ORDER BY): SQL-функция для генерации последовательного номера
  • GROUP BY: SQL-предложение для агрегирования данных с одинаковыми значениями
Введение в моделирование данных в Snowflake

Обзор функций

-- Fill a entity with data from a query result
INSERT INTO table_name (column_name, other_columns)
SELECT 
    -- Generate a unique value using the row number
    ROW_NUMBER() OVER (ORDER BY TRIM(alias.value)),
    TRIM(alias.value)
FROM another_table,
-- Split a text attribute value based on a delimiter 
LATERAL FLATTEN(INPUT => SPLIT(another_table.column_name, 'delimiter_value'))alias
-- Aggregate the data to ensure uniqueness of values
GROUP BY TRIM(alias.value);
Введение в моделирование данных в Snowflake

Давайте потренируемся!

Введение в моделирование данных в Snowflake

Preparing Video For Download...