หลักการออกแบบฐานข้อมูล
การออกแบบฐานข้อมูล
หลักการออกแบบฐานข้อมูล
การออกแบบฐานข้อมูลเป็นขั้นตอนที่สำคัญมาก ถ้าทำอย่างรอบคอบและถูกต้องจะทำให้ระบบฐานข้อมูลของงานนั้นมีความครบถ้วน ไม่ซ้ำซ้อน และมีความถูกต้อง มีผู้กล่าวว่าการออกแบบฐานข้อมูลเป็นทั้งศาสตร์และศิลป์ เพราะผู้ออกแบบฐานข้อมูลจะต้องอาศัยเทคนิคในการออกแบบประกอบกับประสบการณ์ ช่วยในการออกแบบฐานข้อมูล ในบทนี้เราจะเริ่มเรียนรู้เทคนิคในการออกแบบต่าง ๆ โดยเริ่มจากการศึกษาแนวคิดเกี่ยวกับการออกแบบฐานข้อมูล ได้แก่ แนวคิดเรื่องพจนานุกรมข้อมูล การขึ้นต่อกับแบบฟังก์ชั่น (Functional Dependencies) ซึ่งเป็นการสังเกตความสัมพันธ์ระหว่างค่าของแอตทริบิวต์ในแต่ละตารางการขึ้นต่อกันชนิดสำคัญและไม่สำคัญ สมบัติของเซตของการขึ้นต่อกัน กฎการอนุมาน เซตของการขึ้นต่อกันแบบลดรูปไม่ได้ แผนภาพการขึ้นต่อกัน (FD Diagram) และการแยกตารางย่อยออกไปโดยไม่สูญเสียคุณสมบัติที่มีอยู่เดิม (Nonloss Decomposition)
กระบวนการออกแบบ
กระบวนการออกแบบประกอบด้วยขั้นตอนต่อไปนี้
ตัวอย่าง
ตัวอย่าง จากตาราง SCP ซึ่งมีการขึ้นต่อกัน คือ
{SNO, PNO} g QTY
SNO g CITY
เราสามรถแสดงด้วยแผนภาพการขึ้นต่อกันเป็นดังนี้
(C.J. Date, 2000)

หรือแสดงด้วยแผนภาพการขึ้นต่อกันอย่างง่าย (ดัดแปลงจาก Kendall and Kendall, 1999 และ สุวัตร ปัทมวรคุณ, 2544) เป็นดังนี้

ตัวอย่าง จากตาราง P ซึ่งมีการขึ้นต่อกัน คือ
PNO g PNAME
PNO g COLOR
PNO g WEIGHT
PNO g CITY
เราสามารถแสดงด้วยแผนภาพขึ้นต่อกันเป็นดังนี้

หรือแสดงด้วยแผนภาพการขึ้นต่อกันอย่างง่ายเป็นดังนี้

สมบัติของเซตของการขึ้นต่อกัน (Closure of a Set of Dependencies) คือ เซตของการขึ้นต่อกันทั้งหมดที่ถูกบ่งชี้โดยเซต S ของการขึ้นต่อกัน ซึ่งสมบัตินี้จะแทนด้วย S+ (The set of all FDs that are implied by a given set S of FDs is called the closure of S, written S+ ) กล่าวคือ หากการขึ้นต่อกันข้อใดก็ตามเป็นผลมาจากการบ่งชี้หรือการระบุของการขึ้นต่อกันในเซต S แล้ว เราถือว่าการขึ้นต่อกันทุกข้อดังกล่าวอยู่ในเซต S+ ซึ่งก็คือ สมบัติปิดของเซตของการขึ้นต่อกันนั่งเอง ดังภาพ
ในภาพข้างบนแสดงให้เห็นว่า เซต S มีการขึ้นต่อกันอยู่ 2 นิพจน์คือ FD1 และ FD2 โดยที่ FD1 บ่งชี้ว่ามีการขึ้นต่อกันอย่าง FD11 และ FD2 บ่งชี้ว่ามีการขึ้นต่อกันอย่าง FD21 และ FD22 ดังนั้น FD11, FD21 และ FD22 จะจัดอยู่ในเซต S+ ซึ่งเป็นสมบัติของเซต S ตัวอย่างจากตารางที่ผ่านมา เช่น การขึ้นต่อกันที่กำหนดว่า
{SNO, PNO} g {CITY, QTY}
จะบ่งชี้ว่าทำให้มี การขึ้นต่อกันอีกสองนิพจน์ซึ่งเป็นสมบัติปิดของมัน ได้แก่
{SNO, PNO} g CITY
{SNO, PNO} g QTY
A g BC
B g E
CD g EF
จากแสดงว่า การขึ้นต่อกัน FD – AD g F เป็นสมาชิกของสมบัติของเซตนี้
วิธีทำ
1. A g BC (กำหนดให้)
2. A g C (กฎการแยกส่วน)
3. AD g CD (กฎเสริม)
4. CD g EF (กำหนดให้)
5. AD g F (กฎการแยกส่วน)
• ถ้าการขึ้นต่อกันทุกนิพจน์ที่ถูกระบุโดย S1 ได้มาจากการระบุโดย S2 อีกทอดหนึ่ง เช่น ถ้า S1+ เป็นสับเซตของ S2+ แล้ว เรากล่าวว่า S2 เป็นตัวครอบคลุม (Cover) สำหรับ S1 หรือเรียกสั้น ๆ ว่า S2 คลุม S1
• ถ้า S2 เป็นตัวครอบคลุมสำหรับ S1 และ S1 ก็เป็นตัวครอบคลุมสำหรับ S2 ด้วยแล้วเราเรียกว่า S1 และ S2 เท่าเทียมกัน (S1 and S2 are equivalent.) เช่น S1+=S2+ เซตการขึ้นต่อกัน S จะเป็นเซตที่ลดรูปไม่ได้ก็ต่อเมื่อมีสมบัติ 3 ประการ ดังนี้
1. ด้านขวาของการขึ้นต่อกันทุกตัวในเซต S เป็นแบบแอตทริบิวต์เดียว คือ เป็น เซตเดี่ยว (Singleton Set)
2. ด้านซ้ายมือของการขึ้นต่อกัน ถ้าเป็นเซตของคีย์หลักหลายตัวจริงจะต้องไม่สามารถตัดเอาตัวใดตัวหนึ่งออกไปได้เพราะ จะทำให้ไม่สมบูรณ์ (Left-irreducible) เช่น
{SNO, PNO, X} g QTY
3. การขึ้นต่อกันใด ๆ ในเซต S จะตัดหรือลดเอาตัวใดตัวหนึ่งออกไป โดยความหมายไม่เปลี่ยนไม่ได้ กล่าวอีกนัยหนึ่ง หากเซตใดเป็นเซตที่ลดรูปไม่ได้แล้วย่อมหมายความว่าจะตัดเอาการขึ้นต่อกันนิพจน์ใดนิพจน์หนึ่งออกไม่ได้ มิฉะนั้นความหมายจะขาดหายไม่ครบถ้วน
ตัวอย่าง 1 ถ้าตาราง P มีการขึ้นต่อกันดังนี้ คือ
PNO g PNAME
PNO g COLOR
PNO g WEIGHT
PNO g CITY
วิธีคิด เซตของการขึ้นต่อกันข้างต้นเป็นเซตที่ลดรูปไม่ได้อีกแล้ว เพราะทางด้านขวาเป็นแอตทริบิวต์เดี่ยวในแต่ละบรรทัด ส่วนทางด้านซ้ายก็เป็นเช่นเดียวกันไม่สามารถตัดทอนได้อีก นอกจากนั้นการขึ้นต่อกันแต่ละนิพจน์ดังกล่าวก็ไม่สามารถตัดขึ้นบรรทัดใดได้ เพราะจะทำให้ความหมายเปลี่ยนสมบัติปิด
ตัวอย่างที่ 2 ถ้าตาราง P มีการขึ้นต่อกันดังนี้ คือ
PNO g {PNAME, COLOR}
PNO g WEIGHT
PNO g CITY
วิธีคิด เซตของการขึ้นต่อกันข้างต้นเป็นเซตที่ลดรูปได้อีก เพราะนิพจน์ของการขึ้นต่อกันในบรรทัดแรก มีนิพจน์ด้านขวาไม่เป็น Singleton Set
ตัวอย่างที่ 3 ถ้าตาราง P มีการขึ้นต่อกันดังนี้
{PNO, PNAME} g COLOR
PNO g PNAME
PNO g WEIGHT
PNO g CITY
วิธีคิด เซตของการขึ้นต่อกันข้างต้นเป็นเซตที่ลดรูปได้อีก เพราะนิพจน์ของการขึ้นต่อกันในบรรทัดแรกมีนิพจน์ด้านซ้ายไม่เป็น Singleton Set และเราสามารถตัด PNAME ออกไปจากนิพจน์ด้านซ้ายนั้นได้โดยสมบัติปิดไม่เปลี่ยนแปลงไป
ตัวอย่างที่ 4 ถ้าตาราง P มีการขึ้นต่อกันดังนี้ คือ
PNO g PNO
PNO g PNAME
PNO g COLOR
PNO g WEIGHT
PNO g CITY
วิธีคิด เซตของการขึ้นต่อกันข้างต้นเป็นเซตที่ลดรูปได้อีก เพราะนิพจน์ของการขึ้นต่อกันในบรรทัดแรกนั้นเราสามารถตัดทิ้งออกได้ทั้งบรรทัด โดยสมบัติปิดไม่เปลี่ยนแปลงไป
การพยายามสร้างเซตของการขึ้นต่อกันซึ่งลดรูปไม่ได้ขึ้นมานั้นก็เพื่อจะได้นำไปสร้างข้อกำหนดหรือข้อบังคับ (Constraint) ที่มีจำนวนน้อยที่สุดเพื่อประหยัดเวลา แรงงานโปรแกรมเมอร์ และพลังงานการทำงานของเครื่องคอมพิวเตอร์
การแยกตาราง (Decomposition) เป็นการทำ Projection อย่างหนึ่ง กล่าวคือ เป็นการดึงคอลัมน์ของข้อมูลเฉพาะบางคอลัมน์ออกมาจากตารางที่มีอยู่เดิม แล้วนำไปสร้างเป็นตารางใหม่ขึ้นมาหลายตารางตาความต้องการ ตัวอย่างเช่น ถ้าเดิมมีการออกแบบโดยกำหนดให้มีตาราง SCP พร้อมข้อมูล ดังนี้
SCP
จะพบว่ามีการขึ้นต่อกันเฉพาะที่สำคัญดังต่อไปนี้
{SNO, PNO} g QTY
SNO g CITY
(ในที่นี้ เราตัด {SNO, PNO} g CITY ทิ้งไปเพราะเป็นการขึ้นต่อกันที่ซ้ำซ้อนกับ SNO g CITY ทีมีอยู่แล้ว ตามหลักการของ การขึ้นต่อกันแบบด้านซ้ายลดรูปไม่ได้ หรือ Left-irreducible FDs)
จะเห็นได้ว่าตารางนี้มีการเก็บข้อมูลแต่ละทูเพิล (Tuple) เป็นค่าเดียว (Atomic) อยู่แล้ว กล่าวอีกนัยหนึ่งคือ อยู่ในรูปแบบปรกติระดับที่ 1 (Pirst Normal Form) แล้ว แต่ยังมีความไม่เรียบร้อยอยู่บางอย่าง คือ ยังเป็นการกำหนดการแบ่งตารางที่ไม่ดีนักเพราะเก็บข้อมูลหลายเรื่องไว้ในตารางเดียวกัน ซึ่งจะทำให้เกิดปัญหาการเก็บข้อมูลซ้ำซ้อน (Redundancy) และปัญหาความผิดปกติในการปรับปรุงข้อมูล (Update Anomaly) เมื่อทราบข้อบกพร่องดังนี้จึงจะต้องแก้ปัญหาโดยการแยกตาราง SCP นี้ย่อยออกเป็นสองตารางซึ่งมีทางเลือก ดังนี้
ทางเลือกที่ 1 จาก SCP (SNO, CITY, PNO, QTY) แยกเป็น
SC (SNO, CITY) และ
SP (SNO, PNO, QTY)
ทางเลือกที่ 2 จาก SCP (SNO, CITY, PNO, QTY) แยกเป็น
SPC (SNO, PNO, CITY) และ
SQ (SNO, QTY)
การจะเลือกทางใดนั้นต้องพิจารณาว่าหลังจากที่ทำการแยกตารางออกไปแล้ว เราสามารถทำย้อนกลับ คือ เอาตารางใหม่ทั้งสองตารางมารวมกัน (JOIN) เพื่อให้ได้ข้อมูลอย่างตารางเดิมได้หรือไม่ ถ้าไม่สามารถทำได้แสดงว่าเกิดการสูญเสียลักษณะการขึ้นต่อกันบางอย่างไป กาออกแบบฐานข้อมูลที่ดี จึงต้องทำให้ตารางที่แยกออกมาใหม่นั้นสามารถรักษาคุณสมบัติการขึ้นต่อกันที่มีอยู่เดิมเอาไว้ให้ได้
กรณีเลือกทางที่ 1 จะได้ตารางพร้อมข้อมูล ดังนี้
SC
SP
จะพบว่าตาราง SC มีการขึ้นต่อกันที่สำคัญ คือ
SNO g CITY
และพบว่าตาราง SP มีการขึ้นต่อกันที่สำคัญ คือ
{SNO, PNO} g QTY
กรณีเลือกทางที่ 2 จะได้ตารางสองตารางพร้อมข้อมูล ดังนี้
SPC
SQ
จะพบว่าตาราง SPC มีการขึ้นต่อกันที่สำคัญ คือ
SNO g CITY
{SNO, PNO} g CITY
และพบว่าตาราง SQ มีการขึ้นต่อกันที่สำคัญ คือ
{SNO, QTY} g QTY
สรุป จะพบว่าทางเลือกที่ 1 ดีกว่าทางเลือกที่ 2 เพราะ
1. สามารถรักษาสมบัติการขึ้นต่อกันซึ่งมีอยู่แต่เดิมเอาไว้ได้ทั้งหมด คือทั้ง
{SNO, PNO} g QTY และ
{SNO} g CITY
2. ไม่มีนิพจน์การขึ้นต่อกันที่เกินเข้ามาอย่างทางเลือกที่ 2 ซึ่งเป็นการทำให้ความหมายดังเดิมของฐานข้อมูลผิดเพี้ยนไป
3.ทางเลือกที่ 2 ทำให้ขาดคุณสมบัติการขึ้นต่อกันไปประการหนึ่ง คือ
{SNO, PNO} g QTY
อ้างอิง
http://itd.htc.ac.th/st_it50/it5012/P_1/DB/B5.htm
http://office.microsoft.com/th-th/access-help/HA001224247.aspx
http://kitikorn.site90.net/43201/design.htm
http://irrigation.rid.go.th/rid15/ppn/Knowledge/Database/database4.htm
กระบวนการออกแบบ
กระบวนการออกแบบประกอบด้วยขั้นตอนต่อไปนี้
- กำหนดวัตถุประสงค์ของฐานข้อมูลของคุณ
การทำเช่นนี้จะเป็นการเตรียมพร้อมสำหรับขั้นตอนในขั้นต่อๆ ไป
- ค้นหาและจัดระเบียบข้อมูลที่ต้องการ
รวบรวมข้อมูลทุกชนิดที่คุณอาจต้องการบันทึกลงในฐานข้อมูล เช่น ชื่อผลิตภัณฑ์และหมายเลขใบสั่งซื้อ
- แบ่งข้อมูลลงในตารางต่างๆ
แบ่งรายการข้อมูลของคุณออกเป็นกลุ่มหรือหัวเรื่องหลักๆ เช่น ผลิตภัณฑ์ หรือใบสั่งซื้อ จากนั้นแต่ละหัวเรื่องจะถูกนำมาทำเป็นตาราง
- เปลี่ยนรายการของข้อมูลให้เป็นคอลัมน์ต่างๆ
ตัดสินใจว่าคุณต้องการเก็บข้อมูลอะไรในตารางแต่ละตาราง รายการแต่ละรายการจะกลายเป็นเขตข้อมูล และแสดงเป็นคอลัมน์ในตาราง ตัวอย่างเช่น ตารางพนักงานอาจมีเขตข้อมูลเช่น นามสกุลและวันที่จ้างงาน
- ระบุคีย์หลัก
เลือกคีย์หลักของตารางแต่ละตาราง คีย์หลักคือคอลัมน์ที่ใช้เพื่อระบุแต่ละแถวแบบไม่ซ้ำกัน ตัวอย่างเช่น หมายเลขผลิตภัณฑ์ หรือ ID ใบสั่งซื้อ
- กำหนดความสัมพันธ์ของตาราง
ดูที่ตารางแต่ละตารางแล้วพิจารณาว่าข้อมูลในตารางหนึ่งสัมพันธ์กับข้อมูลในตารางอื่นๆ อย่างไร ให้เพิ่มเขตข้อมูลลงในตารางหรือสร้างตารางใหม่เพื่อระบุความสัมพันธ์ต่างๆ ให้ชัดเจนตามต้องการ
- การปรับการออกแบบให้ดียิ่งขึ้น
วิเคราะห์การออกแบบของคุณเพื่อหาข้อผิดพลาด สร้างตารางแล้วเพิ่มระเบียนข้อมูลตัวอย่างสองสามระเบียน ให้ดูว่าคุณจะได้รับผลลัพธ์ที่คุณต้องการจากตารางของคุณหรือไม่ ปรับเปลี่ยนการออกแบบตามต้องการ
- การใช้กฎ Normalization
ใช้กฎ Normalization ข้อมูลเพื่อดูว่าตารางของคุณมีโครงสร้างที่ถูกต้องหรือไม่ ปรับเปลี่ยนการออกแบบได้ถ้าจำเป็น
- แผนภาพการขึ้นต่อกัน
ตัวอย่าง จากตาราง SCP ซึ่งมีการขึ้นต่อกัน คือ
{SNO, PNO} g QTY
SNO g CITY
เราสามรถแสดงด้วยแผนภาพการขึ้นต่อกันเป็นดังนี้
(C.J. Date, 2000)

