(อาจารย์เกวลี) เดี๋ยวเริ่มเลยก็ได้ค่ะ โอเค ประมาณนี้
นะคะ
วันนี้จะเป็นบทที่ 5
เกี่ยวกับ
กระบวนการ
การปรับบรรทัดฐาน
ขาภาษาอังกฤษก็จะเป็นนกอะไร Season
มันก็จะมีความหมายแล้วก็จุดประสงค์ของการทำ
Normalization หรือว่าการปรับบรรทัดฐานนะคะ แล้วก็จะเกี่ยวกับ
ฟังก์ชัน การขึ้นต่อการและกระบวนการในการทำ Normalization ด้วย
นะคะ
มี 3 ข้อวันนี้
โดยการประปาฐานนะคะ หรือว่า Normalization นี่ มันจะเป็นทฤษฎีที่
คนที่จะต้องออกแบบฐานข้อมูลเขาจะต้องมาแปลงข้อมูล
ข้อมูลอาจจะเป็นข้อมูลที่ซับซ้อน
นะคะ ให้มันง่าย
เข้าใจก็ง่าย
นำไปใช้งานก็ง่าย แล้วก็ต้องเป็นระบบที่ หลังจากออกแบบแล้วนำไปใช้งานจริงนี่ ต้องเกิดปัญหาน้อยที่สุดนะคะ
โดยกระบวนการทำงานนะคะ ในการปรับบรรทัดฐานนี่ มันจะมี 3 ระดับ
นะคะ จริง ๆ เราก็จะเรียกสั้น ๆ ว่า
ระดับแรก เรียกว่า 1nf
นะคะ 2nf 3nf
นะคะ ในระดับปริญญาตรีนี่
ถึง 3NF ได้
ก็ถือว่าเก่งมากแล้ว
นะคะ
ถ้าเป็นระดับที่สูงขึ้นไปอีก ก็จะถึงได้ถึง 5 nf เลย
นะคะ
อันนี้เป็น
แผนภาพกระบวนการทำงานนะคะ ก่อนที่เราจะมาทำกระบวนการปรับบรรทัดฐานได้นี่ มันก็จะต้องวิเคราะห์ความต้องการของผู้ใช้งานก่อนว่า เขาต้อง
การระบุ
การฐานข้อมูลแบบไหน มีความต้องการใช้
ตารางกี่ตาราง ในฐานข้อมูลนะคะ
หลังจากนั้น
ก็จะมาวาดรูป
เหมือนที่เราเรียนอาทิตย์ที่แล้ว
นะคะ ว่าเป็นแผนภาพเพื่อให้เข้าใจว่า
สิ่งที่เรากำลังจะออกแบบ หรือสิ่งที่เรากำลังจะทำฐานข้อมูล
มันตรงตามความต้องการหรือเปล่านะคะ
แต่รูปแบบของรูปที่เราวาดอาทิตย์ที่แล้วนี่ มันจะยังเป็นรูปแบบที่
ยังไม่เป็นบรรทัดฐาน หรือว่ายังไม่มีการจัดระเบียบความคิด
ที่ตัดข้อมูลที่ซ้ำซ้อนกันออกไป หรืออาจจะมีคีย์หลักที่มัน
ขทับซ้อนกันนะคะ เราก็เลยจะต้องเอาข้อมูลจากที่เราว่าอาทิตย์ที่แล้วน
ี่ เข้าสู่กระบวนการปรับพื้นฐานก่อน
ซึ่งอย่างที่บอก
เราทำแค่ถึง 3NF นี่ ก็
เก่งมากแล้ว
อย่างน้อย 2-3 นะคะ
ไอ้ Boy codd กับ ไม่ทำก็ก็ก็รักไว้ได้นะคะ แต่อย่างน้อยต้องถึง
วัตถุประสงค์ของการปรับฐานนะคะ
แน่นอนลดความซ้ำซ้อนของข้อมูลก็คือถ้าข้อมูลมันซ้ำกันนี่ เราก็ต้องตัดออกไป
โครงสร้างเป็นสิ่งสำคัญมากเท่าไร เนื้อหาแล้วก็พื้นที่ในการเก็บข้อมูลอย่างมันก็จะเยอะ
มันก็ทำให้สิ้นเปลือง
ประมาณเหมือนกัน
รวมถึงลดปัญหาความไม่ถูกต้องของข้อมูลน
ะคะ ข้อมูลนี่ นอกจากที่จะไม่เกิดความซ้ำซ้อนกันแล้วเนี่ย
มันอาจจะเกิดจากสาเหตุ คือ
ถ้าเหมือนที่ ตัดกระจกทุกอย่างก็คือถ้าเราเก็บข้อมูลหลาย ๆ ที่
นักศึกษา
เก็บข้อมูลที่คณะด้วย เก็บที่มหาวิทยาลัยด้วย เก็บที่สาขาด้วยนี่ บางทีถ้าวันนึง
คุณอาจจะเปลี่ยนแปลงเบอร์โทรศัพท์
ที่บ้าน
ก็ต้องไปตามเปลี่ยนทุกที่เลย
นะคะ
ซึ่งเสียเวลา แล้วคราวนี้ก็จะเป็นที่เถียงกันว่า สรุปแล้วเบอร์ไหนถูก เบอร์ไหนผิด
นะคะ โดยวัตถุประสงค์ของการปรับบรรทัดฐานนี่ ก็คือข้อมูลจะถูกเก็บอยู่แหล่งเดียว
นะคะ เก็บอยู่ที่เดียว
แต่สามารถเรียกใช้และใช้งานได้หลาย ๆ ที่ พร้อมกันได้
นะคะ แต่ถ้ามันมีการเปลี่ยนแปลงข้อมูล หรือมีการลบหรือการเพิ่มข้อมูล
เพื่อให้ข้อมูลเป็นปัจจุบันที่สุด
เราจะเก็บข้อมูลไว้ที่เดียว
มีแก้ไขก็ที่เดียว
เพราะฉะนั้น ข้อมูลก็จะเป็นข้อมูลที่ถูกต้อง แล้วก็
ปัจจุบันด้วย
แล้วก็
อย่างที่ใช้ในเหตุผลเมื่อกี้นี้นะคะ การเก็บข้อมูลที่เดียวนี่ มันก็จะลดความผิดพลาดที่เกิดจากการ
เปลี่ยนแปลงข้อมูลปรับปรุงข้อมูลนะคะ เหมือนที่บอกว่าคือ
ถ้าเปลี่ยนเบอร์โทรศัพท์หรือเปลี่ยนบ้านเลขที่นะคะ ก็เปลี่ยนแปลงที่เดียว เราสามารถเรียกใช้ข้อมูลได้
ทุกที่ พร้อม ๆ กัน ถ้าต้องการข้อมูลนะคะ
ความซ้ำซ้อนกันของข้อมูลนี่ หรืออาจจะเกิดความผิดพลาดของการปรับปรุงข้อมูลนะคะ
แนวคิดที่สำคัญของการออกแบบฐานข้อมูล
นี่ ก็คือการออกแบบข้อมูลที่ซ้ำซ้อนกันน้อยที่สุด
นะคะ เพื่อประหยัดเนื้อที่ในการเก็บข้อมูล แล้วก็ลดปัญหาที่จะเกิดขึ้น
ถ้าสมมติว่าข้อมูลมันซ้ำซ้อนกันมากเกินไป หรือ
ปริมาณข้อมูลมันเยอะเกินไปนะคะ
อย่างเช่น ตัวอย่างนะคะ ตารางด้านบน ตารางสีเทาข้างบน
นะคะ จะเป็นตัวอย่างการออกแบบ
ฐานข้อมูลที่ดี เดี๋ยวจะมาให้ดูว่าทำไมมันถึงดีกว่า ในตารางข้างบนนี่ มันจะมีตารางของพนักงาน แล้วก็ตารางสาขา
นะคะ จะเห็นได้ว่า
ตาราง
พนักงาน
นี่ จะมีส่วนหนึ่งที่เป็นข้อมูลของรหัสสาขา
ห้อยไว้อยู่
ถามว่าทำไมไม่เอา
ข้อมูลสาขามาไว้ในตารางพนักงานทีเดียวเลยล่ะ
ทำไมต้องแยกออก
นะคะ อย่างถ้า
นักศึกษาดูคนแรกนะคะ
พนักงานคนแรก รหัสสาขา b005
ก็คือสาขา
เชียงใหม่
ถ้าสมมติว่าพนักงานคนที่ 1 ลาออก
ก็จะมีการลบข้อมูลเกิดขึ้นใช่ไหมคะ
มีการลบข้อมูล
ลบคนนี้ออก ขีดฆ่าทิ้ง
ขีดฆ่าทิ้ง
สิ่งไหนที่หายไปบ้าง
แน่นอนสาขาเชียงใหม่จะหายไปด้วย
นะคะ ถ้าสมมติเราอยู่ด้วยกัน
แต่ถ้าสมมติพนักงานคนนี้ลาออก สาขาเชียงใหม่ยังอยู่ไหม
ยังอยู่
นะคะ
ซึ่งแตกต่างจากด้านล่าง
นะคะ ด้านล่าง
เห็นไหมคtว่า
ถ้าสมมุติว่าจะลบทิ้งหมดเลย
กากบาททิ้ง
สาขาเชียงใหม่หายไปด้วย
อันนี้คือการออกแบบที่ไม่ดี
นะคะ เหมือน
คนข้างล่าง
คนนี้ออก
สาขาพิษณุโลก
ก็หายไปด้วย
แต่ถ้าเป็นตารางด้านบน
นะคะ ถ้าคนนี้ลาออก
สาขายังอยู่ไหม
ยังอยู่เหมือนเดิมนะคะ
อันนี้คือการออกแบบฐานข้อมูลที่ดี ถ้าข้อมูลตัวไหนที่มันมีผลกระทบต่อกัน เราจะต้องแยกตารางออกนะคะ
ตัวอย่าง
นะคะ ถ้าการออกแบบที่ดีนี่ เราจะลด
ปัญหาความซ้ำซ้อนกันของข้อมูล
ออกได้
นะคะ อย่างเช่น ตัวนี้อันนี้เป็นตารางที่ออกแบบที่ไม่ดีนะคะ
เห็นไหมคะ ว่ามันจะมี
รหัสสาขา
แล้วก็ที่อยู่
อยู่ในตารางเดียวกัน
ถ้าสมมติว่าอาจารย์เพิ่ม
เข้ามาใหม่อีก 1 คน
นะคะ
เป็น EM10
ตรงนี้นะคะ ถ้าต้องการเพิ่มพนักงานสาขา
เชียงใหม่ อาจารย์ก็ต้องมากรอกข้อมูลตรงนี้อีก
เชียงใหม่ นะ โน่นนี่นั่นโน่น โรงเรียนระโนด
แต่ถ้า
การออกแบบฐานข้อมูลที่ดี
นี่ เราแค่ใส่รหัสสาขา
ไม่จำเป็นจะต้องพิมพ์ที่อยู่ทุกครั้งก็ได้
นะคะ เหมือนเวลาคุณไปธนาคารใช่ไหมคะ
คุณก็แค่ยื่นบัตรประชาชน
พนักงานธนาคารก็จะกรอกเลขบัตรประชาชนคุณลงไป
นะคะ หรืออาจจะเอาชิปการ์ดของคุณนี่ เสียบเข้าไปในเครื่องถามว่าตอนนี้เราได้กรอกข้อมูลไหม
ไม่ต้องนะคะ ขอแค่มีเลขบัตรประชาชน ข้อมูลทุกอย่างที่คุณมีเขาจะดึงออกมาจากระบบให้เลย เราไม่ต้องมาเสียเวลากรอกนะคะ
เหมือนเมื่อก่อนนี่ ต้องเขียนใส่กระดาษ เลขบัตรประชาชนอะไร ชื่ออะไรนามสกุลอะไร ที่อยู่ที่ไหนเบอร์โทรศัพท์อะไร เดี๋ยวนี้ไม่ต้องเลย ขอแค่มีเลขบัตรประชาชนข้อมูลทุกอย่างเราสามารถดึงขึ้นมาได้อยู่แล้ว
นะคะ อันนี้ก็เช่นเดียวกัน
ถ้าการออกแบบไม่ดีนี่ เราต้องกรอกข้อมูลทุกช่อง ทุกช่องเลย
นี่ มันทำให้
อาจจะคนเดียวไม่เดือดร้อนค่ะ
ถ้าเป็นพนักงานใหม่เป็นเหมือนโรงงานน่ะค่ะ มีพนักงานพันคน
นั่งกรอก
เชียงใหม่เป็นพันครั้งนี่ เสียเวลามาก ๆ
อันนี้คือการออกแบบที่ไม่ดี
นะคะ
กับอีกอย่างหนึ่ง ถ้าสมมติว่าเมื่อกี้อาจารย์เพิ่มพนักงานแล้ว
ถ้าอาจารย์อยากเพิ่มแค่สาขา
อยากเพิ่มแค่สาขา ซึ่งในตารางนี้
กีฬา
จำได้ไหมคะ คีย์หลักจะเป็นคีย์ที่ขีดเส้นใต้
ซึ่งอาจารย์อยากเพิ่มสาขาสมุทรปราการจะเพิ่ม
B100 สกลนคร
ละครนะคะ
ถามว่าเพิ่มได้ไหม อาจจะเป็นการตั้งสาขาแต่ยังไม่มีพนักงานหรอก
ถ้าจากตารางนี้
นะคะ เราจะเพิ่มเฉพาะชื่อสาขาไม่ได้
เนื่องจากเรายังไม่มีรหัสพนักงานเพราะรหัสพนักงานเป็นคีย์หลัก
นะคะ
คีย์หลัก คือ คุณสมบัติมันคือเป็นค่าว่างไม่ได้
นะคะ ก็ทำให้เราเพิ่มสาขาไม่ได้
เพราะเราไม่มีพนักงาน
อันนี้ก็เป็น
ข้อผิดพลาดในการเพิ่มข้อมูล ถ้าเราออกแบบ
ตารางแบบนี้นะคะ
นี่ก็คือ
การ ปัญหาที่เกิดขึ้นจากการออกแบบตารางไม่ดี
กับ
ปัญหาต่อมา เป็นปัญหาการลบข้อมูลที่
ต้องการออก ถ้าพนักงานคนนี้
ออก
สาขาเชียงใหม่หายไปด้วย
โดนลบไป
กรณีความผิดพลาดจากการเปลี่ยนแปลง
เหมือน B003 นะคะ
เป็นกรุงเทพฯ ใช่ไหมคะ
แล้วคราวนี้ข้อมูลมันอยู่ในตารางเดียวกัน
ถ้านักศึกษาจะแก้ สมมติว่าเราย้ายจากกรุงเทพฯ ไปอยู่นนทบุรี
สมมติมีพนักงาน 3,000 คน
คุณต้องแก้กรุงเทพฯ 3,000 ครั้ง
เป็นนนทบุรี
นะคะ ถ้าพนักงานมีคน 2 คน ไม่ใช่ปัญหาค่ะ แต่ถ้าคุณเป็นโรงงานขนาดใหญ่
นั่งแก้ทีละ 3,000 คน ไม่ใช่เรื่องสนุกแน่ ๆ
นะคะ อันนี้ก็เป็นปัญหานะคะ เพราะฉะนั้น
เราควรแยกตารางพนักงานกับตารางสาขาออกจากกันนะคะ มีเป็นเหตุผล
อันนี้ คือ
ขนาดข้อมูลขนาดเล็กนะคะ แล้วยังเห็นปัญหาขนาดนี้ ถ้าสมมติว่า
องค์กรขนาดใหญ่ เป็นบริษัท เป็นโรงงาน หรือระดับโรงเรียนมีนักเรียนเป็น 200-3002 3000 คนก็ได้นะคะ
มีปัญหาเยอะมากถ้าสมมุติว่าเราจัดการตารางไม่ดี
นะคะ จากปัญหาที่เกิดขึ้นเมื่อกี้นะคะ ก็อย่างที่บอกค่ะ เราจะแก้ปัญหาโดยการแยกตารางเป็น 2 ตาราง แบบนี้นะคะ
ฟังก์ชันการขึ้นต่อกันนะคะ อันนี้ เดี๋ยว
จะเป็นเกี่ยวกับตารางหนึ่งนะคะ จะมีผลดีต่อตารางหนึ่ง เราจะเรียกว่าเป็นฟังก์ชันการขึ้นต่อกัน
เดี๋ยวดูตัวอย่างเลยละกัน
อย่างเช่นทางนี้นะคะ
ดูจากรหัสพนักงานนะคะ
เราจะเห็นได้ว่ารหัสพนักงาน
จะส่งผลกับชื่อ
ตำแหน่ง
สัญลักษณ์ของการขึ้นต่อกันนะคะ อันไหนเป็นตัวหลัก
จะชี้ไปที่ตัวรองนะคะ ตามหัวลูกศรเลย
ดูทิศทางตามหัวลูกศรนะคะ อันไหนเป็นตัวหลัก อันไหนเป็นตัวรอง
นะคะ
อย่างเช่น
ตัวนี้ ถามว่าตำแหน่งมาชี้ที่รหัสพนักงานได้ไหมนะคะ ถามว่า
ไม่ได้
เพราะการขึ้นต่อกัน จะต้องเป็นลักษณะ 1 ต่อ 1 เท่านั้น
นะคะ เป็น 1 ต่อกลุ่มไม่ได้
ชนิดของการขึ้นต่อกันนะคะ จะมีอยู่ 4 ชนิดนะคะ
ชนิดแรก เป็นการขึ้นต่อกันโดยสมบูรณ์
นะคะ
ซึ่งอาจจะเป็นเกี่ยวกับ
ตารางนะคะ จะมีคอลัมน์
1 คอลัมน์ หรือมากกว่า 1 คอลัมน์ มาประกอบกัน
นะคะ โดยในคอลัมน์น
ั้น ๆ นี่ จะบรรจุค่าที่ระบุ
ความพิเศษ
ของแถว ๆ ได้อย่างชัดเจน
นะคะ ก็คือ Attribute จะเป็นค่าเฉพาะที่บอกเลยว่า
Record ข้อมูลแถวนั้นเนี่ยมันมีลักษณะพิเศษเฉพาะตัว
อย่างไรนะคะ โดยในทุกความสัมพันธ์นี่ จะต้องระบุค่าคีย์หลักไว้ด้วย
ครึ่งปีหลังนี้ คือ ต้องเป็นค่าเอกลักษณ์คือไม่ซ้ำกันอยู่แล้ว
นะคะ
อย่างเช่น การขึ้นต่อกันอย่างสมบูรณ์ อันแรกนะคะ
Attribute ก็คือคอลัมน์ที่ไม่ใช่คีย์หลัก
คีย์หลัก จำได้ใช่ไหมคะ คีย์หลักจะเป็น
คอลัมน์ที่มีขีดเส้นใต้นะคะ
คอลัมน์ที่ไม่ใช่คีย์หลัก จะขึ้นตรงต่อคอลัมน์ที่เป็นคีย์หลัก
คอลัมน์เดียวเท่านั้น
นะคะ เช่น เลขบัตรประชาชน
จะขึ้น
จะเป็นเจ้าของชื่อนี้เท่านั้นนะคะ
เพราะฉะนั้น การขึ้นต่อกันอย่างสมบูรณ์ จะเป็นลักษณะแบบ 1 ต่อ 1 นะคะ เลขบัตรประชาชน 1 เลข
จะต้องเป็นของคนคนเดียวเท่านั้น
นะคะ ไม่ใช่ว่าเลขประชาชนที่ใช้ 10 คน เป็นไปไม่ได้นะคะ
ตัวอย่างนะคะ
ตารางที่มีคอลัมน์หลายตัว
นะคะ
ขึ้นอยู่กับคีย์หลักตัวเดียว เช่น
คนหนึ่งคน
นี่ ก็จะมีข้อมูลชื่อ นามสกุล วันเดือนปีเกิด วันที่ทำบัตรใช่ไหมคะ
แต่ว่า
เขาจะต้องขึ้นตรงกับเลขบัตรประชาชนเดียวเท่านั้น ถามว่า 3 คนนี้
อาจจะเกิดวันเดียวกันก็ได้ค่ะ
แต่เลขบัตรประชาชนเขาจะไม่เหมือนกัน
หรือเขาอาจจะมาทำบัตรวันเดียวกัน
แต่ว่าเลขบัตรประชาชนเขาจะไม่ซ้ำกัน
นะคะ คือซ้ำกันได้ทุกอย่างค่ะ ยกเว้นหมายเลขบัตรประชาชน
แต่บางตารางนะคะ
ก็อาจจะเป็นการรวมตัวกันของค
ีย์หลัก มากกว่า 1 คีย์หลักนะคะ
มารวมกัน เช่น นักศึกษา
คนนี้
นะคะ รหัสนักศึกษานี้
ลงทะเบียนวิชานี้
ได้เกรดอะไร
อันนี้ก็เป็นความสัมพันธ์ที่เกิดขึ้นได้เหมือนกันค่ะ ว่ารหัสนักศึกษาซ้ำกันได้ไหม ไม่ซ้ำ
รหัสวิชาซ้ำกันได้ไหม
ไม่ซ้ำนะคะ เหมือนชื่อวิชาอ
าจารย์รหัสหนึ่ง
ชื่ออาจารย์วิชาก็รหัสวิชาอีกอันนึง
นี้จะไม่ซ้ำกันอยู่แล้วนะคะ
ต่อมาจะเป็นการขึ้นต่อกันบางส่วน
มันก็จะเป็นอาศัยความสัมพันธ์ที่เกิดขึ้นจาก
คีย์ผสมนะคะ อาจจะเป็น
เส้นตรงจากตารางอื่นหรือส่งตารางมารวมกัน
อาจจะไม่ใช่คีย์หลักก็ได้ แต่มันมีความหมายกับ
อีกคอลัมน์
หนึ่งนะคะ เดี๋ยวจะยกตัวอย่างเลยดีกว่า
อย่างเช่น
เมื่อตารางเทียบไซส์ให้ดูเมื่อกี้นะคะ ก็จะมีรหัสนักศึกษา รหัสวิชา มีเกรด
แล้วก็
มีการบอกด้วยว่ารหัสวิชานี้เป็นชื่อวิชาอะไร
นะคะ
มันจะเป็นการเกิดขึ้นเมื่อ
คีย์หลักประกอบกันด้วย
คอลัมน์หรือว่า Attribute หลาย ๆ Attribute รวมกัน
โดยบางส่วนของคีย์หลักสามารถไประบุค่า Attribute อย่างอื่น
ที่ไม่ใช่คีย์หลักได้
นะคะ อย่างเช่น ในความสัมพันธ์นี้คีย์หลักจะมี 2 ตัว
มีรหัสนักศึกษา
กับรหัสวิชา
นะคะ ถามว่า
ถ้ามีแต่
รหัสนักศึกษา
เกรดนะคะ
รหัสวิชา
แล้วเราจะรู้ไหมว่าชื่อวิชาที่เราเรียนไปนี่
ชื่อวิชาอะไรนะคะ
เหมือนบางคนรู้รหัสวิชาแต่จำชื่อวิชาไม่ได้ก็มี
เพราะฉะนั้น รหัสวิชานี่ มันเลยสามารถ
ไปส่งผลกับชื่อวิชาได้เหมือนกัน เพราะเป็นตัวระบุว่า
ไอ้รหัสวิชา
นี้ ชื่อวิชาอะไร
ก็คือคีย์หลักในตารางนี้มี 2 อัน
แต่มีคีย์หลัก 1 ตัวเนี่ย
ไปมีผลกับ
Attribute หนึ่งได้
นะคะ อันนี้คือความขึ้นต่อกันบางส่วน
อย่างเช่น ตัวนี้ก็จะเป็นของจริง ถ้าสมมติว่าอาจารย์ตัดรหัสนักศึกษาออก
มีแค่ 5 วิชา มีเกรดมีการ
วิชาเขียนโปรแกรมแล้วถาม
รู้ไหมคะ ว่าเกรดเอที่ของใคร
ไม่รู้นะคะ หรือว่า
เดี๋ยวลบไปอันนี้ก่อนนะ
คะ หรือว่า
การลบรหัสวิชาออก
เหลือแต่นักศึกษา เหลือเกรด
เหลือชื่อวิชา แล้วถามว่า
แล้วรหัสวิชาอะไรล่ะ ที่เราได้เกรด A
เราก็ไม่ทราบอีก เหมือนกันนะคะ อันนี้ก็คือ
เป็นการขึ้นต่อกันบางส่วนนะคะ
อันนี้เป็นตัวอย่างนะคะ ต่อมา เป็นการขึ้นต่อกันแบบส่งต่อ
ก็จะเป็นความสัมพันธ์ที่เกิดขึ้นก็ต่อเมื่อมี Attribute หรือว่าคนอื่นที่ไม่ใช่ค
ีย์หลัก แต่ไปสามารถ
ขึ้น
สามารถระบุค่าของแอตทริบิวต์อื่นใน Record ได้
ซึ่งเป็นการออกแบบที่ไม่เหมาะสมนะคะ
เพราะส่วนใหญ่แล้ว ในตารางน
ี่ ถ้าเราจะระบุค่าอื่นให้กับ
คอลัมน์อื่นได้ควรจะต้องเป็นคีย์หลักเท่านั้น
นะคะ ดูตัวอย่างนะคะ เช่น ตารางนี่
เขาบอกว่าสิ่งที่เกิดขึ้น คือ Attribute คือคอลัมน์ที่ไม่ใช่คีย์หลักหรือ Primary Key นะคะ ก็คือไม่ใช่คอลัมน์ที่มีเส้นขีดมันไประบุค่าอื่น ๆ ในตารางได้ เช่น
ตารางนี้ คีย์หลัก ก็คือเลขประจำตัว
นะคะ โดยตัวเลขประจำตัว
นี่ ไปมีผลกับชื่อนามสกุลที่อยู่ตำแหน่งใช่ไหมคะ
แต่คราวนี้
รถประจำตำแหน่ง
มันไม่ถูกระบุโดยเลขประจำตัว
มันถูกระบุโดยรหัสตำแหน่ง
เหมือนถ้าเป็นผู้จัดการน
ี่ แทนที่ผู้จัดการนะคะ จะรู้เลยว่ารถประจำตำแหน่งคืออะไร
แต่เขาไปเช็คที่รหัสตำแหน่ง
แทนที่จะเช็คกับเลขประจําตัว
การออกแบบที่ไม่ดี
เพราะฉะนั้น ถ้าสมมุติว่าจะให้รถประจำตำแหน่ง วิธีการแก้ปัญหา ก็คือ
เราควรจะแยก
ตารางนี้
ออกไปสร้างตารางใหม่เลยค่ะ
มันไม่ควรจะมาขึ้นกับตาราง
ที่มีคีย์หลัก
แต่ไม่สามารถระบุค่าข้อมูลตรงนี้ได้นี่ มันไม่ควรทำนะคะ
กับต่อมา เป็นการขึ้นต่อการเชิงกลุ่ม
นะคะ
ก็จะเป็นความสัมพันธ์ระหว่างคอลัมน์ กับ Attribute นี่
ขึ้นต่อกันแบบสมบูรณ์นะคะ ก็ไปสามารถระบุค่าอื่นได้
นะคะ โดยที่
อย่างเช่นตัวอย่าง
นะคะ นตารางนี้นะคะ จะมีรหัสหลักสูตร
สามารถระบุรหัสวิชาได้หลายวิชา เช่น
จริง ๆ ในรหัสนักศึกษาจะเห็นได้ว่ามีเลข
122
ในรหัสนักศึกษา
นี่ 122 คืออะไร 122 ก็คือหลักสูตรที่เราเรียนอยู่
นะคะ ซึ่งในหลักสูตรที่เราเรียนนี่ มันมีวิชา
มากกว่า 20 วิชา
นะคะ
นั่นก็คือรหัสหลักสูตรนี่ มันสามารถระบุรหัสวิชาได้หลากหลายรหัสวิชามาก ๆ
นะคะ อันนี้ก็คือการขึ้นต่อกันแบบ
มีค่ามากกว่า 1
นะคะ รหัสหลักสูตร
สามารถระบุรหัสวิชาได้หลายค่านั่นเอง
นะคะ แล้วรหัสหลักสูตร
ก็สามารถระบุค่ารหัสนักศึกษาได้หลายคนเช่นกัน
เหมือนตอนนี้ หลักสูตรที่เ
ราเรียนนี่ มีนักศึกษาเกือบ 100 คน
รหัสหลักสูตรเดียวนะ
นะคะ
นี่คือความสัมพันธ์แบบสามารถระบุค่าได้มากกว่า 1 นั้นเองแบบหลายค่า
นะคะ เพราะฉะนั้น วิธีการแก้ปัญหาของสิ่งที่เกิดขึ้นนะคะ เราเลยจะต้องมีการ
กระบวนการปรับบรรทัดฐาน หรือว่ากระบวนการปรับปรุงโครงสร้างของฐานข้อมูลนะคะ ที่มีความซ้ำซ้อนกัน ให้อยู่ในรูปแบบที่เป็นบรรทัดฐาน ก็คือ
เป็นรูปแบบที่พร้อมที่จะเอาไปพัฒนาเป็นฐานข้อมูลได้
นะคะ โดยหลักการนะคะ
อย่างที่บอก มี 5 ระดับ
แต่ในระดับ
ที่ 3 นี่ ก็ถือว่าเพียงพอสำหรับการออกแบบฐานข้อมูลในปัจจุบันแล้ว
นะคะ โดย
คีย์หลักของการทำงานนะคะ ขั้นที่ 1 นะคะ
กำจัดกลุ่มของข้อมูลที่มีความซ้ำซ้อนกันออกไป
ขอแรกง่ายมาก ๆ
ง่ายที่สุด ก็คือ 1 nf นะคะ
ต่อมา ขั้นที่ 2 หรือ 2 nf
นะคะ จะกำจัด
การขึ้นต่อกันบางส่วนออก
นะคะ ขั้นสุดท้าย 3nf นะคะ
กำจัดการขึ้นต่อกันของ Attribute ที่ไม่ใช่
คีย์หลัก เดี๋ยวจะมาดูทีละขั้น
มันจะต้องเป็นอย่างไรบ้าง
ข้อแรกง่ายที่สุด ง่ายมาก ๆ นะคะ
ให้นักศึกษาจำกระบวนการหลัก ๆ จะมี 3 ข้อนะคะ
ขั้นตอนการแรกเลยดูก่อนว่า
คำซ้อนกันไหม
นะคะ ขั้นที่ 2 ก็คือมันขึ้นต่อกันแค่บางส่วนหรือเปล่า
ขั้นที่ 3 อันไหนไม่ใช่ค
ีย์หลัก แต่มันไปส่งผลกระทบกับข้อมูลอื่นได้หรือเปล่า
ดูข้อนตอนที่ 1 ก่อน
ขั้นตอนที่ 1 ง่ายมาก
นะคะ ทุก ๆ
คอลัมน์ akashic Records
จะต้องเป็นค่า Single Value คือ มีค่าเดียวเท่านั้น
จะใส่แบบนี้ไม่ได้
เพราะฉะนั้น ข้อมูลทุกแถวจะต้องไม่มีค่าที่ซ้ำกัน
อย่าง
อันนี้ นักศึกษาคนที่ 1
แน่นอนทั้ง
1 เทอมเนี่ คุณลงทะเบียนประมาณ 6-7 วิชาใช่ไหมคะ
ข้อมูลมันก็จะเป็นแบบนี้
ถ้าเราไม่มีการทำ Normalization
แต่คราวนี้
ขั้นตอนที่ 1
เราจะ
ข้อมูลที่ซ้ำซ้อนกันออก วิธีการง่ายมากค่ะ คือแยกข้อมูลออกเป็นอย่างละแถวที่ไม่ซ้ำกัน
ดูตัวอย่างนะคะ
วิธีการทำ 1 n f ง่ายมากค่ะ ถ้าข้อมูลตัวไหนเป็นกลุ่มนี่ค่ะ
คนที่ 1 ลงวิชา
ลงทะเบียนเรียน 3 วิชาใช่ไหมคะ คนที่ 2 มี 2 วิชา
สามารถทำในรูปแบบ 1nf ก็คือ
เอามันกระจายออกมาค่ะ
ย้ายข้อมูลพรุ่งนี้ออกมา
กระต่ายออกใช่ไหมคะ กระจายออก
1NF ง่ายมาก
ข้อมูลพวกนี้ ก็ทำซ้ำลงมา ทำซ้ำลงมา
นะคะ ทำซ้ำลงมา
ทำซ้ำลงมา
ถามว่า อาจารย์คะ ทำไม
ทำไม 001 มันซ้ำกันได้ล่ะ
แต่รหัสวิชาเขาไม่ซ้ำกันเห็นไหมคะ
1NF เลยง่ายมากค่ะ
ข้อมูลทำไมเป็นก้อนอย่างนี้ เรากระจายออกมาเป็น แยกออกมาเป็นบรรทัดบรรทัดเลยแค่นั้นเอง
อย่างน้อย ในข้อสอบ
ต้องทำ1NF ให้ได้
เพราะมันง่ายที่สุดแล้ว
นะคะ
อย่างเช่น ตัวนี้นะคะ ก็กระจายออกมา
แล้วคราวนี้ ถ้าเรากระจายข้อมูลเรียบร้อยแล้วนะคะ
ก็จะมาดูว่า อย่างในตารางนี้ค่ะ
มันมีตาราง
ของพนักงานใช่ไหมคะ
เขาจะมีคีย์หลัก 1 ตั
วแล้ว แต่ว่า
มันยังมีตัวนี้ค่ะ
ตัวที่ 1 ตัวที่ 2 ที่มีคุณสมบัติ
เป็นคีย์หลักได้
เราต้องแยกมันออก
นะคะ กระบวนการนะคะ
ดูก่อนว่า
ตารางเมื่อกี้นะคะ สิ่งที่ขึ้นตรงกับคีย์หลักตัวนี้นะคะ ก็จะเป็นตัวที่ 1 ตัวที่ 2 ตัวที่ 3
สังเกตเราว่าคีย์หลักมีตัวเดียว
แต่ข้อมูลมีเยอะมาก
นะคะ เราแยกออกมาได้อันแรกเลย
รหัส
Project นะคะ แล้วก็ชื่อ ญพน่ำแะ นะคะ ใครเป็นผู้จัดการเงินเดือนเท่า
ไร งบประมาณเท่าไ
ร คือมันจะเชื่อมโยงกับ
ข้อมูลที่เป็นคีย์หลักก็คือ Project Code
ตัวนี้นะคะ ส่วนตัวนี้เป็นคีย์คู่แข่ง
2 ตัว
นะคะ 2 ตัว
นี่ มันสามารถทำหน้าที่เป็นคีย์หลักให้กับ อย่างตัวนี้นะคะ
มันจะเป็นคีย์หลักให้กับชื่อของพนักงาน
อย่างตัวนี้
ก็จะเป็นคีย์หลักสำหรับชื่อแผนก
นะคะ ถามว่า
มันขึ้นตรงกับ Project Code ไหม
ไม่
นะคะ
เพราะฉะนั้น การทำขั้นตอนต่อมานะคะ 2NF
ขั้นตอนที่ 1
เราจะต้องทำ 1NF มาเรียบร้อยแล้ว ซึ่งง่ายมาก ๆ
แล้วก็ต้องมา
บัตรของการขึ้นต่อกันบางส่วนออก
ก็คือการ
กำจัด
Attribute ที่ไม่ขึ้น
คีย์หลักของตารางนั้นเอง
กำจัดออกนะคะ
อย่างเช่นตัวนี้นะคะ
การขึ้นต่อกันบางส่วน จะเห็นได้ว่า
รหัสวิชา กับชื่อวิชา
มันไม่ขึ้นตรงกับรหัสนักศึกษาใช่ไหมคะ อันนี้จำได้นะ รูปเดิ
มนะ รูปเดิม
วิธีกำจัดปัญหา เราก็ดึงสิ่งที่มันเป็นปัญหาค่ะ สิ่งที่มันไม่ขึ้นตรงกับคีย์หลักตัวนั้น
ไปสร้างตารางใหม่
สร้างตารางเพิ่ม
นะคะ เอาสิ่งที่เป็นปัญหาออกมา ไปใส่ตารางใหม่ กำหนดคีย์หลักใหม่
นะคะ ในตารางเดิม
นะคะ
เราก็เอาคีย์หลักของตารางใหม่ไปใส่
แค่นั้นเอง
นะคะ วิธีการ ก็คือ
เหมือนรูปนี้นะคะ
สิ่งที่เป็นปัญหา ที่อาจารย์ยกตัวอย่าง ก็คือรหัสวิชา
ชื่อวิชา
เพราะรหัสวิชามันไม่ได้ขึ้นตรงกับรหัสนักศึกษา
นะคะ เพราะฉะนั้น ไอ้ 2 ตัวนี้ คือสิ่งที่เป็นปัญหา
วิธีการแก้ปัญหา คือ เราสร้างตารางผลการเรียนใหม่
สร้างตารางวิชาใหม่
นี่ เห็นไหมคะ
ตารางใหม่ เราจะตัดชื่อวิชาออก
แต่ต้องเหลือ
รหัสวิชาไว้ เพื่อให้เชื่อมโยงว่ารหัสวิชานี้มันชื่อวิชาอะไร
จากอีกตาราง
หนึ่ง แค่นั้นเองนะคะ
โอเคค่ะ
อันนี้เป็นตัวอย่างของการ
ปรับบรรทัดฐาน ในรูปแบบของส่ง
2NF เดี๋ยว
อันนี้จะให้ทำการบ้าน เดี๋ยวค่อยย้อนกลับมาแล้วกันนะคะ
เดี๋ยวค่อยย้อนมาสั่งนะคะ เดี๋ยวแก้แล้ว
ตาเมื่อกี้นะคะ
ขั้นตอนสุดท้ายนะคะ 3nf
นะคะ
โดยความสัมพันธ์นะคะ ก่อนที่จะทำเป็น 3NF ได้จะต้องทำ 2NF มาก่อน
หลักของการทำขั้นตอนที่ 3 คือ
ต้องเอาความสัมพันธ์ที่ไม่ใช่คีย์หลัก
ออกนะคะ
เช่น ไม่ใช่คีย์หลัก แต่ไปมีผลกับ
คอลัมน์อื่นไม่ได้นะคะ ไม่ได้
วิธีการแก้ปัญหา เช่นเดิมค่ะ สร้างตารางใหม่ขึ้นมา
แก้ปัญหานั้น ๆ
นะคะ อย่างเช่น ในตัวอย่างนะคะ
รหัสพนักงานนะคะ
ชื่อ สกุล รหัสแผนก ชื่อแผนก เงินเดือน
จะเห็นได้ว่าในตารางนี้นี่ คีย์หลัก ก็คือรหัสพนักงาน
นะคะ แต่มันมีรหัสแผนกกับชื่อแผนกติดมาด้วย
ซึ่งมันไม่ได้เกี่ยวกับรหัสพนักงานเลย
นะคะ วิธีการแก้ปัญหา ก็คือ
เอารหัสแผนก
กับชื่อแผนก
ไปสร้างตารางใหม่
แต่ต้องยังคงรหัสแผนกไว้
ในตารางเดิมนะคะ
เพื่อให้มันเชื่อมโยงได้ว่า ไอ้แผนก a001 นี่ คือแผนกอะไร
นะคะ อันนี้คือการแก้ปัญหา ไม่ใช่คีย์หลัก แต่ไปส่งผลกับคอลัมน์อื่น ๆ ในตารางนะคะ
อันนี้คือ 3NF จริง ๆ แล้ว อยากให้ลองทำในห้องมากกว่า แต่ด้วยสัปดาห์นี้มันมีข้อจำกัดนี่ ก็ไม่เป็นไร
นะคะ อันนี้เป็นตัวอย่างนะคะ
สรุปนะคะ วิธีการทำ Normalization หรือว่าการปรับบรรทัดฐานนะคะ
1NF ทุก Attribute ทุก ๆ คอลัมน์ ที่ทุก ๆ คนร่ำใแต่ละแถว
จะต้องมีค่าของข้อมูลเพียงค่าเดียวเท่านั้น
เช่นเวลาเรากรอกเบอร์โทรศัพท์
เรามีโทรศัพท์ 3 เบอร์ก็จริงแต่เราจะกรอกได้แค่เบอร์เดียว
นะคะ ถ้าอยากใส่เบอร์ที่ 2 ที่ 3 ก็ต้องเพิ่มข้อมูลแถวใหม่ขึ้นมา
นะคะ ต่บมา
2NF
นะคะ ก็
ปัญหา ก็คือถ้ามีข้อมูลนะคะ ขอข้อมูลทุกตัวในตารางนั้น จะต้องขึ้นกับคีย์หลัก
ของตาราง
ตัวเดียวเท่านั้น
นะคะ
ข้อที่ 3 ถ้า
คอลัมน์ไหนที่ไม่ใช่คีย์หลัก
นะคะ จะมาส่งผลกับคอลัมน์อื่นในตารางไม่ได้
นะคะ เพราะฉะนั้น
ไอ้ตารางข้อ 1 นี้ คือแค่กระจายตาราง
อันที่ 2 อันที่ 3 ถ้ามีปัญหา
เราต้องสร้างตารางใหม่น
ะคะ การบ้าน เอาอย่างนี้ดีกว่า
นะคะ อาจารย์จะให้ทำ น่าจะส่งวันนี้
เอาแค่
ข้อเดียวนะคะ ข้อเดียวพอ เพราะว่าจริง ๆ อยากให้ทำในห้อง เดี๋ยวสัปดาห์หน้าค่อยทำในห้อง
นะคะ แต่อันนี้จะให้ลองทำดูก่อนว่าที่เรียนไปวันนี้
เข้าใจไหม
นะคะ ถ้าทำเสร็จแล้วก็ค่อยเอามาส่ง
ที่ตู้ส่งงานอาจารย์ เอาเฉพาะข้อนี้นะ ข้อเดียว
ข้อเดียวพอวั นนี้คนเดียวพอนะคะ ส่งในเวลานี่แหละ
ให้ลองทำดูว่าเข้าใจไหม ข้อนี้
ทำ 1NF ทำอย่างไรง่ายมาก ๆ เลย
อาจารย์เว้นช่องว่างให้แล้ว
เติมมา
2 มิติ
คุณเห็นไหมว่า
มันมีรหัสวิชาเนี่ย
ชา
นี่ ต้องทำอย่างไรกับมัน
แยกมันออกมาสิ แยกอ
ย่างไร เอาข้อเดียวก่อน
นะคะ แล้วลอง
ส่งมาให้อาจารย์ดูก่อนว่า
เข้าใจมากน้อยขนาดไหน
จริง ๆ
อยากให้เรียนในห้องมากกว่าแต่วันนี้ก็เอา
มานี้ก่อนแล้วกัน
นะคะ ให้ทุกคนหายดี กลับมา อาทิตย์หน้าค่อย
เดินดูในห้องดีกว่านะ
คะ วันนี้ก็
จะประมาณนี้นะคะ เดี๋ยวเวลาที่เหลือให้ทำข้อนี้ แล้วมาส่ง
วันนี้เลย ยิ่งดี
นะคะ เวลาที่เหลือทำใส่กระดาษมาส่งอาจารย์
แล้วกัน
นะ ก็ประมาณนี้ค่ะ เวลาที่เหลือทำให้เสร็จภายในวันนี้นะคะ
ข้อเดียวเองนะคะ ข้อเดียว
มีใครสงสัยไหมคะ
อุ๋ยสงสัยไหม
อุ๋ยเปิดไม่ได้หรือเปล่า
ไม่มีค่ะ อาจารย์เดี๋ยวถ้าอย่างไร เดี๋ยวให้อุบลไปส่งหรือยังไงคะเพราะว่าบนขึ้น
(อาจารย์เกวลี) ไม่ ๆ ส่วนมากอยู่ในการอยู่หอนี่แหละ
// ตอนนี้เหลืออยู่ DSS ประมาณ
4 คน ค่ะ (อาจารย์เกวลี) ใส่ได้ก็เอามา
Ok Thank You
ค่ะ วันนี้ก็ประมาณนี้ค่ะ ขอบคุณทุกคนมากนะคะ ที่
ยังตั้งใจเรียนอยู่ แล้วก็งานอย่าลืมส่งวันนี้นะคะ ใครอยู่ DSS ก็
ทำให้เสร็จ
แล้วก็ฝากเพื่อนมาส่งรวมกันมาส่งก็ได้นะคะ ถ้าใครอยู่หอก็จะมาทำอยู่ DSS ก็ได้ หรือว่าทำเสร็จแล้วมาส่งที่
อาจารย์ก็ได้
โอเคค่ะ วันนี้ก็ประมาณนี้ค่ะ ขอบคุณล่ามด้วยนะคะ
ค่ะ ขอบคุณค่ะ
ปุ๋บ วันนี้ครบ
นะ ปุ๋ยไปแล้ว