การออกแบบฐานข้อมูล
Lis Sulmont
Curriculum Manager
$$

$$

เป้าหมาย: หาจำนวนหนังสือของ 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 ครั้ง
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
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 ฐานข้อมูล?

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

Normalization ช่วยกำจัดข้อมูลซ้ำซ้อน
$$
ต้องปฏิบัติตามรูปแบบการตั้งชื่อเนื่องจาก referential integrity เช่น 'California' ไม่ใช่ 'CA' หรือ 'california'
ข้อมูลซ้ำซ้อนน้อยลง = แก้ไขระเบียนน้อยลง
ตารางขนาดเล็กขยายได้ง่ายกว่าตารางขนาดใหญ่
Normalization กำจัดข้อมูลซ้ำซ้อน: ประหยัดพื้นที่จัดเก็บ
ข้อมูลมีความถูกต้องและสอดคล้องมากขึ้น
เช่น ฐานข้อมูลเชิงปฏิบัติการ
โดยทั่วไปมีการ Normalize สูง
เช่น Data Warehouse
โดยทั่วไปมีการ Normalize น้อยกว่า
การออกแบบฐานข้อมูล