หรือแสดงด้วยแผนภาพการขึ้นต่อกันอย่างง่าย (ดัดแปลงจาก Kendall and Kendall, 1999 และ สุวัตร ปัทมวรคุณ, 2544) เป็นดังนี้

ตัวอย่าง จากตาราง P ซึ่งมีการขึ้นต่อกัน คือ
PNO g PNAME
PNO g COLOR
PNO g WEIGHT
PNO g CITY
เราสามารถแสดงด้วยแผนภาพขึ้นต่อกันเป็นดังนี้

หรือแสดงด้วยแผนภาพการขึ้นต่อกันอย่างง่ายเป็นดังนี้

- สมบัติปิดของเซตของการขึ้นต่อกัน

ในภาพข้างบนแสดงให้เห็นว่า เซต S มีการขึ้นต่อกันอยู่ 2 นิพจน์คือ FD1 และ FD2 โดยที่ FD1 บ่งชี้ว่ามีการขึ้นต่อกันอย่าง FD11 และ FD2 บ่งชี้ว่ามีการขึ้นต่อกันอย่าง FD21 และ FD22 ดังนั้น FD11, FD21 และ FD22 จะจัดอยู่ในเซต S+ ซึ่งเป็นสมบัติของเซต S ตัวอย่างจากตารางที่ผ่านมา เช่น การขึ้นต่อกันที่กำหนดว่า
{SNO, PNO} g {CITY, QTY}
จะบ่งชี้ว่าทำให้มี การขึ้นต่อกันอีกสองนิพจน์ซึ่งเป็นสมบัติปิดของมัน ได้แก่
{SNO, PNO} g CITY
{SNO, PNO} g QTY
- กฎการอนุมาน
- กฎการสะท้อน (Reflexivity) กล่าวว่า ถ้า B เป็นสับเซตของ A แล้ว A g B
- กฎเสริม (Augmentation) กล่าวว่า ถ้า A g B แล้ว AC g BC
- กฎถ่ายทอด (Transitivity) กล่าวว่า ถ้า A g B และ B g C แล้ว A g C ซึ่งกล่าวอีกอย่างหนึ่งได้ว่า A g C ผ่านทาง B
- กฎกำหนดตนเอง (Self-determination) กล่าวว่า A g A
- กฎการแยกส่วน (Decomposition) กล่าวว่า ถ้า A g BC แล้ว A g B
- กฎการรวม (Union) กล่าวว่า ถ้า A g B และ A g C แล้ว A g BC
- กฎการประกอบ (Composition) กล่าวว่า ถ้า A g B และ C g D
- ทฤษฎีบทเอกภาพทั่วไป (General Unification Theorem) ซึ่งพิสูจน์โดย ดาร์เวน (Darwen, 1992) กล่าวว่า ถ้า A g B และ C g D แล้ว A U (C - B) g BD
A g BC
B g E
CD g EF
จากแสดงว่า การขึ้นต่อกัน FD – AD g F เป็นสมาชิกของสมบัติของเซตนี้
วิธีทำ
1. A g BC (กำหนดให้)
2. A g C (กฎการแยกส่วน)
3. AD g CD (กฎเสริม)
4. CD g EF (กำหนดให้)
5. AD g F (กฎการแยกส่วน)
- เซตของการขึ้นต่อกันซึ่งได้ลดรูปไม่ได้
• ถ้าการขึ้นต่อกันทุกนิพจน์ที่ถูกระบุโดย S1 ได้มาจากการระบุโดย S2 อีกทอดหนึ่ง เช่น ถ้า S1+ เป็นสับเซตของ S2+ แล้ว เรากล่าวว่า S2 เป็นตัวครอบคลุม (Cover) สำหรับ S1 หรือเรียกสั้น ๆ ว่า S2 คลุม S1
• ถ้า S2 เป็นตัวครอบคลุมสำหรับ S1 และ S1 ก็เป็นตัวครอบคลุมสำหรับ S2 ด้วยแล้วเราเรียกว่า S1 และ S2 เท่าเทียมกัน (S1 and S2 are equivalent.) เช่น S1+=S2+ เซตการขึ้นต่อกัน S จะเป็นเซตที่ลดรูปไม่ได้ก็ต่อเมื่อมีสมบัติ 3 ประการ ดังนี้
1. ด้านขวาของการขึ้นต่อกันทุกตัวในเซต S เป็นแบบแอตทริบิวต์เดียว คือ เป็น เซตเดี่ยว (Singleton Set)
2. ด้านซ้ายมือของการขึ้นต่อกัน ถ้าเป็นเซตของคีย์หลักหลายตัวจริงจะต้องไม่สามารถตัดเอาตัวใดตัวหนึ่งออกไปได้เพราะ จะทำให้ไม่สมบูรณ์ (Left-irreducible) เช่น
{SNO, PNO, X} g QTY
3. การขึ้นต่อกันใด ๆ ในเซต S จะตัดหรือลดเอาตัวใดตัวหนึ่งออกไป โดยความหมายไม่เปลี่ยนไม่ได้ กล่าวอีกนัยหนึ่ง หากเซตใดเป็นเซตที่ลดรูปไม่ได้แล้วย่อมหมายความว่าจะตัดเอาการขึ้นต่อกันนิพจน์ใดนิพจน์หนึ่งออกไม่ได้ มิฉะนั้นความหมายจะขาดหายไม่ครบถ้วน
ตัวอย่าง 1 ถ้าตาราง P มีการขึ้นต่อกันดังนี้ คือ
PNO g PNAME
PNO g COLOR
PNO g WEIGHT
PNO g CITY
วิธีคิด เซตของการขึ้นต่อกันข้างต้นเป็นเซตที่ลดรูปไม่ได้อีกแล้ว เพราะทางด้านขวาเป็นแอตทริบิวต์เดี่ยวในแต่ละบรรทัด ส่วนทางด้านซ้ายก็เป็นเช่นเดียวกันไม่สามารถตัดทอนได้อีก นอกจากนั้นการขึ้นต่อกันแต่ละนิพจน์ดังกล่าวก็ไม่สามารถตัดขึ้นบรรทัดใดได้ เพราะจะทำให้ความหมายเปลี่ยนสมบัติปิด
ตัวอย่างที่ 2 ถ้าตาราง P มีการขึ้นต่อกันดังนี้ คือ
PNO g {PNAME, COLOR}
PNO g WEIGHT
PNO g CITY
วิธีคิด เซตของการขึ้นต่อกันข้างต้นเป็นเซตที่ลดรูปได้อีก เพราะนิพจน์ของการขึ้นต่อกันในบรรทัดแรก มีนิพจน์ด้านขวาไม่เป็น Singleton Set
ตัวอย่างที่ 3 ถ้าตาราง P มีการขึ้นต่อกันดังนี้
{PNO, PNAME} g COLOR
PNO g PNAME
PNO g WEIGHT
PNO g CITY
วิธีคิด เซตของการขึ้นต่อกันข้างต้นเป็นเซตที่ลดรูปได้อีก เพราะนิพจน์ของการขึ้นต่อกันในบรรทัดแรกมีนิพจน์ด้านซ้ายไม่เป็น Singleton Set และเราสามารถตัด PNAME ออกไปจากนิพจน์ด้านซ้ายนั้นได้โดยสมบัติปิดไม่เปลี่ยนแปลงไป
ตัวอย่างที่ 4 ถ้าตาราง P มีการขึ้นต่อกันดังนี้ คือ
PNO g PNO
PNO g PNAME
PNO g COLOR
PNO g WEIGHT
PNO g CITY
วิธีคิด เซตของการขึ้นต่อกันข้างต้นเป็นเซตที่ลดรูปได้อีก เพราะนิพจน์ของการขึ้นต่อกันในบรรทัดแรกนั้นเราสามารถตัดทิ้งออกได้ทั้งบรรทัด โดยสมบัติปิดไม่เปลี่ยนแปลงไป
การพยายามสร้างเซตของการขึ้นต่อกันซึ่งลดรูปไม่ได้ขึ้นมานั้นก็เพื่อจะได้นำไปสร้างข้อกำหนดหรือข้อบังคับ (Constraint) ที่มีจำนวนน้อยที่สุดเพื่อประหยัดเวลา แรงงานโปรแกรมเมอร์ และพลังงานการทำงานของเครื่องคอมพิวเตอร์
- การแยกตารางโดยไม่สูญเสียความหมาย
การแยกตาราง (Decomposition) เป็นการทำ Projection อย่างหนึ่ง กล่าวคือ เป็นการดึงคอลัมน์ของข้อมูลเฉพาะบางคอลัมน์ออกมาจากตารางที่มีอยู่เดิม แล้วนำไปสร้างเป็นตารางใหม่ขึ้นมาหลายตารางตาความต้องการ ตัวอย่างเช่น ถ้าเดิมมีการออกแบบโดยกำหนดให้มีตาราง SCP พร้อมข้อมูล ดังนี้
SNO
|
CITY
|
PNO
|
QTY
|
S1
|
London
|
P1
|
300
|
S1
|
London
|
P2
|
200
|
S1
|
London
|
P3
|
400
|
S1
|
London
|
P4
|
200
|
S1
|
London
|
P5
|
100
|
S1
|
London
|
P6
|
100
|
S2
|
Paris
|
P1
|
300
|
S2
|
Paris
|
P2
|
400
|
S3
|
Paris
|
P2
|
200
|
S4
|
London
|
P2
|
200
|
S4
|
London
|
P4
|
300
|
S4
|
London
|
P5
|
400
|
SCP
จะพบว่ามีการขึ้นต่อกันเฉพาะที่สำคัญดังต่อไปนี้
{SNO, PNO} g QTY
SNO g CITY
(ในที่นี้ เราตัด {SNO, PNO} g CITY ทิ้งไปเพราะเป็นการขึ้นต่อกันที่ซ้ำซ้อนกับ SNO g CITY ทีมีอยู่แล้ว ตามหลักการของ การขึ้นต่อกันแบบด้านซ้ายลดรูปไม่ได้ หรือ Left-irreducible FDs)
จะเห็นได้ว่าตารางนี้มีการเก็บข้อมูลแต่ละทูเพิล (Tuple) เป็นค่าเดียว (Atomic) อยู่แล้ว กล่าวอีกนัยหนึ่งคือ อยู่ในรูปแบบปรกติระดับที่ 1 (Pirst Normal Form) แล้ว แต่ยังมีความไม่เรียบร้อยอยู่บางอย่าง คือ ยังเป็นการกำหนดการแบ่งตารางที่ไม่ดีนักเพราะเก็บข้อมูลหลายเรื่องไว้ในตารางเดียวกัน ซึ่งจะทำให้เกิดปัญหาการเก็บข้อมูลซ้ำซ้อน (Redundancy) และปัญหาความผิดปกติในการปรับปรุงข้อมูล (Update Anomaly) เมื่อทราบข้อบกพร่องดังนี้จึงจะต้องแก้ปัญหาโดยการแยกตาราง SCP นี้ย่อยออกเป็นสองตารางซึ่งมีทางเลือก ดังนี้
ทางเลือกที่ 1 จาก SCP (SNO, CITY, PNO, QTY) แยกเป็น
SC (SNO, CITY) และ
SP (SNO, PNO, QTY)
ทางเลือกที่ 2 จาก SCP (SNO, CITY, PNO, QTY) แยกเป็น
SPC (SNO, PNO, CITY) และ
SQ (SNO, QTY)
การจะเลือกทางใดนั้นต้องพิจารณาว่าหลังจากที่ทำการแยกตารางออกไปแล้ว เราสามารถทำย้อนกลับ คือ เอาตารางใหม่ทั้งสองตารางมารวมกัน (JOIN) เพื่อให้ได้ข้อมูลอย่างตารางเดิมได้หรือไม่ ถ้าไม่สามารถทำได้แสดงว่าเกิดการสูญเสียลักษณะการขึ้นต่อกันบางอย่างไป กาออกแบบฐานข้อมูลที่ดี จึงต้องทำให้ตารางที่แยกออกมาใหม่นั้นสามารถรักษาคุณสมบัติการขึ้นต่อกันที่มีอยู่เดิมเอาไว้ให้ได้
กรณีเลือกทางที่ 1 จะได้ตารางพร้อมข้อมูล ดังนี้
SNO |
CITY
|
S1
|
London
|
S2
|
Paris
|
S3
|
Paris
|
S4
|
London
|
SC
SNO
|
PNO
|
QTY
|
S1
|
P1
|
300
|
S1
|
P2
|
200
|
S1
|
P3
|
400
|
S1
|
P4
|
200
|
S1
|
P5
|
100
|
S1
|
P6
|
100
|
S2
|
P1
|
300
|
S2
|
P2
|
400
|
S3
|
P2
|
200
|
S4
|
P2
|
200
|
S4
|
P4
|
300
|
S4
|
P5
|
400
|
SP
จะพบว่าตาราง SC มีการขึ้นต่อกันที่สำคัญ คือ
SNO g CITY
และพบว่าตาราง SP มีการขึ้นต่อกันที่สำคัญ คือ
{SNO, PNO} g QTY
กรณีเลือกทางที่ 2 จะได้ตารางสองตารางพร้อมข้อมูล ดังนี้
SNO |
PNO
|
CITY
|
S1
|
P1
|
London
|
S1
|
P2
|
London
|
S1
|
P3
|
London
|
S1
|
P4
|
London
|
S1
|
P5
|
London
|
S1
|
P6
|
London
|
S2
|
P1
|
Paris
|
S2
|
P2
|
Paris
|
S3
|
P2
|
Paris
|
S4
|
P2
|
London
|
S4
|
P4
|
London
|
S4
|
P5
|
London
|
SPC
SNO
|
QTY
|
S1
|
300
|
S1
|
200
|
S1
|
400
|
S1
|
200
|
S1
|
100
|
S1
|
100
|
S2
|
300
|
S2
|
400
|
S3
|
200
|
S4
|
200
|
S4
|
300
|
S4
|
400
|
SQ
จะพบว่าตาราง SPC มีการขึ้นต่อกันที่สำคัญ คือ
SNO g CITY
{SNO, PNO} g CITY
และพบว่าตาราง SQ มีการขึ้นต่อกันที่สำคัญ คือ
{SNO, QTY} g QTY
สรุป จะพบว่าทางเลือกที่ 1 ดีกว่าทางเลือกที่ 2 เพราะ
1. สามารถรักษาสมบัติการขึ้นต่อกันซึ่งมีอยู่แต่เดิมเอาไว้ได้ทั้งหมด คือทั้ง
{SNO, PNO} g QTY และ
{SNO} g CITY
2. ไม่มีนิพจน์การขึ้นต่อกันที่เกินเข้ามาอย่างทางเลือกที่ 2 ซึ่งเป็นการทำให้ความหมายดังเดิมของฐานข้อมูลผิดเพี้ยนไป
3.ทางเลือกที่ 2 ทำให้ขาดคุณสมบัติการขึ้นต่อกันไปประการหนึ่ง คือ
{SNO, PNO} g QTY
อ้างอิง
http://itd.htc.ac.th/st_it50/it5012/P_1/DB/B5.htm
http://office.microsoft.com/th-th/access-help/HA001224247.aspx
http://kitikorn.site90.net/43201/design.htm
http://irrigation.rid.go.th/rid15/ppn/Knowledge/Database/database4.htm
ไม่มีความคิดเห็น:
แสดงความคิดเห็น