"ในโลกของข้อมูล สิ่งเดียวที่คงที่คือการเปลี่ยนแปลง... เราจะเก็บประวัติศาสตร์อย่างไรไม่ให้ข้อมูลผิดเพี้ยน?"
คือเทคนิคการจัดการมิติที่มีการเปลี่ยนแปลงค่าของแอตทริบิวต์เมื่อเวลาผ่านไป
ข้อมูลเก่า:
สมชาย - กทม.
ข้อมูลใหม่:
สมชาย - **เชียงใหม่**
**คุณสมบัติ:** เขียนทับค่าเดิมทันที ไม่เก็บประวัติ
**ข้อควรระวัง:** ยอดขายเก่าใน กทม. จะถูกเปลี่ยนเป็น เชียงใหม่ ทั้งหมดในรายงาน!
*ใช้สำหรับ: การแก้ไขคำสะกดผิด หรือข้อมูลที่ไม่ต้องการเก็บประวัติ*
| Surrogate Key | Customer_ID (NK) | Province | Effective_Date | Current_Flag |
|---|---|---|---|---|
| 101 | C-001 | กทม. | 2022-01-01 | N |
| 505 | C-001 | เชียงใหม่ | 2024-06-13 | Y |
**มาตรฐานทองคำ:** แบ่งส่วนประวัติศาสตร์ได้อย่างสมบูรณ์ (Perfectly Partitions History)
เน้นการเปรียบเทียบระหว่าง "ค่าปัจจุบัน" และ "ค่าก่อนหน้า" (Current vs. Previous)
Customer_Name
สมชาย
Current_Province
เชียงใหม่
Previous_Province
กทม.
"ช่วยให้มองเห็น 'ความจริงสองด้าน' ในแถวเดียว แต่เก็บประวัติได้จำกัด"
โจทย์: จงระบุว่าสถานการณ์ต่อไปนี้ควรใช้ SCD ประเภทใด?
**แก้คำผิด:** เพราะข้อมูลเดิมผิดพลาดทางเทคนิค ไม่ใช่การเปลี่ยนแปลงทางธุรกิจ
**ย้ายที่อยู่:** เพื่อ "Partition History" ให้ยอดขายเก่าและใหม่ผูกกับสถานที่ที่ถูกต้อง ณ เวลานั้น
**เทียบเขตเก่า/ใหม่:** เพื่อสร้าง "Alternate Realities" ให้วิเคราะห์เปรียบเทียบในแถวเดียวกันได้
"มิติที่ไม่มีตารางเป็นของตัวเอง แต่อยู่ในตาราง Fact"
รวบรวม Flags และ Text Indicators ที่กระจัดกระจายมารวมไว้ที่เดียว
"ช่วยลดจำนวนคอลัมน์ Foreign Key ในตาราง Fact ได้มหาศาล"
ภารกิจ Phase 1 (ต่อ):
ในโครงการ E-Commerce ของคุณ มีแฟล็ก 3 ตัวดังนี้:
คำถาม:
1. จงระบุจำนวนแถวทั้งหมดที่อาจเกิดขึ้นใน Junk Dimension นี้ (Cross Join)
2. วาดโครงสร้างตาราง Junk Dimension เบื้องต้น
2 (Payment) x 2 (Delivery) x 2 (Gift) = **8 แถว**
"ตาราง Junk จะเก็บทุกความเป็นไปได้ของการรวมกันของ Flags"
| Profile_Key (SK) | Payment | Delivery | Gift? |
|---|---|---|---|
| 1 | Paid | Standard | Yes |
| 2 | Paid | Standard | No |
| ... | ... | ... | ... |
AI เอเจนต์สมัยใหม่ (เช่น AV-SQL) มีบทบาทสำคัญในการจัดการ SCD: