Normal Form แรก

Data Modeling ใน Snowflake เบื้องต้น

Nuno Rocha

Director of Engineering

กระบวนการ normalize ข้อมูล

  • การ normalize ข้อมูล: กระบวนการหลายขั้นตอนในการจัดโครงสร้างข้อมูลเพื่อลดความซ้ำซ้อนและการพึ่งพากัน

ขั้นตอนที่ยังไม่แสดงหลัง UNF

Data Modeling ใน Snowflake เบื้องต้น

กระบวนการ normalize ข้อมูล (1)

  • การ normalize ข้อมูล: กระบวนการหลายขั้นตอนในการจัดโครงสร้างข้อมูลเพื่อลดความซ้ำซ้อนและการพึ่งพากัน

ขั้นตอนจาก UNF ถึง 1NF

Data Modeling ใน Snowflake เบื้องต้น

กระบวนการ normalize ข้อมูล (2)

  • การ normalize ข้อมูล: กระบวนการหลายขั้นตอนในการจัดโครงสร้างข้อมูลเพื่อลดความซ้ำซ้อนและการพึ่งพากัน

ขั้นตอนจาก UNF ถึง 3NF

Data Modeling ใน Snowflake เบื้องต้น

กระบวนการ normalize ข้อมูล (3)

  • การ normalize ข้อมูล: กระบวนการหลายขั้นตอนในการจัดโครงสร้างข้อมูลเพื่อลดความซ้ำซ้อนและการพึ่งพากัน

ขั้นตอนจาก UNF ถึง 3NF

Data Modeling ใน Snowflake เบื้องต้น

First normal form

  • First normal form (1NF): กำหนดให้แต่ละคอลัมน์ในเอนทิตีเก็บค่าอะตอมิกที่ไม่ซ้ำกัน

ตารางสินค้าทั้งหมดพร้อมไฮไลต์คอลัมน์หมวดหมู่

Data Modeling ใน Snowflake เบื้องต้น

First normal form (1)

  • ข้อมูลหมวดหมู่ใน UNF: หมวดหมู่ L ยังไม่ถูกแยกออกมา จึงไม่สามารถอัปเดตค่าได้

รายการสินค้าทั้งหมดที่มี L

Data Modeling ใน Snowflake เบื้องต้น

First normal form (2)

  • ขั้นตอนตรวจสอบ: คิวรีค่าที่ไม่ซ้ำกันเพื่อประเมินว่าเป็นไปตาม 1NF หรือไม่
SELECT DISTINCT category 
FROM allproducts;

รายการหมวดหมู่

Data Modeling ใน Snowflake เบื้องต้น

ฟังก์ชัน Snowflake สำหรับ 1NF

  • TRIM
  • LATERAL & FLATTEN
  • SPLIT
Data Modeling ใน Snowflake เบื้องต้น

ฟังก์ชัน Snowflake สำหรับ 1NF

  • TRIM: ลบช่องว่างที่ต้นและท้ายของค่า
SELECT TRIM(category)
FROM allproducts;

ฟังก์ชัน TRIM ในคอลัมน์หมวดหมู่

Data Modeling ใน Snowflake เบื้องต้น

ฟังก์ชัน Snowflake สำหรับ 1NF

  • TRIM: ลบช่องว่างที่ต้นและท้ายของค่า
  • LATERAL & FLATTEN: แปลงรายการค่าให้เป็นตารางที่มีแถวแยกกัน
  • SPLIT: แยกค่าตาม delimiter ที่กำหนด
SELECT TRIM(f.value)
FROM allproducts,
LATERAL FLATTEN(INPUT => SPLIT(allproducts.category, ',')) f;

ฟังก์ชัน LATERAL, FLATTEN และ SPLIT ในคอลัมน์หมวดหมู่

Data Modeling ใน Snowflake เบื้องต้น

การนำ 1NF ไปใช้

  • ขั้นตอนที่ 1: สร้างเอนทิตีใหม่เพื่อรับค่าแอตทริบิวต์จาก UNF
CREATE OR REPLACE TABLE categories (
    category_id NUMBER(10,0) PRIMARY KEY,
    category VARCHAR(255)
);
Data Modeling ใน Snowflake เบื้องต้น

การนำ 1NF ไปใช้

  • ขั้นตอนที่ 2.1: เติมข้อมูลในเอนทิตีใหม่จากเอนทิตีที่ยังไม่ได้ normalize
  • INSERT INTO: คำสั่ง SQL สำหรับแทรกแถวใหม่เข้าไปในตาราง
INSERT INTO categories (category_id, category)
___;
Data Modeling ใน Snowflake เบื้องต้น

การนำ 1NF ไปใช้

  • ขั้นตอนที่ 2.2: เลือกข้อมูลจาก allproducts ซึ่งเป็นเอนทิตีที่ยังไม่ได้ normalize
INSERT INTO categories (category_id, category)
SELECT 
    ___,
    ___
FROM allproducts;
Data Modeling ใน Snowflake เบื้องต้น

การนำ 1NF ไปใช้

  • ขั้นตอนที่ 2.3: ใช้ฟังก์ชันแยกค่าภายในแอตทริบิวต์ที่กำหนด
INSERT INTO categories (category_id, category)
SELECT 
    ___, 
    TRIM(f.value)
FROM allproducts,
LATERAL FLATTEN(INPUT => SPLIT(allproducts.category, ',')) f;
Data Modeling ใน Snowflake เบื้องต้น

การนำ 1NF ไปใช้

  • ขั้นตอนที่ 2.4: เลือกหมายเลขแถวเพื่อกำหนด identifier ที่ไม่ซ้ำกัน
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;
Data Modeling ใน Snowflake เบื้องต้น

การนำ 1NF ไปใช้

  • ขั้นตอนที่ 2.4: รวมข้อมูลเพื่อสร้างค่าหมวดหมู่ที่ไม่ซ้ำกัน
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);
Data Modeling ใน Snowflake เบื้องต้น

สู่การ normalize ข้อมูล

ข้อมูลสินค้าทั้งหมด จาก UNF ถึง 1NF

Data Modeling ใน Snowflake เบื้องต้น

สรุปคำศัพท์และฟังก์ชัน

  • การ normalize ข้อมูล: กระบวนการจัดโครงสร้างข้อมูลเพื่อลดความซ้ำซ้อนและการพึ่งพากัน
  • Normal forms: แนวทางในการนำ data normalization ไปใช้
  • First normal form (1NF): กำหนดให้แต่ละคอลัมน์ในเอนทิตีเก็บค่าอะตอมิกที่ไม่ซ้ำกัน
  • INSERT INTO: คำสั่ง SQL สำหรับแทรกแถวใหม่เข้าไปในตาราง
  • TRIM: ฟังก์ชัน SQL สำหรับลบช่องว่างที่ต้นและท้ายของค่า
  • LATERAL FLATTEN(INPUT => SPLIT()): ฟังก์ชัน Snowflake สำหรับแยกค่าออกเป็นแถว
  • ROW_NUMBER() OVER (ORDER BY): ฟังก์ชัน SQL สำหรับสร้างหมายเลขลำดับ
  • GROUP BY: clause ใน SQL สำหรับรวมข้อมูลที่มีค่าเหมือนกัน
Data Modeling ใน Snowflake เบื้องต้น

ภาพรวมฟังก์ชัน

-- 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);
Data Modeling ใน Snowflake เบื้องต้น

มาฝึกกันเถอะ!

Data Modeling ใน Snowflake เบื้องต้น

Preparing Video For Download...