2NF i 3NF

Wprowadzenie do modelowania danych w Snowflake

Nuno Rocha

Director of Engineering

Wprowadzenie do 2NF

  • Druga postać normalna (2NF): Eliminuje częściowe zależności; każdy atrybut niekluczowy musi funkcjonalnie zależeć od klucza głównego

Kroki od UNF do 3NF

Wprowadzenie do modelowania danych w Snowflake

Wprowadzenie do 2NF (1)

  • Druga postać normalna (2NF): Eliminuje częściowe zależności; każdy atrybut niekluczowy musi funkcjonalnie zależeć od klucza głównego
  • Zależność funkcyjna: Klucz główny jednoznacznie identyfikuje atrybut

Karty identyfikacyjne pracowników ilustrujące zależność funkcyjną

Wprowadzenie do modelowania danych w Snowflake

Wprowadzenie do 2NF (2)

  • Druga postać normalna (2NF): Eliminuje częściowe zależności; każdy atrybut niekluczowy musi funkcjonalnie zależeć od klucza głównego.
  • Zależność funkcyjna: Klucz główny jednoznacznie identyfikuje atrybut.
  • Zależność częściowa: Do identyfikacji atrybutu wystarczy część klucza głównego.

Karty identyfikacyjne pracowników ilustrujące zależność częściową

Wprowadzenie do modelowania danych w Snowflake

Druga postać normalna

Encja Allproducts, produkt zgodny z 2NF

Wprowadzenie do modelowania danych w Snowflake

Druga postać normalna

Encja Allproducts, problem z 2NF w kolumnie detail

Wprowadzenie do modelowania danych w Snowflake

Druga postać normalna

Encja Allproducts, problem z 2NF w kolumnie manufacturer

Wprowadzenie do modelowania danych w Snowflake

Przejście do 2NF

  • Krok 1: Utwórz nowe encje dla atrybutów z częściową zależnością.
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)
);
Wprowadzenie do modelowania danych w Snowflake

Przejście do 2NF

  • Krok 2: Wypełnij encje danymi z pierwotnie niezormalizowanej encji.
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;
Wprowadzenie do modelowania danych w Snowflake

Przejście do 2NF

Dane allproducts, od UNF do 2NF

Wprowadzenie do modelowania danych w Snowflake

Wprowadzenie do 3NF

  • Trzecia postać normalna (3NF): Eliminuje zależności przechodnie; atrybuty niekluczowe muszą bezpośrednio zależeć od klucza głównego.

Kroki od UNF do 3NF

Wprowadzenie do modelowania danych w Snowflake

Wprowadzenie do 3NF

  • Trzecia postać normalna (3NF): Eliminuje zależności przechodnie; atrybuty niekluczowe muszą bezpośrednio zależeć od klucza głównego.
  • Zależność przechodnia: Atrybut zależy od innego atrybutu, który nie jest kluczem głównym.

Karty identyfikacyjne pracowników ilustrujące zależność przechodnią

Wprowadzenie do modelowania danych w Snowflake

Trzecia postać normalna

Kolumna location niezgodna z 3NF

Wprowadzenie do modelowania danych w Snowflake

Przejście do 3NF

  • Krok 1: Utwórz nową encję dla atrybutów z zależnością przechodnią.
CREATE TABLE locations (
    location_id NUMBER(10,0) PRIMARY KEY,
    location VARCHAR(255)
);
Wprowadzenie do modelowania danych w Snowflake

Przejście do 3NF

  • Krok 2: Wypełnij encje danymi z pierwotnie niezormalizowanej encji.
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;
Wprowadzenie do modelowania danych w Snowflake

Przejście do 3NF

  • Krok 3: Utwórz nową encję, aby wyodrębnić z niezormalizowanej encji pozostałe atrybuty.
CREATE OR REPLACE TABLE products (
    product_id NUMBER(10,0) PRIMARY KEY,
    name VARCHAR(255)
);
  • Krok 4: Wypełnij encję unikalnymi wartościami z niezormalizowanej encji.
INSERT INTO products (product_id, name)
SELECT DISTINCT product_id,
    product_name
FROM allproducts;
Wprowadzenie do modelowania danych w Snowflake

Finalizacja modelu

Kroki od UNF do 3NF

Wprowadzenie do modelowania danych w Snowflake

Finalizacja modelu

Dane allproducts, od UNF do 1NF

Wprowadzenie do modelowania danych w Snowflake

Finalizacja modelu

Dane allproducts, od UNF do 2NF

Wprowadzenie do modelowania danych w Snowflake

Finalizacja modelu

Dane allproducts, od UNF do 3NF

Wprowadzenie do modelowania danych w Snowflake

Finalizacja modelu

Dane allproducts, od UNF do 3NF z relacjami

Wprowadzenie do modelowania danych w Snowflake

Przegląd terminologii i funkcji

  • Druga postać normalna (2NF): Eliminuje częściowe zależności; każdy atrybut niekluczowy musi funkcjonalnie zależeć od klucza głównego.
  • Trzecia postać normalna (3NF): Eliminuje zależności przechodnie; atrybuty niekluczowe muszą bezpośrednio zależeć od klucza głównego.
  • Zależność funkcyjna: Klucz główny jednoznacznie identyfikuje atrybut.
  • Zależność częściowa: Do identyfikacji atrybutu wystarczy część klucza głównego.
  • Zależność przechodnia: Atrybut zależy od innego atrybutu, który nie jest kluczem głównym.
  • ROW_NUMBER() OVER (ORDER BY): Funkcja SQL generująca kolejne numery.
  • DISTINCT: Klauzula SQL zwracająca unikalne wartości atrybutu.
  • DROP: Polecenie SQL używane z ALTER TABLE, do usuwania elementów encji.
Wprowadzenie do modelowania danych w Snowflake

Przegląd funkcji

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;
Wprowadzenie do modelowania danych w Snowflake

Czas na ćwiczenia!

Wprowadzenie do modelowania danych w Snowflake

Preparing Video For Download...