เอสซีดีประเภทที่ 2
เอสซีดีประเภททที่ 2 มีชื่อเรียกอีกอย่างว่า “เพิ่มแถว” หรือ “Add a row” หลักการคือ เมื่อเอนติตี้มีการเปลี่ยนแปลงข้อมูล ก็จะทำการเพิ่มแถวข้อมูลพร้อมข้อมูลใหม่ และเซอโรเกตคีย์ใหม่ โดยเอสซีดีประเภทนี้มักมีคอลัมน์พิเศษเพื่อใช้บอกด้วยว่าแถวข้อมูลนี้เป็นแถวข้อมูลปัจจุบันหรือไม่
ตัวอย่าง
ข้อมูลก่อนการเปลี่ยนแปลง
ถ้าให้ข้อมูลดั้งเดิมเป็นดังข้อมูลข้างล่าง ให้เลขข้อมูลลูกค้า และ รหัสลูกค้า ในเทเบิ้ลลูกค้าเป็นเซอโรเกตคีย์และเนเชอรัลคีย์ตามลำดับ และให้เทเบิ้ลลูกค้าใช้หลักเอสซีดีประเภทที่ 2
จากข้อมูลก่อน2 “คอลัมน์เริ่มการใช้งาน” “จบการใช้งาน” และ “ปัจจุบันหรือไม่” เป็นคอลัมน์พิเศษเพื่อบ่งบอกว่าข้อมูลลูกค้าในแถวนั้นเป็นข้อมูลล่าสุดหรือเป็นข้อมูลปัจจุบันหรือไม่ ในการใช้งานบนโลกแห่งความเป็นจริง มักเลือกใช้อย่างใดอย่างหนึ่งระหว่าง คอลัมน์คู่(เริ่มใช้งานและจบการใช้งาน) หรือคอลัมน์เดี่ยว(ปัจจุบันหรือไม่) เพราะมีความซ้ำซ้อนในการใช้งานอยู่ แต่ในบทความสอนครั้งนี้ ผู้เขียนขี้เกียจเขียนแยกเทเบิ้ลกัน ก็เลยใส่รวมกันไปเลย
| ข้อมูลการขาย (ข้อมูลก่อน1) | ||||
|---|---|---|---|---|
| รหัสการขาย | วันเวลาซื้อขาย | เลขข้อมูลลูกค้า | เลขข้อมูลสินค้า | จำนวนสินค้าที่ซื้อ |
| O001 | 20220701 | 1 | 1 | 2 |
| O002 | 20220702 | 2 | 2 | 5 |
| O003 | 20220703 | 1 | 2 | 3 |
| ลูกค้า (ข้อมูลก่อน2) | ||||||
|---|---|---|---|---|---|---|
| เลขข้อมูลลูกค้า SK | รหัสลูกค้า NK | ชื่อลูกค้า | จังหวัดที่อยู่อาศัย | เริ่มการใช้งาน | จบการใช้งาน | ปัจจุบันหรือไม่ |
| 1 | C001 | ทองดี แน่นะ | กรุงเทพ | 20220101 | ใช่ | |
| 2 | C002 | เงินทอง ของจริง | กรุงเทพ | 20220101 | ใช่ | |
รายงานของข้อมูลก่อนการเปลี่ยนแปลง
สมมติว่าต้องออกรายงานสองรายงาน ได้แก่ ยอดรวมจำนวนสินค้าต่อจังหวัดของลูกค้า และยอดรวมจำนวนสินค้าต่อชื่อลูกค้า ได้รายงานดังด้านล่าง
| รายงานยอดรวมจำนวนสินค้าต่อจังหวัดของลูกค้า (รายงานก่อน1) | |
|---|---|
| จังหวัดลูกค้า | ยอดรวมจำนวนสินค้า |
| กรุงเทพ | 10 |
| รายงานยอดรวมจำนวนสินค้าต่อชื่อลูกค้า (รายงานก่อน2) | |
|---|---|
| ชื่อลูกค้า | ยอดรวมจำนวนสินค้า |
| ทองดี แน่นะ | 5 |
| เงินทอง ของจริง | 5 |
ข้อมูลหลังการเปลี่ยนแปลง
วันที่ 1 มกราคม 2023 นายทองดี แน่นะ ย้ายจังหวัดจากกรุงเทพไปเชียงรายและได้เปลี่ยนชื่อจากทองดี แน่นะ เป็นทองดี แน่นอน ผลที่ได้จะเป็นดังข้างล่าง
สิ่งที่เกิดขึ้นกับข้อมูลหลัง2 คือ ทองดี แน่นะ ที่ใช้เลขข้อมูลลูกค้าหมายเลข 1 (แถวแรก แถบแดง) จะไม่ใช่ข้อมูลที่เป็นปัจจุบันอีกต่อไป และเพื่อบอกผู้ใช้ว่าแถวข้อมูลนี้ไม่ใช่ข้อมูลปัจจุบันอีกแล้ว จึงต้องมีการใส่ข้อมูลวันที่ 1 มกราคม 2023 ซึ่งเป็นจุดสิ้นสุดของข้อมูลแถวนี้ลงในคอลัมน์”จบการใช้งาน” และเปลี่ยนจากใช่ไปเป็นไม่ในคอลัมน์”ปัจจุบันหรือไม่”
ส่วนข้อมูลใหม่ของทองดี จะถูกใส่เพิ่มเป็นแถวใหม่ (แถบน้ำเงิน) ด้วยข้อมูลใหม่ซึ่งในที่นี้คือคอลัมน์”จังหวัดที่อยู่อาศัย”เป็นเชียงราย พร้อม”เลขข้อมูลลูกค้า”ใหม่ซึ่งเป็นเซอโรเกตคีย์เป็นเลขใหม่ที่ไม่เคยมีมาก่อน ในที่นี้คือหมายเลข 3 โดยที่รหัสลูกค้าซึ่งเป็นเนเชอรัลคีย์ต้องใช้ C001 เหมือนเดิมเพราะแถวใหม่นี้คือทองดี คนเดิม และเพื่อบอกผู้ใช้ว่าแถวใหม่นี้คือข้อมูลปัจจุบันของทองดี จึงมีการใส่ข้อมูล”เริ่มการใช้งาน” และไม่ใส่”จบการใช้งาน” (เพราะมันยังไม่จบ) และใส่ใช่ลงในคอลัมน์”ปัจจุบันหรือไม่”
| ข้อมูลการขาย (ข้อมูลหลัง1) | ||||
|---|---|---|---|---|
| รหัสการขาย | วันเวลาซื้อขาย | เลขข้อมูลลูกค้า | เลขข้อมูลสินค้า | จำนวนสินค้าที่ซื้อ |
| O001 | 20220701 | 1 | 1 | 2 |
| O002 | 20220702 | 2 | 2 | 5 |
| O003 | 20220703 | 1 | 2 | 3 |
| ลูกค้า (ข้อมูลหลัง2) | ||||||
|---|---|---|---|---|---|---|
| เลขข้อมูลลูกค้า SK | รหัสลูกค้า NK | ชื่อลูกค้า | จังหวัดที่อยู่อาศัย | เริ่มการใช้งาน | จบการใช้งาน | ปัจจุบันหรือไม่ |
| 1 | C001 | ทองดี แน่นะ | กรุงเทพ | 20220101 | 20230101 | ไม่ |
| 2 | C002 | เงินทอง ของจริง | กรุงเทพ | 20220101 | ใช่ | |
| 3 | C001 | ทองดี แน่นอน | เชียงราย | 20230101 | ใช่ | |
รายงานของข้อมูลหลังการเปลี่ยนแปลง
สมมติว่าต้องออกรายงานสองรายงาน ได้แก่ ยอดรวมจำนวนสินค้าต่อจังหวัดของลูกค้า และยอดรวมจำนวนสินค้าต่อชื่อลูกค้า ได้รายงานดังด้านล่าง
เมื่อนำรายงานก่อน1และรายงานก่อน2 มาเปรียบเทียบกับ รายงานหลัง1และรายงานหลัง2 จะพบว่าทั้งสองรายงานเหมือนกัน การเปลี่ยนเปลงข้อมูลลูกค้าไม่ได้ทำให้รายงานมีการเปลี่ยนแปลง ซึ่งเป็นสิ่งที่ควรจะเป็น เพราะ การเปลี่ยนแปลงข้อมูลลูกค้า ไม่ได้ทำให้มีการซื้อขายมากขึ้นหรือน้อยลง ยอดที่เกิดขึ้นในรายงานก็ควรจะต้องเหมือนเดิม
| รายงานยอดรวมจำนวนสินค้าต่อจังหวัดของลูกค้า (รายงานหลัง1) | |
|---|---|
| จังหวัดลูกค้า | ยอดรวมจำนวนสินค้า |
| กรุงเทพ | 10 |
| รายงานยอดรวมจำนวนสินค้าต่อชื่อลูกค้า (รายงานหลัง2) | |
|---|---|
| ชื่อลูกค้า | ยอดรวมจำนวนสินค้า |
| ทองดี แน่นะ | 5 |
| เงินทอง ของจริง | 5 |
การซื้อขายหลังการเปลี่ยนแปลง
วันที่ 5 มกราคม 2023 นายทองดี ได้เข้าไปซื้อของ ผลที่ได้จะเป็นไปดังข้อมูลด้านล่าง
ในเทเบิ้ลข้อมูลหลังซื้อขาย1 แถวใหม่จะเกิดขึ้นมาจากการซื้อของของทองดี แน่นะ แต่เลขข้อมูลลูกค้าจะไม่ใช่เลข 1 อีกต่อไปเพราะข้อมูลหมายเลข 1 ไม่ใช่ข้อมูลปัจจุบัน ต้องใช้เลข 3 ซึ่งเป็นข้อมูลปัจจุบันของทองดี
| ข้อมูลการขาย (ข้อมูลหลังซื้อขาย1) | ||||
|---|---|---|---|---|
| รหัสการขาย | วันเวลาซื้อขาย | เลขข้อมูลลูกค้า | เลขข้อมูลสินค้า | จำนวนสินค้าที่ซื้อ |
| O001 | 20220701 | 1 | 1 | 2 |
| O002 | 20220702 | 2 | 2 | 5 |
| O003 | 20220703 | 1 | 2 | 3 |
| O004 | 20230105 | 3 | 1 | 2 |
| ลูกค้า (ข้อมูลหลังซื้อขาย2) | ||||||
|---|---|---|---|---|---|---|
| เลขข้อมูลลูกค้า SK | รหัสลูกค้า NK | ชื่อลูกค้า | จังหวัดที่อยู่อาศัย | เริ่มการใช้งาน | จบการใช้งาน | ปัจจุบันหรือไม่ |
| 1 | C001 | ทองดี แน่นะ | กรุงเทพ | 20220101 | 20230101 | ไม่ |
| 2 | C002 | เงินทอง ของจริง | กรุงเทพ | 20220101 | ใช่ | |
| 3 | C001 | ทองดี แน่นอน | เชียงราย | 20230101 | ใช่ | |
รายงานของข้อมูลหลังการซื้อขาย
สมมติว่าต้องออกรายงานสองรายงาน ได้แก่ ยอดรวมจำนวนสินค้าต่อจังหวัดของลูกค้า และยอดรวมจำนวนสินค้าต่อชื่อลูกค้า ได้รายงานดังด้านล่าง
รายงานหลังซื้อขาย1 จะมีข้อมูลเชียงรายเกิดขึ้นมาใหม่ซึ่งเกิดจากการซื้อขายของทองดี แน่นอนที่อยู่เชียงราย รายงานนี้จึงไม่มีสิงผิดปกติ ส่วนรายงานหลังซื้อขาย2 จะเห็นชื่อลูกค้า ทองดี แน่นะ และ ทองดี แน่นอน หากผู้ใช้เห็นรายงานนี้ก็อาจเข้าใจผิดคิดว่า ทองดี แน่นะ กับ ทองดี แน่นอน เป็นคนละคนกัน ทั้งที่ความจริงเป็นคนเดียวกัน
| รายงานยอดรวมจำนวนสินค้าต่อจังหวัดของลูกค้า (รายงานหลังซื้อขาย1) | |
|---|---|
| จังหวัดลูกค้า | ยอดรวมจำนวนสินค้า |
| กรุงเทพ | 10 |
| เชียงราย | 2 |
| รายงานยอดรวมจำนวนสินค้าต่อชื่อลูกค้า (รายงานหลังซื้อขาย2) | |
|---|---|
| ชื่อลูกค้า | ยอดรวมจำนวนสินค้า |
| ทองดี แน่นะ | 5 |
| เงินทอง ของจริง | 5 |
| ทองดี แน่นอน | 2 |
ข้อดี
1. การเปลี่ยนแปลงไดเมนชัน ไม่ส่งผลกระทบกับข้อมูลเดิมของรายงาน
2. ผู้ใช้สามารถเห็นการเปลี่ยนแปลงของเอนติตี้ย้อนหลังตั้งแต่ปัจจุบันไปยังจุดเริ่มต้น
ข้อเสีย
1. ไดเมนชันจะมีขนาดใหญ่และข้อมูลซ้ำซ้อนมากถ้ามีการเปลี่ยนแปลงไดเมนชันบ่อยครั้ง
2. รายงานที่ได้อาจสร้างความสับสนให้กับผู้อ่าน โดยเฉพาะถ้าในรายงานมีสิ่งที่ใช้อ้างอิงถึงเอนติตี้อย่างชื่อ เป็นต้น
เหมาะกับไดเมนชันแบบใด
จากความเห็นของผู้เขียน เอสซีดีประเภทที่ 2 เหมาะกับไดเมนชันเกือบทุกรูปแบบ ยกเว้นไดเมนชันที่ทุกคอลัมน์ใช้อ้างอิงเอนติตี้โดยตรง ซึ่งแบบนั้นจะเหมาะกับเอสซีดีประเภทที่ 1 มากกว่า
