Prima formă normală

Introducere în modelarea datelor în Snowflake

Nuno Rocha

Director of Engineering

Procesul de normalizare a datelor

  • Normalizarea datelor: Proces în mai mulți pași de structurare a datelor pentru a minimiza duplicarea și dependențele

Pași estompați după UNF

Introducere în modelarea datelor în Snowflake

Procesul de normalizare a datelor (1)

  • Normalizarea datelor: Proces în mai mulți pași de structurare a datelor pentru a minimiza duplicarea și dependențele

Pași de la UNF la 1NF

Introducere în modelarea datelor în Snowflake

Procesul de normalizare a datelor (2)

  • Normalizarea datelor: Proces în mai mulți pași de structurare a datelor pentru a minimiza duplicarea și dependențele

Pași de la UNF la 3NF

Introducere în modelarea datelor în Snowflake

Procesul de normalizare a datelor (3)

  • Normalizarea datelor: Proces în mai mulți pași de structurare a datelor pentru a minimiza duplicarea și dependențele

Pași de la UNF la 3NF

Introducere în modelarea datelor în Snowflake

Prima formă normală

  • Prima formă normală (1NF): Asigură că fiecare coloană dintr-o entitate conține valori atomice unice

Tabelul allproducts cu categoria evidențiată

Introducere în modelarea datelor în Snowflake

Prima formă normală (1)

  • Date UNF categoria: categoria L nu este izolată pentru a permite actualizarea valorilor

Lista tuturor produselor care conțin L

Introducere în modelarea datelor în Snowflake

Prima formă normală (2)

  • Pas de validare: Interogați valorile unice pentru a evalua conformitatea cu 1NF.
SELECT DISTINCT category 
FROM allproducts;

Lista categoriilor

Introducere în modelarea datelor în Snowflake

Funcții Snowflake pentru 1NF

  • TRIM
  • LATERAL & FLATTEN
  • SPLIT
Introducere în modelarea datelor în Snowflake

Funcții Snowflake pentru 1NF

  • TRIM: Elimină spațiile de la începutul și sfârșitul valorilor
SELECT TRIM(category)
FROM allproducts;

Funcția TRIM aplicată pe categorie

Introducere în modelarea datelor în Snowflake

Funcții Snowflake pentru 1NF

  • TRIM: Elimină spațiile de la începutul și sfârșitul valorilor.
  • LATERAL & FLATTEN: Tratează o listă de valori ca pe un tabel cu elemente individuale.
  • SPLIT: Separă valorile pe baza unui delimitator.
SELECT TRIM(f.value)
FROM allproducts,
LATERAL FLATTEN(INPUT => SPLIT(allproducts.category, ',')) f;

Funcțiile LATERAL, FLATTEN și SPLIT aplicate pe categorie

Introducere în modelarea datelor în Snowflake

Aplicarea 1NF

  • Pasul 1: Creați o nouă entitate pentru a transfera valorile atributului UNF
CREATE OR REPLACE TABLE categories (
    category_id NUMBER(10,0) PRIMARY KEY,
    category VARCHAR(255)
);
Introducere în modelarea datelor în Snowflake

Aplicarea 1NF

  • Pasul 2.1: Completați noua entitate cu date din entitatea inițial nenormalizată
  • INSERT INTO: Comandă SQL pentru inserarea de noi rânduri într-un tabel.
INSERT INTO categories (category_id, category)
___;
Introducere în modelarea datelor în Snowflake

Aplicarea 1NF

  • Pasul 2.2: Selectați datele din allproducts, entitatea inițial nenormalizată
INSERT INTO categories (category_id, category)
SELECT 
    ___,
    ___
FROM allproducts;
Introducere în modelarea datelor în Snowflake

Aplicarea 1NF

  • Pasul 2.3: Utilizați o funcție pentru a împărți valorile dintr-un atribut specific
INSERT INTO categories (category_id, category)
SELECT 
    ___, 
    TRIM(f.value)
FROM allproducts,
LATERAL FLATTEN(INPUT => SPLIT(allproducts.category, ',')) f;
Introducere în modelarea datelor în Snowflake

Aplicarea 1NF

  • Pasul 2.4: Selectați numărul rândului pentru a defini un identificator unic
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;
Introducere în modelarea datelor în Snowflake

Aplicarea 1NF

  • Pasul 2.4: Agregați datele pentru a genera valori unice de categorie
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);
Introducere în modelarea datelor în Snowflake

Spre normalizarea datelor

Datele tuturor produselor, de la UNF la 1NF

Introducere în modelarea datelor în Snowflake

Prezentare generală a terminologiei și funcțiilor

  • Normalizarea datelor: Proces de structurare a datelor pentru a minimiza duplicarea și dependențele
  • Forme normale: Ghiduri pentru aplicarea normalizării datelor
  • Prima formă normală (1NF): Asigură că fiecare coloană dintr-o entitate conține valori atomice unice
  • INSERT INTO: Comandă SQL pentru inserarea de noi rânduri într-un tabel
  • TRIM: Funcție SQL pentru eliminarea spațiilor de la începutul și sfârșitul valorilor
  • LATERAL FLATTEN(INPUT => SPLIT()): Funcție Snowflake pentru împărțirea valorilor în rânduri
  • ROW_NUMBER() OVER (ORDER BY): Funcție SQL pentru generarea unui număr secvențial
  • GROUP BY: Clauză SQL pentru agregarea datelor cu valori identice
Introducere în modelarea datelor în Snowflake

Prezentare generală a funcțiilor

-- 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);
Introducere în modelarea datelor în Snowflake

Să exersăm!

Introducere în modelarea datelor în Snowflake

Preparing Video For Download...