ฐานข้อมูลแบบ Normalized และ Denormalized

การออกแบบฐานข้อมูล

Lis Sulmont

Curriculum Manager

กลับมาที่ตัวอย่างร้านหนังสือของเรา

Denormalized: Star Schema

$$

Normalized: Snowflake Schema

$$

การออกแบบฐานข้อมูล

คิวรีแบบ Denormalized

เป้าหมาย: หาจำนวนหนังสือของ Octavia E. Butler ทั้งหมดที่ขายได้ในเมือง Vancouver ช่วง Q4 ปี 2018

  SELECT SUM(quantity) FROM fact_booksales
    -- Join to get city
    INNER JOIN dim_store_star on fact_booksales.store_id = dim_store_star.store_id
    -- Join to get author
    INNER JOIN dim_book_star on fact_booksales.book_id = dim_book_star.book_id
    -- Join to get year and quarter
    INNER JOIN dim_time_star on fact_booksales.time_id = dim_time_star.time_id
  WHERE 
    dim_store_star.city = 'Vancouver' AND dim_book_star.author = 'Octavia E. Butler' AND
    dim_time_star.year = 2018 AND dim_time_star.quarter = 4;
7600

Join ทั้งหมด 3 ครั้ง

การออกแบบฐานข้อมูล

คิวรีแบบ Normalized

SELECT
  SUM(fact_booksales.quantity)
FROM
  fact_booksales
  -- Join to get city
  INNER JOIN dim_store_sf ON fact_booksales.store_id = dim_store_sf.store_id
  INNER JOIN dim_city_sf ON dim_store_sf.city_id = dim_city_sf.city_id
  -- Join to get author
  INNER JOIN dim_book_sf ON fact_booksales.book_id = dim_book_sf.book_id
  INNER JOIN dim_author_sf ON dim_book_sf.author_id = dim_author_sf.author_id
  -- Join to get year and quarter
  INNER JOIN dim_time_sf ON fact_booksales.time_id = dim_time_sf.time_id
  INNER JOIN dim_month_sf ON dim_time_sf.month_id = dim_month_sf.month_id
  INNER JOIN dim_quarter_sf ON dim_month_sf.quarter_id =  dim_quarter_sf.quarter_id
  INNER JOIN dim_year_sf ON dim_quarter_sf.year_id = dim_year_sf.year_id
การออกแบบฐานข้อมูล

คิวรีแบบ Normalized (ต่อ)

WHERE
  dim_city_sf.city = `Vancouver`
  AND 
  dim_author_sf.author = `Octavia E. Butler`
  AND
  dim_year_sf.year = 2018 AND dim_quarter_sf.quarter = 4; 
sum
7600

Join ทั้งหมด 8 ครั้ง

แล้วทำไมเราถึงต้องการ Normalize ฐานข้อมูล?

การออกแบบฐานข้อมูล

Normalization ช่วยประหยัดพื้นที่

ฐานข้อมูลแบบ Denormalized ทำให้เกิดข้อมูลซ้ำซ้อน

การออกแบบฐานข้อมูล

Normalization ช่วยประหยัดพื้นที่

Normalization ช่วยกำจัดข้อมูลซ้ำซ้อน

การออกแบบฐานข้อมูล

Normalization ช่วยให้ข้อมูลมีความถูกต้องมากขึ้น

$$

1. บังคับใช้ความสอดคล้องของข้อมูล

ต้องปฏิบัติตามรูปแบบการตั้งชื่อเนื่องจาก referential integrity เช่น 'California' ไม่ใช่ 'CA' หรือ 'california'

2. อัปเดต ลบ และเพิ่มข้อมูลได้อย่างปลอดภัยกว่า

ข้อมูลซ้ำซ้อนน้อยลง = แก้ไขระเบียนน้อยลง

3. ออกแบบใหม่ได้ง่ายขึ้นด้วยการขยาย

ตารางขนาดเล็กขยายได้ง่ายกว่าตารางขนาดใหญ่

การออกแบบฐานข้อมูล

การทำ Database Normalization

ข้อดี

  • Normalization กำจัดข้อมูลซ้ำซ้อน: ประหยัดพื้นที่จัดเก็บ

  • ข้อมูลมีความถูกต้องและสอดคล้องมากขึ้น

ข้อเสีย

  • คิวรีที่ซับซ้อนใช้ CPU มากขึ้น
การออกแบบฐานข้อมูล

จำ OLTP และ OLAP ได้ไหม?

OLTP

เช่น ฐานข้อมูลเชิงปฏิบัติการ

โดยทั่วไปมีการ Normalize สูง

  • เน้นการเขียนข้อมูลเป็นหลัก
  • ให้ความสำคัญกับการเพิ่มข้อมูลที่รวดเร็วและปลอดภัย

OLAP

เช่น Data Warehouse

โดยทั่วไปมีการ Normalize น้อยกว่า

  • เน้นการอ่านข้อมูลเป็นหลัก
  • ให้ความสำคัญกับคิวรีที่รวดเร็วสำหรับการวิเคราะห์
การออกแบบฐานข้อมูล

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

การออกแบบฐานข้อมูล

Preparing Video For Download...