2NF и 3NF

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

Nuno Rocha

Director of Engineering

Введение в 2NF

  • Вторая нормальная форма (2NF): устраняет частичные зависимости; каждый неключевой атрибут должен функционально зависеть от первичного ключа

Шаги от UNF до 3NF

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

Введение в 2NF (1)

  • Вторая нормальная форма (2NF): устраняет частичные зависимости; каждый неключевой атрибут должен функционально зависеть от первичного ключа
  • Функциональная зависимость: первичный ключ явно идентифицирует атрибут

Удостоверения сотрудников, иллюстрирующие функциональную зависимость

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

Введение в 2NF (2)

  • Вторая нормальная форма (2NF): устраняет частичные зависимости; каждый неключевой атрибут должен функционально зависеть от первичного ключа.
  • Функциональная зависимость: первичный ключ явно идентифицирует атрибут.
  • Частичная зависимость: для идентификации атрибута достаточно лишь части первичного ключа.

Удостоверения сотрудников, иллюстрирующие частичную зависимость

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

Вторая нормальная форма

Сущность Allproducts, жалоба на продукт соответствует 2NF

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

Вторая нормальная форма

Сущность Allproducts, проблема с деталями в 2NF

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

Вторая нормальная форма

Сущность Allproducts, проблема с деталями в 2NF для производителя

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

Переход к 2NF

  • Шаг 1: создайте новые сущности для атрибутов с частичной зависимостью.
CREATE OR REPLACE TABLE manufacturers (
    manufacturer_id NUMBER(10,0) PRIMARY KEY,
    manufacturer VARCHAR(255),
    location VARCHAR(255)
);
CREATE OR REPLACE TABLE details (
    detail_id NUMBER(10,0) PRIMARY KEY,
    detail VARCHAR(255)
);
Введение в моделирование данных в Snowflake

Переход к 2NF

  • Шаг 2: заполните сущности данными из исходной ненормализованной сущности.
INSERT INTO manufacturers (manufacturer_id, manufacturer, location)
SELECT DISTINCT manufacturer_id, 
    manufacturer_name,
    location
FROM allproducts;
INSERT INTO details (detail_id, detail)
SELECT DISTINCT detail_id, 
    detail_description
FROM allproducts;
Введение в моделирование данных в Snowflake

Переход к 2NF

Данные Allproducts: от UNF до 2NF

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

Введение в 3NF

  • Третья нормальная форма (3NF): устраняет транзитивные зависимости; неключевые атрибуты должны напрямую зависеть от первичного ключа.

Шаги от UNF до 3NF

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

Введение в 3NF

  • Третья нормальная форма (3NF): устраняет транзитивные зависимости; неключевые атрибуты должны напрямую зависеть от первичного ключа.
  • Транзитивная зависимость: атрибут зависит от другого атрибута, а не от первичного ключа.

Удостоверения сотрудников, иллюстрирующие транзитивную зависимость

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

Третья нормальная форма

Атрибут location не соответствует 3NF

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

Переход к 3NF

  • Шаг 1: создайте новую сущность для атрибутов с транзитивной зависимостью.
CREATE TABLE locations (
    location_id NUMBER(10,0) PRIMARY KEY,
    location VARCHAR(255)
);
Введение в моделирование данных в Snowflake

Переход к 3NF

  • Шаг 2: заполните сущности данными из исходной ненормализованной сущности.
INSERT INTO locations (location_id, location)
SELECT ROW_NUMBER() OVER (ORDER BY location), 
    location
FROM manufacturers
GROUP BY location;
ALTER TABLE manufacturers
DROP COLUMN location;
Введение в моделирование данных в Snowflake

Переход к 3NF

  • Шаг 3: создайте новую сущность для оставшихся атрибутов из ненормализованной сущности.
CREATE OR REPLACE TABLE products (
    product_id NUMBER(10,0) PRIMARY KEY,
    name VARCHAR(255)
);
  • Шаг 4: заполните сущность уникальными значениями из ненормализованной сущности.
INSERT INTO products (product_id, name)
SELECT DISTINCT product_id,
    product_name
FROM allproducts;
Введение в моделирование данных в Snowflake

Финализация модели

Шаги от UNF до 3NF

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

Финализация модели

Данные Allproducts: от UNF до 1NF

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

Финализация модели

Данные Allproducts: от UNF до 2NF

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

Финализация модели

Данные Allproducts: от UNF до 3NF

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

Финализация модели

Данные Allproducts: от UNF до 3NF со связями

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

Термины и функции

  • Вторая нормальная форма (2NF): устраняет частичные зависимости; каждый неключевой атрибут должен функционально зависеть от первичного ключа.
  • Третья нормальная форма (3NF): устраняет транзитивные зависимости; неключевые атрибуты должны напрямую зависеть от первичного ключа.
  • Функциональная зависимость: первичный ключ явно идентифицирует атрибут.
  • Частичная зависимость: для идентификации атрибута достаточно лишь части первичного ключа.
  • Транзитивная зависимость: атрибут зависит от другого атрибута, а не от первичного ключа.
  • ROW_NUMBER() OVER (ORDER BY): функция SQL для генерации порядкового номера.
  • DISTINCT: оператор SQL для получения уникальных значений атрибута.
  • DROP: команда SQL, используемая с ALTER TABLE, для удаления элементов из сущности.
Введение в моделирование данных в Snowflake

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

INSERT INTO table_name (column_name, other_columns)
SELECT DISTINCT column_name,
    other_columns
FROM another_table;
INSERT INTO table_name (column_name)
SELECT ROW_NUMBER() OVER (ORDER BY column_name)
FROM another_table
GROUP BY TRIM(column_name);
ALTER TABLE table_name
DROP COLUMN column_name;
Введение в моделирование данных в Snowflake

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

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

Preparing Video For Download...