(อาจารย์เกวลี) เดี๋ยวเริ่มเลยก็ได้ค่ะ โอเค ประมาณนี้นะคะ วันนี้จะเป็นบทที่ 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 ก็ได้ หรือว่าทำเสร็จแล้วมาส่งที่อาจารย์ก็ได้โอเคค่ะ วันนี้ก็ประมาณนี้ค่ะ ขอบคุณล่ามด้วยนะคะ ค่ะ ขอบคุณค่ะ ปุ๋บ วันนี้ครบนะ ปุ๋ยไปแล้ว