2NF en 3NF

Introductie tot datamodellering in Snowflake

Nuno Rocha

Director of Engineering

Introductie tot 2NF

  • Tweede normaalvorm (2NF): Verwijdert partiële afhankelijkheden; elk niet-sleutelattribuut hangt functioneel af van de primaire sleutel

Stappen van UNF naar 3NF

Introductie tot datamodellering in Snowflake

Introductie tot 2NF (1)

  • Tweede normaalvorm (2NF): Verwijdert partiële afhankelijkheden; elk niet-sleutelattribuut hangt functioneel af van de primaire sleutel
  • Functionele afhankelijkheid: De primaire sleutel identificeert een attribuut eenduidig

Medewerkerspassen met functionele afhankelijkheid

Introductie tot datamodellering in Snowflake

Introductie tot 2NF (2)

  • Tweede normaalvorm (2NF): Verwijdert partiële afhankelijkheden; elk niet-sleutelattribuut hangt functioneel af van de primaire sleutel.
  • Functionele afhankelijkheid: De primaire sleutel identificeert een attribuut eenduidig.
  • Partiële afhankelijkheid: Slechts een deel van de primaire sleutel is nodig om een attribuut te identificeren.

Medewerkerspassen met partiële afhankelijkheid

Introductie tot datamodellering in Snowflake

De tweede normaalvorm

Allproducts-entiteit, product voldoet aan 2NF

Introductie tot datamodellering in Snowflake

De tweede normaalvorm

Allproducts-entiteit, detail-probleem met 2NF

Introductie tot datamodellering in Snowflake

De tweede normaalvorm

Allproducts-entiteit, probleem met 2NF bij manufacturer

Introductie tot datamodellering in Snowflake

Over naar 2NF

  • Stap 1: Maak nieuwe entiteiten voor attributen met 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

Over 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

Over naar 2NF

All products-data, van UNF naar 2NF

Introductie tot datamodellering in Snowflake

Introductie tot 3NF

  • Derde normaalvorm (3NF): Verwijdert transitieve afhankelijkheden; niet-sleutelattributen moeten direct afhangen van de primaire sleutel.

Stappen van UNF naar 3NF

Introductie tot datamodellering in Snowflake

Introductie tot 3NF

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

Medewerkerspassen met transitieve afhankelijkheid

Introductie tot datamodellering in Snowflake

De derde normaalvorm

Locatie niet in overeenstemming met 3NF

Introductie tot datamodellering in Snowflake

Over naar 3NF

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

Over 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

Over naar 3NF

  • Stap 3: Maak een nieuwe entiteit om de resterende 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 overblijven in de ongenormaliseerde entiteit.
INSERT INTO products (product_id, name)
SELECT DISTINCT product_id,
    product_name
FROM allproducts;
Introductie tot datamodellering in Snowflake

Model afronden

Stappen van UNF naar 3NF

Introductie tot datamodellering in Snowflake

Model afronden

All products-data, van UNF naar 1NF

Introductie tot datamodellering in Snowflake

Model afronden

All products-data, van UNF naar 2NF

Introductie tot datamodellering in Snowflake

Model afronden

All products-data, van UNF naar 3NF

Introductie tot datamodellering in Snowflake

Model afronden

All products-data, van UNF naar 3NF met relaties

Introductie tot datamodellering in Snowflake

Overzicht: terminologie en functies

  • Tweede normaalvorm (2NF): Verwijdert partiële afhankelijkheden; elk niet-sleutelattribuut hangt functioneel af van de primaire sleutel.
  • Derde normaalvorm (3NF): Verwijdert transitieve afhankelijkheden; niet-sleutelattributen moeten direct afhangen van de primaire sleutel.
  • Functionele afhankelijkheid: De primaire sleutel identificeert een attribuut eenduidig.
  • 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 die een volgnummer genereert.
  • DISTINCT: SQL-clausule die unieke waarden van 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...