2NF och 3NF

Introduktion till datamodellering i Snowflake

Nuno Rocha

Director of Engineering

Introduktion till 2NF

  • Andra normalformen (2NF): Eliminerar partiella beroenden; varje icke-nyckelattribut måste funktionellt bero på primärnyckeln

Steg från UNF till 3NF

Introduktion till datamodellering i Snowflake

Introduktion till 2NF (1)

  • Andra normalformen (2NF): Eliminerar partiella beroenden; varje icke-nyckelattribut måste funktionellt bero på primärnyckeln
  • Funktionellt beroende: Primärnyckeln identifierar ett attribut explicit

Anställdas ID-kort som visar funktionellt beroende

Introduktion till datamodellering i Snowflake

Introduktion till 2NF (2)

  • Andra normalformen (2NF): Eliminerar partiella beroenden; varje icke-nyckelattribut måste funktionellt bero på primärnyckeln.
  • Funktionellt beroende: Primärnyckeln identifierar ett attribut explicit.
  • Partiellt beroende: Bara en del av primärnyckeln behövs för att identifiera ett attribut.

Anställdas ID-kort som visar partiellt beroende

Introduktion till datamodellering i Snowflake

Andra normalformen

Entiteten Allproducts, produktklagomål med 2NF

Introduktion till datamodellering i Snowflake

Andra normalformen

Entiteten Allproducts, detaljproblem med 2NF

Introduktion till datamodellering i Snowflake

Andra normalformen

Entiteten Allproducts, detaljproblem med 2NF i tillverkare

Introduktion till datamodellering i Snowflake

Övergång till 2NF

  • Steg 1: Skapa nya entiteter för de attribut som hade ett partiellt beroende.
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)
);
Introduktion till datamodellering i Snowflake

Övergång till 2NF

  • Steg 2: Fyll entiteterna med data från den ursprungligt onormaliserade entiteten.
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;
Introduktion till datamodellering i Snowflake

Övergång till 2NF

Produktdata, från UNF till 2NF

Introduktion till datamodellering i Snowflake

Introduktion till 3NF

  • Tredje normalformen (3NF): Eliminerar transitiva beroenden; icke-nyckelattribut måste bero direkt på primärnyckeln.

Steg från UNF till 3NF

Introduktion till datamodellering i Snowflake

Introduktion till 3NF

  • Tredje normalformen (3NF): Eliminerar transitiva beroenden; icke-nyckelattribut måste bero direkt på primärnyckeln.
  • Transitivt beroende: Ett attribut beror på ett annat attribut, som inte är primärnyckeln.

Anställdas ID-kort som visar transitivt beroende

Introduktion till datamodellering i Snowflake

Tredje normalformen

Plats uppfyller inte 3NF

Introduktion till datamodellering i Snowflake

Övergång till 3NF

  • Steg 1: Skapa en ny entitet för de attribut som hade ett transitivt beroende.
CREATE TABLE locations (
    location_id NUMBER(10,0) PRIMARY KEY,
    location VARCHAR(255)
);
Introduktion till datamodellering i Snowflake

Övergång till 3NF

  • Steg 2: Fyll entiteterna med data från den ursprungligt onormaliserade entiteten.
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;
Introduktion till datamodellering i Snowflake

Övergång till 3NF

  • Steg 3: Skapa en ny entitet för att extrahera de återstående attributen från den onormaliserade entiteten.
CREATE OR REPLACE TABLE products (
    product_id NUMBER(10,0) PRIMARY KEY,
    name VARCHAR(255)
);
  • Steg 4: Fyll entiteten med de unika värden som finns kvar i den onormaliserade entiteten.
INSERT INTO products (product_id, name)
SELECT DISTINCT product_id,
    product_name
FROM allproducts;
Introduktion till datamodellering i Snowflake

Slutföra modellen

Steg från UNF till 3NF

Introduktion till datamodellering i Snowflake

Slutföra modellen

Produktdata, från UNF till 1NF

Introduktion till datamodellering i Snowflake

Slutföra modellen

Produktdata, från UNF till 2NF

Introduktion till datamodellering i Snowflake

Slutföra modellen

Produktdata, från UNF till 3NF

Introduktion till datamodellering i Snowflake

Slutföra modellen

Produktdata, från UNF till 3NF med relationer

Introduktion till datamodellering i Snowflake

Terminologi och funktionsöversikt

  • Andra normalformen (2NF): Eliminerar partiella beroenden; varje icke-nyckelattribut måste funktionellt bero på primärnyckeln.
  • Tredje normalformen (3NF): Eliminerar transitiva beroenden; icke-nyckelattribut måste bero direkt på primärnyckeln.
  • Funktionellt beroende: Primärnyckeln identifierar ett attribut explicit.
  • Partiellt beroende: Bara en del av primärnyckeln behövs för att identifiera ett attribut.
  • Transitivt beroende: Ett attribut beror på ett annat attribut, som inte är primärnyckeln.
  • ROW_NUMBER() OVER (ORDER BY): SQL-funktion för att generera ett löpnummer.
  • DISTINCT: SQL-sats som returnerar unika (distinkta) värden från ett attribut.
  • DROP: SQL-kommando som används med ALTER TABLE, för att ta bort element från entiteten.
Introduktion till datamodellering i Snowflake

Funktionsöversikt

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;
Introduktion till datamodellering i Snowflake

Nu kör vi en övning!

Introduktion till datamodellering i Snowflake

Preparing Video For Download...