Перша нормальна форма

Вступ до моделювання даних у Snowflake

Nuno Rocha

Director of Engineering

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

  • Нормалізація даних: багатоетапне структурування даних, щоб мінімізувати дублювання та залежності

Розмиті кроки після UNF

Вступ до моделювання даних у Snowflake

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

  • Нормалізація даних: багатоетапне структурування даних, щоб мінімізувати дублювання та залежності

Кроки від UNF до 1NF

Вступ до моделювання даних у Snowflake

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

  • Нормалізація даних: багатоетапне структурування даних, щоб мінімізувати дублювання та залежності

Кроки від UNF до 3NF

Вступ до моделювання даних у Snowflake

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

  • Нормалізація даних: багатоетапне структурування даних, щоб мінімізувати дублювання та залежності

Кроки від UNF до 3NF

Вступ до моделювання даних у Snowflake

Перша нормальна форма

  • Перша нормальна форма (1NF): гарантує, що кожен стовпець сутності містить унікальні атомарні значення

Таблиця всіх продуктів з підсвіченою категорією

Вступ до моделювання даних у Snowflake

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

  • Дані категорій у UNF: категорія L не ізольована, тож значення неможливо оновлювати централізовано

Список усіх продуктів, що містять L

Вступ до моделювання даних у Snowflake

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

  • Крок перевірки: зробіть запит унікальних значень, щоб оцінити відповідність 1NF.
SELECT DISTINCT category 
FROM allproducts;

Список категорій

Вступ до моделювання даних у Snowflake

Функції Snowflake для 1NF

  • TRIM
  • LATERAL & FLATTEN
  • SPLIT
Вступ до моделювання даних у Snowflake

Функції Snowflake для 1NF

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

Функція TRIM у категорії

Вступ до моделювання даних у Snowflake

Функції Snowflake для 1NF

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

Функції LATERAL, FLATTEN і SPLIT у категорії

Вступ до моделювання даних у 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

У напрямі нормалізації даних

Дані allproducts: від UNF до 1NF

Вступ до моделювання даних у Snowflake

Огляд термінів і функцій

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

Огляд функцій

-- Заповніть сутність даними з результату запиту
INSERT INTO table_name (column_name, other_columns)
SELECT 
    -- Згенеруйте унікальне значення за номером рядка
    ROW_NUMBER() OVER (ORDER BY TRIM(alias.value)),
    TRIM(alias.value)
FROM another_table,
-- Розбийте текстовий атрибут за роздільником 
LATERAL FLATTEN(INPUT => SPLIT(another_table.column_name, 'delimiter_value'))alias
-- Агрегуйте дані, щоб забезпечити унікальність значень
GROUP BY TRIM(alias.value);
Вступ до моделювання даних у Snowflake

Давайте потренуємось!

Вступ до моделювання даних у Snowflake

Preparing Video For Download...