2NF en 3NF

Introductie tot datamodellering in Snowflake

Nuno Rocha

Director of Engineering

Introductie tot 2NF

  • Second normal form (2NF): Schrapt partiële afhankelijkheden; elk niet-sleutelattribuut moet functioneel van de primaire sleutel afhangen

Stappen van UNF naar 3NF

Introductie tot datamodellering in Snowflake

Introductie tot 2NF (1)

  • Second normal form (2NF): Schrapt partiële afhankelijkheden; elk niet-sleutelattribuut moet functioneel van de primaire sleutel afhangen
  • Functionele afhankelijkheid: De primaire sleutel identificeert een attribuut expliciet

Medewerkerspassen die functionele afhankelijkheid tonen

Introductie tot datamodellering in Snowflake

Introductie tot 2NF (2)

  • Second normal form (2NF): Schrapt partiële afhankelijkheden; elk niet-sleutelattribuut moet functioneel van de primaire sleutel afhangen.
  • Functionele afhankelijkheid: De primaire sleutel identificeert een attribuut expliciet.
  • Partiële afhankelijkheid: Slechts een deel van de primaire sleutel is nodig om een attribuut te identificeren.

Medewerkerspassen die partiële afhankelijkheid tonen

Introductie tot datamodellering in Snowflake

De tweede normaalvorm

Allproducts-entiteit, productklacht met 2NF

Introductie tot datamodellering in Snowflake

De tweede normaalvorm

Allproducts-entiteit, detailprobleem met 2NF

Introductie tot datamodellering in Snowflake

De tweede normaalvorm

Allproducts-entiteit, detailprobleem met 2NF bij manufacturer

Introductie tot datamodellering in Snowflake

Overstappen naar 2NF

  • Stap 1: Maak nieuwe entiteiten voor de attributen met een partiële afhankelijkheid.
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)
);
Introductie tot datamodellering in Snowflake

Overstappen naar 2NF

  • Stap 2: Vul entiteiten met data uit de aanvankelijk ongenormaliseerde entiteit.
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;
Introductie tot datamodellering in Snowflake

Overstappen naar 2NF

Alle productdata, van UNF naar 2NF

Introductie tot datamodellering in Snowflake

Introductie tot 3NF

  • Third normal form (3NF): Schrapt transitieve afhankelijkheden; niet-sleutelattributen moeten direct van de primaire sleutel afhangen.

Stappen van UNF naar 3NF

Introductie tot datamodellering in Snowflake

Introductie tot 3NF

  • Third normal form (3NF): Schrapt transitieve afhankelijkheden; niet-sleutelattributen moeten direct van de primaire sleutel afhangen.
  • Transitieve afhankelijkheid: Een attribuut hangt af van een ander attribuut dat niet de primaire sleutel is.

Medewerkerspassen die transitieve afhankelijkheid tonen

Introductie tot datamodellering in Snowflake

De derde normaalvorm

Locatie voldoet niet aan 3NF

Introductie tot datamodellering in Snowflake

Overstappen naar 3NF

  • Stap 1: Maak een nieuwe entiteit voor de attributen met een transitieve afhankelijkheid.
CREATE TABLE locations (
    location_id NUMBER(10,0) PRIMARY KEY,
    location VARCHAR(255)
);
Introductie tot datamodellering in Snowflake

Overstappen naar 3NF

  • Stap 2: Vul entiteiten met data uit de aanvankelijk ongenormaliseerde entiteit.
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;
Introductie tot datamodellering in Snowflake

Overstappen naar 3NF

  • Stap 3: Maak een nieuwe entiteit om de overgebleven attributen uit de ongenormaliseerde entiteit te halen.
CREATE OR REPLACE TABLE products (
    product_id NUMBER(10,0) PRIMARY KEY,
    name VARCHAR(255)
);
  • Stap 4: Vul de entiteit met de unieke waarden die nog in de ongenormaliseerde entiteit staan.
INSERT INTO products (product_id, name)
SELECT DISTINCT product_id,
    product_name
FROM allproducts;
Introductie tot datamodellering in Snowflake

Het model afronden

Stappen van UNF naar 3NF

Introductie tot datamodellering in Snowflake

Het model afronden

Alle productdata, van UNF naar 1NF

Introductie tot datamodellering in Snowflake

Het model afronden

Alle productdata, van UNF naar 2NF

Introductie tot datamodellering in Snowflake

Het model afronden

Alle productdata, van UNF naar 3NF

Introductie tot datamodellering in Snowflake

Het model afronden

Alle productdata, van UNF naar 3NF met relaties

Introductie tot datamodellering in Snowflake

Overzicht van terminologie en functies

  • Second normal form (2NF): Schrapt partiële afhankelijkheden; elk niet-sleutelattribuut moet functioneel van de primaire sleutel afhangen.
  • Third normal form (3NF): Schrapt transitieve afhankelijkheden; niet-sleutelattributen moeten direct van de primaire sleutel afhangen.
  • Functionele afhankelijkheid: De primaire sleutel identificeert een attribuut expliciet.
  • Partiële afhankelijkheid: Slechts een deel van de primaire sleutel is nodig om een attribuut te identificeren.
  • Transitieve afhankelijkheid: Een attribuut hangt af van een ander attribuut dat niet de primaire sleutel is.
  • ROW_NUMBER() OVER (ORDER BY): SQL-functie om een volgnummer te genereren.
  • DISTINCT: SQL-clausule die unieke (verschillende) waarden uit een attribuut retourneert.
  • DROP: SQL-commando, gebruikt met ALTER TABLE, om elementen uit de entiteit te verwijderen.
Introductie tot datamodellering in Snowflake

Overzicht van functies

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;
Introductie tot datamodellering in Snowflake

Laten we oefenen!

Introductie tot datamodellering in Snowflake

Preparing Video For Download...