Dạng chuẩn thứ nhất

Nhập môn Mô hình dữ liệu trong Snowflake

Nuno Rocha

Director of Engineering

Quy trình chuẩn hóa dữ liệu

  • Chuẩn hóa dữ liệu: Quy trình nhiều bước để cấu trúc dữ liệu, giảm trùng lặp và phụ thuộc

Các bước sau UNF mờ đi

Nhập môn Mô hình dữ liệu trong Snowflake

Quy trình chuẩn hóa dữ liệu (1)

  • Chuẩn hóa dữ liệu: Quy trình nhiều bước để cấu trúc dữ liệu, giảm trùng lặp và phụ thuộc

Các bước từ UNF đến 1NF

Nhập môn Mô hình dữ liệu trong Snowflake

Quy trình chuẩn hóa dữ liệu (2)

  • Chuẩn hóa dữ liệu: Quy trình nhiều bước để cấu trúc dữ liệu, giảm trùng lặp và phụ thuộc

Các bước từ UNF đến 3NF

Nhập môn Mô hình dữ liệu trong Snowflake

Quy trình chuẩn hóa dữ liệu (3)

  • Chuẩn hóa dữ liệu: Quy trình nhiều bước để cấu trúc dữ liệu, giảm trùng lặp và phụ thuộc

Các bước từ UNF đến 3NF

Nhập môn Mô hình dữ liệu trong Snowflake

Dạng chuẩn thứ nhất

  • Dạng chuẩn thứ nhất (1NF): Mỗi cột trong thực thể chỉ chứa giá trị nguyên tử, duy nhất

Bảng allproducts với cột category được tô sáng

Nhập môn Mô hình dữ liệu trong Snowflake

Dạng chuẩn 1 (1)

  • Dữ liệu danh mục ở UNF: Danh mục L không tách riêng nên không thể cập nhật giá trị

Danh sách mọi sản phẩm chứa L

Nhập môn Mô hình dữ liệu trong Snowflake

Dạng chuẩn 1 (2)

  • Bước kiểm tra: Truy vấn giá trị duy nhất để đánh giá tuân thủ 1NF.
SELECT DISTINCT category 
FROM allproducts;

Danh sách danh mục

Nhập môn Mô hình dữ liệu trong Snowflake

Hàm Snowflake cho 1NF

  • TRIM
  • LATERAL & FLATTEN
  • SPLIT
Nhập môn Mô hình dữ liệu trong Snowflake

Hàm Snowflake cho 1NF

  • TRIM: Xóa khoảng trắng ở đầu và cuối giá trị
SELECT TRIM(category)
FROM allproducts;

Hàm TRIM trong category

Nhập môn Mô hình dữ liệu trong Snowflake

Hàm Snowflake cho 1NF

  • TRIM: Xóa khoảng trắng ở đầu và cuối giá trị.
  • LATERAL & FLATTEN: Xem danh sách giá trị như một bảng các mục riêng lẻ.
  • SPLIT: Tách giá trị theo dấu phân cách.
SELECT TRIM(f.value)
FROM allproducts,
LATERAL FLATTEN(INPUT => SPLIT(allproducts.category, ',')) f;

LATERAL, FLATTEN và SPLIT trong category

Nhập môn Mô hình dữ liệu trong Snowflake

Áp dụng 1NF

  • Bước 1: Tạo thực thể mới để chuyển các giá trị thuộc tính từ UNF
CREATE OR REPLACE TABLE categories (
    category_id NUMBER(10,0) PRIMARY KEY,
    category VARCHAR(255)
);
Nhập môn Mô hình dữ liệu trong Snowflake

Áp dụng 1NF

  • Bước 2.1: Nạp dữ liệu vào thực thể mới từ thực thể ban đầu chưa chuẩn hóa
  • INSERT INTO: Lệnh SQL chèn dòng mới vào bảng.
INSERT INTO categories (category_id, category)
___;
Nhập môn Mô hình dữ liệu trong Snowflake

Áp dụng 1NF

  • Bước 2.2: Chọn dữ liệu từ allproducts, thực thể ban đầu chưa chuẩn hóa
INSERT INTO categories (category_id, category)
SELECT 
    ___,
    ___
FROM allproducts;
Nhập môn Mô hình dữ liệu trong Snowflake

Áp dụng 1NF

  • Bước 2.3: Dùng hàm để tách giá trị trong một thuộc tính
INSERT INTO categories (category_id, category)
SELECT 
    ___, 
    TRIM(f.value)
FROM allproducts,
LATERAL FLATTEN(INPUT => SPLIT(allproducts.category, ',')) f;
Nhập môn Mô hình dữ liệu trong Snowflake

Áp dụng 1NF

  • Bước 2.4: Chọn số thứ tự dòng làm định danh duy nhất
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;
Nhập môn Mô hình dữ liệu trong Snowflake

Áp dụng 1NF

  • Bước 2.4: Gộp dữ liệu để tạo giá trị danh mục duy nhất
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);
Nhập môn Mô hình dữ liệu trong Snowflake

Hướng tới chuẩn hóa dữ liệu

Dữ liệu allproducts, từ UNF đến 1NF

Nhập môn Mô hình dữ liệu trong Snowflake

Tổng quan thuật ngữ và hàm

  • Chuẩn hóa dữ liệu: Quy trình cấu trúc dữ liệu để giảm trùng lặp và phụ thuộc
  • Dạng chuẩn: Hướng dẫn áp dụng chuẩn hóa dữ liệu
  • Dạng chuẩn thứ nhất (1NF): Mỗi cột chứa giá trị nguyên tử, duy nhất
  • INSERT INTO: Lệnh SQL để chèn dòng mới
  • TRIM: Hàm SQL xóa khoảng trắng đầu-cuối
  • LATERAL FLATTEN(INPUT => SPLIT()): Hàm Snowflake tách giá trị thành nhiều dòng
  • ROW_NUMBER() OVER (ORDER BY): Hàm SQL tạo số thứ tự tuần tự
  • GROUP BY: Mệnh đề SQL gộp dữ liệu cùng giá trị
Nhập môn Mô hình dữ liệu trong Snowflake

Tổng quan hàm

-- Nạp một thực thể bằng dữ liệu từ kết quả truy vấn
INSERT INTO table_name (column_name, other_columns)
SELECT 
    -- Tạo giá trị duy nhất bằng số thứ tự dòng
    ROW_NUMBER() OVER (ORDER BY TRIM(alias.value)),
    TRIM(alias.value)
FROM another_table,
-- Tách giá trị văn bản theo dấu phân cách 
LATERAL FLATTEN(INPUT => SPLIT(another_table.column_name, 'delimiter_value'))alias
-- Gộp dữ liệu để đảm bảo giá trị duy nhất
GROUP BY TRIM(alias.value);
Nhập môn Mô hình dữ liệu trong Snowflake

Ayo berlatih!

Nhập môn Mô hình dữ liệu trong Snowflake

Preparing Video For Download...