--- title: หลักการและระบบการจัดการฐานข้อมูล อ.เกวลี วันที่ 13 ธ.ค. 2565 ตู่ นาโน subtitle: date: วันศุกร์ที่ 31 มีนาคม 2566 เวลา 09.54 น. --- (ข้อความสดจากระบบถอดความเสียงพูดทางไกล) (อาจารย์เกวลี) เดี๋ยวเริ่มเลยก็ได้ค่ะ น่าจะประมาณนี้นะคะ วันนี้จะเป็นบทที่ 5 เกี่ยวกับกระบวนการการปรับบรรทัดฐาน ภาษาอังกฤษก็จะเป็น นกอะไร Season มันก็จะมีความหมายแล้วก็จุดประสงค์ของการทำการปรับมาตรฐานนะคะ แล้วก็จะเกี่ยวกับฟังก์ชันการขึ้นต่อการ และกระบวนการในการทำ Normalization ด้วยนะคะ มี 3 ข้อวันนี้ โดยการประปาฐานนะคะ หรือว่า Normalization นี่ มันจะเป็นทฤษฎีที่ คนที่จะต้องออกแบบฐานข้อมูลเขาจะต้องมาแปลงข้อมูลนี่ เขาจะแปลงข้อมูลนี่ เขาอาจจะเป็นข้อมูลที่ซับซ้อนนะคะ ให้มันง่ายเข้าใจก็ง่ายใช้งานก็ง่ายแล้วก็ต้องเป็นระบบที่หลังจากออกแบบแล้วนำไปใช้งานจริงนี่ ต้องเกิดปัญหาน้อยที่สุดนะคะ โดยกระบวนการทำงานนะคะ ในการปรับบรรทัดฐานนี่ มันจะมีอยู่ 3 ระดับนะคะ จริง ๆ เราก็จะเรียกสั้น ๆ ว่า ระดับแรกนึกว่า 1 nf นะคะ 2nf 3nf นะคะ ในระดับปริญญาตรีนี่ ถึง 3NF ได้ ก็ถือว่าเก่งมากแล้วนะคะ แต่ถ้าเป็นระดับที่สูงขึ้นไปอีก ก็จะสูงได้ถึง 5 nf เลย นะคะ อันนี้เป็นแผนภาพกระบวนการทำงานนะคะ ก่อนที่เราจะมาทำกระบวนการปรับบรรทัดฐานได้นี่ มันก็ต้องวิเคราะห์ความต้องการของผู้ใช้งานก่อนว่าเขาต้องการระบุการฐานข้อมูลแบบไหนมีความต้องการใช้ตารางกี่ตาราง ในฐานข้อมูลนะคะ หลังจากนั้น ก็จะวาดรูป เหมือนที่เราเรียนอาทิตย์ที่แล้วนะคะ ว่าเป็นแผนภาพเพื่อให้เข้าใจว่า สิ่งที่เรากำลังจะออกแบบหรือสิ่งที่เรากำลังจะทำฐานข้อมูลนี่มันตรงตามความต้องการหรือเปล่านะคะ แต่รูปแบบของรูปที่เราวาดอาทิตย์ที่แล้วนี่ มันจะยังเป็นรูปแบบที่ยังไม่เป็นบรรทัดฐานหรือว่ายังไม่มีการจัดระเบียบความคิดที่ตัดข้อมูลที่ซ้ำซ้อนกันออกไป หรืออาจจะมีคีย์หลักที่มันทับซ้อนกันนะคะ เราก็เลยจะต้องเอาข้อมูลจากที่เราว่าอาทิตย์ที่แล้วนี่ มาเข้าสู่กระบวนการปรับพื้นฐานก่อน ซึ่งอย่างที่บอกเราทำแค่ถึง 3NF นี่ก็เก่งมากแล้ว อย่างน้อยต้องถึง 3 นะคะ ไอ้บอยคอร์ดกับไม่ทำก็ก็ก็รักไว้ได้นะคะ แต่อย่างน้อยต้องถึงวัตถุประสงค์ของการปรับบรรทัดฐานนะคะ แน่นอนลดความซ้ำซ้อนของข้อมูล ก็คือถ้าข้อมูลมันซ้ำกันนี่ เราก็ต้องตัดออกไปเพราะถ้ามันยิ่งซ้ำกัมากเท่าไหร่เนื้อหาแล้วก็พื้นที่ในการเก็บข้อมูลอย่างมันก็จะเยอะ ก็ทำให้สิ้นเปลืองประมาณเหมือนกันรวมถึงลดปัญหาความไม่ถูกต้องของข้อมูล ข้อมูลนี่ นอกจากที่จะไม่เกิดความซับซ้อนกันแล้วนี่ อาจจะเกิดจากสาเหตุคือถ้าเหมือนที่ตัดทุกอย่างก็คือถ้าเราเก็บข้อมูลหลาย ๆ ที่นักศึกษาเก็บข้อมูลที่คณะด้วยเก็บที่มหาวิทยาลัยด้วยเก็บที่สาขาด้วยนี่ บางทีถ้าวันนึงคุณอาจจะเปลี่ยนแปลงเบอร์โทรศัพท์ที่บ้าน เราก็ต้องไปตามเปลี่ยนทุกที่เลยนะคะ ซึ่งเสียเวลา แล้วคราวนี้ก็จะเป็นที่เถียงกันว่า สรุปแล้วเบอร์ไหนถูก เบอร์ไหนผิดนะคะ โดยวัตถุประสงค์ของการปรับบรรทัดฐานนี่ ก็คือข้อมูลจะถูกเก็บอยู่แหล่งเดียวนะคะ เก็บไว้ที่เดียวแต่สามารถเรียกใช้และใช้งานได้หลาย ๆ ที่พร้อมกันได้ แต่ถ้ามันมีการเปลี่ยนแปลงข้อมูลหรือมีการลบหรือการเพิ่มข้อมูลเพื่อให้ข้อมูลเป็นปัจจุบันที่สุดเราเลยเก็บข้อมูลไว้ที่เดียว มีแก้ไขก็ที่เดียวนะคะ เพราะฉะนั้น ข้อมูลก็จะเป็นข้อมูลที่ถูกต้อง แล้วก็ปัจจุบันด้วย แล้วก็อย่างที่ใช้เหตุผลเมื่อกี้นี้นะคะ ในการเก็บข้อมูลที่เดียวนี่ มันก็จะลดความผิดพลาดที่เกิดจากการเปลี่ยนแปลงข้อมูลปรับปรุงข้อมูลนะคะ เหมือนที่บอกก็คือถ้าเปลี่ยนเบอร์โทรศัพท์หรือเปลี่ยนบ้านเลขที่นะคะ ก็เปลี่ยนแปลงที่เดียวเราสามารถเรียกใช้ข้อมูลได้พร้อมกันถ้าต้องการข้อมูลนะคะ ความซ้ำซ้อนกันของข้อมูล นี่ หรืออาจจะเกิดความผิดพลาดของการปรับปรุงข้อมูลนะคะ แนวคิดที่สำคัญของการออกแบบฐานข้อมูลนี่ ก็คือการออกแบบข้อมูลที่ซ้ำซ้อนกันน้อยที่สุดนะคะ เพื่อประหยัดเนื้อที่ในการเก็บข้อมูล แล้วก็ลดปัญหาที่จะเกิดขึ้น ถ้าสมมติว่าข้อมูลมันซ้ำซ้อนกันมากเกินไปหรือปริมาณข้อมูลมันเยอะเกินไปนะคะ อย่างเช่นตัวอย่างนะคะ ตารางด้านบนตารางสีเทาข้างบนนะคะ จะเป็นตัวอย่างการออกแบบฐานข้อมูลที่ดี เดี๋ยวจะมาให้ดูว่าทำไมมันถึงดีกว่าในตารางข้างบนนี่ มันจะมีตารางของพนักงานแล้วก็ตารางสาขานะคะ จะเห็นได้ว่าตารางพนักงานนี่ จะมีส่วนหนึ่งที่เป็นข้อมูลของรหัสสาขา ห้อยไว้อยู่ ถามว่าทำไมไม่เอาข้อมูลสาขามาไว้ในตารางพนักงานทีเดียวเลยล่ะ ทำไมต้องแยกออก นะคะ อย่างถ้าศึกษาดูคนแรกนะคะ พนักงานคนแรกรหัสสาขา B005 ก็คือสาขาเชียงใหม่ ถ้าสมมติว่าพนักงานคนที่ 1 ลาออกก็จะมีการลบข้อมูลเกิดขึ้นใช่ไหมคะ มีการลบข้อมูล ลบคนนี้ออก ขีดฆ่าทิ้ง สิ่งไหนที่หายไปบ้างแน่นอน สาขาเชียงใหม่จะหายไปด้วย นะคะ ถ้าสมมติเราอยู่ด้วยกัน แต่ถ้าสมมติพนักงานคนนี้ลาออก สาขาเชียงใหม่ยังอยู่ไหม ยังอยู่นะคะ ซึ่งแตกต่างจากด้านล่างนะคะ ด้านล่าง เห็นไหมคะ ว่าถ้าสมมติว่าอาจารย์ลบทิ้งหมดเลย กากบาททิ้งสาขาเชียงใหม่หายไปด้วย อันนี้คือการออกแบบที่ไม่ดี เหมือนคนข้างล่างออกสาขาพิษณุโลกก็หายไปด้วยแต่ถ้าเป็นตารางด้านบนถ้าคนนี้ลาออกสาขายังอยู่ไหมยังอยู่เหมือนเดิม นะคะ อันนี้คือการออกแบบฐานข้อมูลที่ดี ถ้าข้อมูลตัวไหนที่มันมีผลกระทบต่อกัน เราจะต้องแยกตารางออกนะคะ ตัวอย่าง นะคะ ถ้าการออกแบบที่ดีนี่ เราจะลดปัญหาความซ้ำซ้อนของข้อมูลออกได้ อบาสเช่นตัวนี้อันนี้เป็นตารางที่ออกแบบที่ไม่ดีนะคะ เห็นไหมคะ ว่ามันจะมีรหัสสาขาแล้วก็ที่อยู่ อยู่ในตารางเดียวกันถ้าสมมติว่าอาจารย์เพิ่มเข้ามาใหม่อีก 1 คนนะคะ เป็น EM10 ตรงนี้นะคะ ถ้าต้องการเพิ่มพนักงานสาขาเชียงใหม่ อาจารย์ก็ต้องมากรอกข้อมูลตรงนี้อีก ว่าเชียงใหม่นะ นู่นนี่นั่นโน่น แต่ถ้าการออกแบบฐานข้อมูลที่ดีนี่ เราแค่ใส่รหัสสาขา ไม่จำเป็นจะต้องพิมพ์ที่อยู่ทุกครั้งก็ได้นะคะ นะคะ เหมือนเวลาคุณไปธนาคารใช่ไหมคะ คุณก็แค่ยื่นบัตรประชาชนพนักงานธนาคารก็จะกรอกเลขบัตรประชาชนคุณลงไป หรืออาจจะเอาชิปการ์ดของคุณนี่เสียบเข้าไปในเครื่องถามว่าตอนนี้เราได้กรอกข้อมูลไหมไม่ต้องนะคะ ขอแค่มีเลขบัตรประชาชน ข้อมูลทุกอย่างที่คุณมีเขาจะดึงออกมาจากระบบให้เลย เราไม่ต้องมาเสียเวลากรอกนะคะ เหมือนเมื่อก่อนนี่ ต้องเขียนใส่กระดาษ เลขบัตรประชาชนอะไร ชื่ออะไรนามสกุลอะไร ที่อยู่ที่ไหนเบอร์โทรศัพท์อะไรเดี๋ยวนี้ไม่ต้องเลยขอแค่มีเลขบัตรประชาชนข้อมูลทุกอย่างเราสามารถดึงขึ้นมาได้อยู่แล้ว นะคะ อันนี้ก็เช่นเดียวกัน ถ้าการออกแบบไม่ดีนี่ แต่เราต้องกรอกข้อมูลถูกต้องทุกช่องทุกช่องเลยนี่ มันทำให้อาจจะคนเดียวไม่เดือดร้อนค่ะ ถ้าเป็นพนักงานใหม่เป็นเหมือนโรงงานน่ะค่ะ ที่เป็นพันคนต้องนั่งกรอกเชียงใหม่เป็นพัน ๆ ครั้งนี่ เสียเวลามาก ๆ นะคะ อันนี้คือการออกแบบที่ไม่ดีนะคะ กับอีกอย่างหนึ่ง ถ้าสมมติว่า เมื่อกี้อาจารย์เพิ่มพนักงานแล้ว ถ้าอาจารย์อยากเพิ่มแค่สาขานะคะ อยากเพิ่มแค่สาขาซึ่งในตารางนี้ คีย์หลักจำได้ไหมคะ คีย์หลักจะเป็นคีย์ที่ขีดเส้นใต้ซึ่งอาจารย์อยากเพิ่มสาขาสมุทรปราการจะเพิ่ม B100 สกลนครนะคะ ถามว่าเพิ่มได้ไหม อาจจะเป็นการตั้งสาขาแต่ยังไม่มีพนักงานหรอกนะคะ ถ้าจากตารางนี้ นะคะ เราจะเพิ่มเฉพาะชื่อสาขาไม่ได้ เนื่องจากเรายังไม่มีรหัสพนักงาน เพราะรหัสพนักงานเป็นคีย์หลักนะคะ คีย์หลัก คือ คีย์หลักคุณสมบัติมันคือเป็นค่าว่างไม่ได้ ก็ทำให้เราเพิ่มสาขาไม่ได้ เพราะเราไม่มีพนักงานอันนี้ก็เป็นข้อผิดพลาดในการเพิ่มข้อมูลถ้าเราออกแบบตารางแบบนี้นะคะ ก็คือปัญหาที่เกิดขึ้นจากการออกแบบตารางไม่ดี กับปัญหาต่อมาเป็นปัญหาการลบข้อมูลที่อาจารย์บอกนะคะ ถ้าพนักงานคนนี้ลาออก สาขาเชียงใหม่หายไปด้วยนะคะ โดนลบไป กรณีความผิดพลาดจากการเปลี่ยนแปลงนะคะ เหมือน B003 B003 นี่ค่ะ เป็นกรุงเทพฯ ใช่ไหมคะ แล้วคราวนี้ข้อมูลมันอยู่ในตารางเดียวกัน ถ้านักศึกษาจะแก้สมมติว่าเราย้ายจากกรุงเทพฯ ไปอยู่นนทบุรีสมมติมีพนักงาน 3,000 คน คุณต้องแก้กรุงเทพฯ 3,000 ครั้ง เป็นนนทบุรี พนักงานมีคน 2 คนไม่ใช่ปัญหาค่ะ แต่ถ้าคุณเป็นโรงงานขนาดใหญ่นั่งแก้ทีละ 3,000 คน ไม่ใช่เรื่องสนุกแน่ ๆ นะคะ อันนี้ก็เป็นปัญหานะคะ เพราะฉะนั้น เราควรแยกตารางพนักงานกับตารางสาขาออกจากกันนะคะ มีเป็นเหตุผล อันนี้คือขนาดข้อมูลขนาดเล็กนะคะ เรายังเห็นปัญหาขนาดนี้ ถ้าสมมติว่าเป็นองค์กรขนาดใหญ่เป็นบริษัทเป็นโรงงานระดับโรงเรียนมีนักเรียนเป็น 200-300 2,000-3000 คนก็ได้นะคะ มีปัญหาเยอะมากถ้าสมมติว่าเราจัดการตารางไม่ดี จากปัญหาที่เกิดขึ้นเมื่อกี้นะคะ อย่างที่บอกค่ะ เราจะแก้ปัญหาโดยการแยกตารางเป็น 2 ตารางแบบนี้นะคะ ฟังก์ชันการขึ้นต่อกันนะคะ อันนี้ เดี๋ยวจะเป็นเกี่ยวกับตารางหนึ่งนะคะ มีผลไแอีกตารางหนึ่ง เราจะเรียกว่าเป็นฟังก์ชันการขึ้นต่อกัน เดี๋ยวดูตัวอย่างเลยละกันอย่างเช่นตารางนี้นะคะ ดูจากรหัสพนักงานนะคะ เราจะเห็นได้ว่ารหัสพนักงานจะส่งผลกับชื่อตำแหน่ง สัญลักษณ์ของการขึ้นต่อกันนะคะ อันไหนเป็นตัวหลักจะชี้ไปที่ตัวรองนะคะ ตามหัวลูกศรเลย ดูทิศทางตามหัวลูกศรนะคะ อันไหนเป็นตัวหลักอันไหนเป็นตัวรองนะคะ อย่างเช่น ตัวนี้ ถามว่าตำแหน่งมาชี้ที่รหัสพนักงานได้ไหมนะคะ ถามว่า ไม่ได้นะคะ เพราะการขึ้นต่อการจะต้องเป็นลักษณะ 1 ต่อ 1 เท่านั้นนะคะ เป็น 1 ต่อกลุ่มไม่ได้ ชนิดของการขึ้นต่อกันนะคะ จะมีอยู่ 4 ชนิดนะคะ ชนิดแรกเป็นการขึ้นต่อกันโดยสมบูรณ์นะคะ ซึ่งอาจจะเป็นเกี่ยวกับตารางนะคะ จะมีคอลัมน์ 1 คอลัมน์หรือมากกว่า 1 คอลัมน์มาประกอบกัน โดยในคอลัมน์นั้น ๆ นี่ ค่าที่ระบุความพิเศษของแถว ๆ หนึ่ง ได้อย่างชัดเจนนะคะ คือ Attribute จะเป็นค่าเฉพาะที่บอกเลยว่า Record ข้อมูลแถวนั้นนี่ มันมีลักษณะพิเศษเฉพาะตัวอย่างไร โดยในทุกความสัมพันธ์นี่ จะต้องระบุค่าคีย์หลักไว้ด้วย ซึ่งคีย์หลักนี้คือต้องเป็นค่าเอกลักษณ์คือไม่ซ้ำกันอยู่แล้วนะคะ อย่างเช่น การขึ้นต่อกันอย่างสมบูรณ์อันแรกนะคะ Attribute ที่ ก็คือคอลัมน์ที่ไม่ใช่คีย์หลักคีย์หลักจำได้ใช่ไหมคะ คีย์หลักจะเป็นคอลัมน์ที่มีขีดเส้นใต้นะคะ คอลัมน์ที่ไม่ใช่คีย์หลักจะขึ้นตรงต่อคอลัมน์ที่เป็นคีย์หลักคอลัมน์เดียวเท่านั้นนะคะ เช่น เลขบัตรประชาชน ตัวนี้ จะขึ้น จะเป็นเจ้าของชื่อนี้เท่านั้นนะคะ เพราะฉะนั้น การขึ้นตัวกันอย่างสมบูรณ์จะเป็นลักษณะแบบ 1 ต่อ 1 นะคะ เลขบัตรประชาชน 1 เลข จะต้องเป็นของคนคนเดียวเท่านั้น ไม่ใช่ว่าเลขประชาชนนี้ใช้ 10 คน เป็นไปไม่ได้นะคะ ตัวอย่างนะคะ ตารางที่มีคอลัมน์หลายตัวนะคะ ขึ้นอยู่กับคีย์หลักตัวเดียว เช่น คน 1 คนนี่ ก็จะมีข้อมูลชื่อนามสกุลวันเดือนปีเกิด วันที่ทำบัตรใช่ไหมคะ แต่ว่าเขาจะต้องขึ้นตรงกับเลขบัตรประชาชนเดียวเท่านั้น ถามว่า 3 คนนี้ อาจจะเกิดวันเดียวกันก็ได้ค่ะ แต่เลขบัตรประชาชนเขาจะไม่เหมือนกัน หรือเขาอาจจะมาทำบัตรวันเดียวกันนะคะ แต่เลขบัตรประชาชนเขาจะไม่ซ้ำกัน คืออะไรซ้ำกันได้ทุกอย่างค่ะ ยกเว้นหมายเลขบัตรประชาชนแต่บางตารางนะคะ ก็อาจจะเป็นการรวมตัวกันของคีย์หลัก มากกว่า 1 คีย์หลักนะคะ มารวมกัน เช่น นักศึกษาคนนี้นะคะ รหัสนักศึกษานี้ ลงทะเบียนวิชานี้ ได้เกรดอะไร อันนี้ก็เป็นความสัมพันธ์ที่เกิดขึ้นได้เหมือนกันค่ะ ถามว่าบัตรนักศึกษาซ้ำกันได้ไหม ไม่ซ้ำ รหัสวิชาซ้ำกันได้ไหม ไม่ซ้ำนะคะ เหมือนชื่อวิชาอาจารย์ก็รหัสหนึ่ง ชื่อคนอื่นก็รหัสวิชาอีกอันนึงนี้จะไม่ซ้ำกันอยู่แล้วนะคะ ต่อมาจะเป็นการขึ้นต่อกันบางส่วนมันก็จะเป็นอาศัยความสัมพันธ์ที่เกิดขึ้นจากคีย์ผสมนะคะ อาจจะเป็นขึ้นตรงจากตารางอื่น หรือส่งตารางมารวมกัน อาจจะไม่ใช่คีย์หลักก็ได้ แต่มันมีความหมายกับคอลัมน์หนึ่ง เดี๋ยวจะยกตัวอย่างเลยดีกว่านะคะ อย่างเช่น เมื่อว่าตารางเทียบไซส์ให้ดูเมื่อกี้นะคะ ก็จะมีรหัสนักศึกษา รหัสวิชา มีเกรด แล้วก็มีการบอกด้วยว่ารหัสวิชานี้เป็นชื่อวิชาอะไรนะคะ มันจะเป็นการเกิดขึ้นเมื่อคีย์หลักประกอบกันด้วยคอลัมน์หรือว่า Attribute รวมกัน โดยบางส่วนของคีย์หลักสามารถไประบุค่าอย่างอื่นที่ไม่ใช่คีย์หลักได้นะคะ อย่างเช่น ในความสัมพันธ์นี้ คีย์หลักจะมี 2 ตัวนะคะ มีรหัสนักศึกษากับรหัสวิชานะคะ ถามว่าถ้ามีแต่รหัสนักศึกษา เกรดนะคะ รหัสวิชา แล้วเราจะรู้ไหมว่าชื่อวิชาที่เราเรียนไปนี่ ชื่อวิชาอะไร เหมือนบางคนรู้รหัสวิชาแต่จำชื่อวิชาไม่ได้ก็มี เพราะฉะนั้น รหัสวิชานี่ มันเลยสามารถไปส่งผลกับชื่อวิชาได้เหมือนกันเพราะเป็นตัวระบุว่าไปหลายวิชานี้ชื่อวิชาอะไรก็คือคีย์หลักในตารางนี้ มี 2 อัน แต่มีคีย์หลัก 1 ตัวนี่ ไปมีผลกับอีก Attribute หนึ่งได้นะคะ อันนี้คือความขึ้นต่อกันบางส่วน อย่างเช่น ตัวนี้ก็จะเป็นของจริง ถ้าสมมติว่าอาจารย์ปัดรหัสนักศึกษาออก มีแค่รหัสวิชามีเกรดมีรหัสวิชาเขียนโปรแกรมแล้วถามรู้ไหมคะ ว่าเกรด A ที่ของใครนะคะ หรือว่าอย่าลบก่อนนะ หรือว่าการลบรหัสวิชาออกเหลือแต่นักศึกษาเหลือเกรดเหลือชื่อวิชา แล้วถามว่าแล้วรหัสวิชาอะไรล่ะ ที่เราได้เกรด A เราก็ไม่ทราบอีก เหมือนกันนะคะ อันนี้ก็คือเป็นการขึ้นต่อกันบางส่วนนะคะ อันนี้เป็นตัวอย่างนะคะ ต่อมา เป็นการขึ้นต่อกันแบบส่งต่อ ก็จะเป็นความสัมพันธ์ที่เกิดขึ้นก็ต่อเมื่อมี Attribute หรือว่าคนอื่นที่ไม่ใช่คีย์หลัก แต่ไปสามารถขึ้นสามารถระบุค่าของ Attribute อื่นใน Rccord ได้ ซึ่งเป็นการออกแบบที่ไม่เหมาะสม เพราะส่วนใหญ่แล้วในตารางนี่ ถ้าเราจะระบุค่าอื่นให้กับคอลัมน์อื่นได้ควรจะต้องเป็นคีย์หลักเท่านั้นดูตัวอย่างนะคะ เช่น ตารางนี้ เขาบอกว่าสิ่งที่เกิดขึ้น คือ Attribute คือ คอลัมน์ที่ไม่ใช่คีย์หลักหรือ Primary Key นะคะ ก็คือไม่ใช่คอลัมน์ที่มีเส้นขีดมันไประบุค่าอื่น ๆ ในตารางได้ เช่น ตารางนี้ คีย์หลักก็คือเลขประจำตัว เลขประจำตัวนี่ ไปมีผลกับชื่อนามสกุลที่อยู่ตำแหน่งใช่ไหมคะ เขานี่รถประจำตำแหน่งมันไม่ถูกระบุโดยเลขประจำตัวมันถูกระบุโดยรหัสตำแหน่งเหมือนถ้าเป็นผู้จัดการนี่ แทนที่ผู้จัดการนะคะ จะรู้เลยว่ารถประจำตำแหน่งคืออะไร แต่เขาไปเช็กที่รหัสตำแหน่ง แทนที่จะเช็กกับเลขประจําตัว อันนี้คือการออกแบบที่ไม่ดี เพราะฉะนั้น ถ้าสมมติว่าจะให้รถประจำตำแหน่ง วิธีการแก้ปัญหา ก็คือเราควรจะแยกตารางนี้ออกไปสร้างตารางใหม่เลยค่ะ มันไม่ควรจะมาขึ้นกับตารางที่มีคีย์หลักหลักแต่ไม่สามารถระบุค่าข้อมูลตรงนี้ได้นี่ มันไม่ควรทำกับต่อมาเป็นการขึ้นต่อกันเชิงกลุ่มนะคะ ก็จะเป็นความสัมพันธ์ระหว่างคอลัมน์ หรือ Attribute นี่ ขึ้นต่อกันแบบสมบูรณ์นะคะ ก็ไปสามารถระบุค่าอื่นได้ โดยที่อย่างเช่นตัวอย่าง ในตารางนี้นะคะ จะมีรหัสหลักสูตร สามารถระบุรหัสวิชาได้หลายวิชา เช่น จริง ๆ ในรหัสนักศึกษาจะเห็นได้ว่ามีเลข 122 รหัสนักศึกษา B122 คืออะไร 122 ก็คือหลักสูตรที่เราเรียนอยู่ซึ่งในหลักสูตรที่โรงเรียนนี่มันมีวิชามากกว่า 20 วิชานะคะ ก็คือรหัสหลักสูตรนี่ มันสามารถระบุรหัสวิชาได้หลากหลายรหัสวิชามาก ๆ นะคะ อันนี้ก็คือการขึ้นต่อกันแบบมีค่ามากกว่า 1นะคะ รหัสหลักสูตรสามารถระบุรหัสวิชาได้หลายค่านั่นเองนะคะ แล้วรหัสหลักสูตร ก็สามารถระบุค่ารหัสนักศึกษาได้หลายคนเช่นกัน เหมือนตอนนี้ หลักสูตรที่เราเรียนนี่ มีนักศึกษาเกือบ 100 คน รหัสหลักสูตรเดียวนะนะคะ นี่คือความสัมพันธ์แบบสามารถระบุค่าได้มากกว่า 1 นั่นเองแบบไหนค่าเพราะฉะนั้น วิธีการแก้ปัญหาของสิ่งที่เกิดขึ้นนะคะ เราเลยจะต้องมีการกระบวนการปรับบรรทัดฐาน หรือว่ากระบวนการปรับปรุงโครงสร้างของฐานข้อมูลนะคะ ที่มีความซ้ำซ้อนกัน ให้อยู่ในรูปแบบที่เป็นบรรทัดฐาน ก็คือเป็นรูปแบบที่พร้อมที่จะเอาไปพัฒนาเป็นฐานข้อมูลได้นะคะ แต่โดยหลักการนะคะ ที่บอกมี 5 ระดับแต่ระดับที่ 3 นี่ ก็ถือว่าเพียงพอสำหรับการออกแบบฐานข้อมูลในปัจจุบันแล้ว โดยคีย์หลักของการทำงานนะคะ ขั้นที่ 1 นะคะ กำจัดกลุ่มของข้อมูลที่มีความซ้ำซ้อนกันออกไป ขอแรกง่ายมาก ๆ ง่ายที่สุด ก็คือ 1 nf นะคะ ต่อมา ขั้นที่ 2 หรือ 2 nf จะกำจัดการขึ้นต่อกันบางส่วนออกนะคะ ขั้นสุดท้าย 3nf นะคะ กำจัดการขึ้นต่อกันของ Attribute ที่ไม่ใช่คีย์หลักนะคะ เดี๋ยวจะมาดูทีละขั้นว่ามันจะต้องเป็นอย่างไรบ้างนะคะ ข้อแรกง่ายที่สุดง่ายมาก ๆ นะคะ ให้นักศึกษาจำกระบวนการหลัก ๆ จะมีอยู่ 3 ข้อนะคะ ขั้นตอนการแรกเลยดูก่อนว่าค่าซ้อนกันไหม ค่าที่ 2 คือมันขึ้นต่อกันแค่บางส่วนหรือเปล่าขั้นที่ 3 ถ้าอันไหนไม่ใช่คีย์หลัก แต่มันไปส่งผลกระทบกับข้อมูลอื่นได้หรือเปล่า ดูข้อนตอนที่ 1 ก่อนนะคะ ขั้นตอนที่ 1ง่ายมากนะคะ ทุก ๆ คอลัมน์ Attribute Records จะต้องเป็นค่า Single Value คือ มีค่าเดียวเท่านั้น จะใส่แบบนี้ไม่ได้ เพราะฉะนั้น ค่าข้อมูลทุกแถวจะต้องไม่มีค่าที่ซ้ำกัน อย่างนี้นักศึกษาคนที่ 1 แน่นอนทั้ง 1 เทอมนี่ คุณลงทะเบียนประมาณ 6-7 วิชาใช่ไหมคะ ข้อมูลมันก็จะเป็นแบบนี้ถ้าเราไม่มีการทำ Normalization แต่คราวนี้ขั้นตอนที่ 1 เราจะข้อมูลที่ซ้ำซ้อนกันออก วิธีการง่ายมากค่ะ คือ แยกข้อมูลออกเป็นอย่างละแถวที่ไม่ซ้ำกัน ดูตัวอย่างนะคะ วิธีการทำ 1 nf ง่ายมากค่ะ ถ้าข้อมูลตัวไหนเป็นกลุ่มนี่ค่ะ คนที่ 1 วิชา ลงทะเบียนเรียน 3 วิชาใช่ไหมคะ คนที่ 2 มี 2 วิชา สามารถทำในรูปแบบ 1NF ก็คือเอามันกระจายออกมาค่ะ ย้ายข้อมูลพวกนี้ออกมา กระจายออกใช่ไหมคะ กระจายออก1NF ง่ายมาก ข้อมูลพวกนี้ก็ทำซ้ำลงมา ทำซ้ำลงมา ทำซ้ำลงมา ทำซ้ำลงมาถามว่า อาจารย์เขาทำไมทำไม 001 มันซ้ำกันได้ล่ะ แต่รหัสวิชาเขาไม่ซ้ำกัน เห็นไหมค่ะ 1NF เลยง่ายมากค่ะ ข้อมูลที่มันเป็นก้อนอย่างนี้เรากระจายออกมาเป็นแยกออกมาเป็นบรรทัดบรรทัดเลย แค่นั้นเองอย่างน้อยในข้อสอบต้องทำให้ได้ มันง่ายที่สุดแล้วนะคะ อย่างตัวนี้นะคะ ก็กระจายออกมาแล้วคราวนี้ถ้าเรากระจายข้อมูลเรียบร้อยแล้วนะคะ ก็จะมาดูว่า อย่างในตารางนี้ค่ะ มันมีตารางของพนักงานใช่ไหมคะ เขาจะมีคีย์หลัก 1 ตัวแล้ว แต่ว่ามันจะมีตัวนี้ค่ะ ตัวที่ 1 ตัวที่ 2 ที่มีคุณสมบัติเป็นคีย์หลักได้เราต้องแยกมันออกนะคะ กระบวนการนะคะ ดูก่อนว่าตารางเมื่อกี้นะคะ สิ่งที่ขึ้นตรงกับคีย์หลักตัวนี้นะคะ ก็จะเป็นตัวที่ 1 ตัวที่ 2 ตัวที่ 3 สังเกตเราว่าคีย์หลักมีตัวเดียวแต่ข้อมูลมีเยอะมากนะคะ เราแยกออกมาได้อันแรกเลย ก็จะมีรหัส Projectนะคะ แล้วก็ชื่อ Projectนะคะ ใครเป็นผู้จัดการเงินเดือนเท่าไหร่งบประมาณเท่าไรคือ มันจะเชื่อมโยงกับข้อมูลที่เป็นคีย์หลักก็คือ Project Code ตัวนี้ ส่วนตัวนี้เป็นคีย์คู่แข่ง 2 ตัวนะคะ 2 ตัวนี่ มันสามารถทำหน้าที่เป็นคีย์หลักให้กับอย่างตัวนี้นะคะ มันจะเป็นคีย์หลักให้กับชื่อของพนักงาน อย่างตัวนี้ก็จะเป็นคีย์หลักสำหรับชื่อแผนกนะคะ ถามว่ามันขึ้นตรงกับ ProjectCode ไหม ไม่นะคะ เพราะฉะนั้น การทำขั้นตอนต่อมานะคะ 2NF ขั้นตอนที่ 1เราจะต้องทำ 1NF มาเรียบร้อยแล้ว ซึ่งง่ายมาก ถัดมา แล้วก็ต้องมากำจัดของการขึ้นต่อกันบางส่วนออก ก็คือการกำจัด Attribute ที่ไม่ขึ้นต่อคีย์หลักของตารางนั่นเองจะออกนะคะ อย่างเช่นตัวนี้นะคะ การขึ้นต่อกันบางส่วนจะเห็นได้ว่ารหัสวิชากับชื่อวิชามันไม่ขึ้นตรงกับรหัสนักศึกษาใช่ไหมคะ อันนี้จำได้นะรูปเดิมนะคะ รูปเดิม วิธีกำจัดปัญหา เราก็ดึงสิ่งที่มันเป็นปัญหาค่ะ สิ่งที่มันไม่ขึ้นตรงกับคีย์หลักตัวนั้น ไปสร้างตารางใหม่ สร้างตารางเพิ่มนะคะ เอาสิ่งที่เป็นปัญหาออกมา ไปใส่ตารางใหม่ กำหนดคีย์หลักใหม่นะคะ ในตารางเดิมนะคะ เราก็เอาคีย์หลักของตารางใหม่ไปใส่แค่นั้นเองนะคะ วิธีการก็คือเหมือนรูปนี้นะคะ สิ่งที่เป็นปัญหาที่จะยกตัวอย่าง ก็คือรหัสวิชา รหัสวิชาเพราะรหัสวิชามันไม่ได้ขึ้นตรงกับรหัสนักศึกษานะคะ เพราะฉะนั้น ไอ้ 2 ตัวนี้ คือ สิ่งที่เป็นปัญหา วิธีการแก้ปัญหา คือ เราสร้างตารางผลการเรียนใหม่ สร้างตารางวิชาใหม่ เห็นไหมคะ ในตารางใหม่เราจะตัดชื่อวิชาออก แต่ต้องเหลือรหัสวิชาไว้เพื่อให้เชื่อมโยงว่ารหัสวิชานี้มันชื่อวิชาอะไรจากอีกตารางหนึ่งแค่นั้นเองนะคะ โอเคค่ะ อันนี้เป็นตัวอย่างของการปรับบรรทัดฐานในรูปแบบของ 2NF เดี๋ยววันนี้จะให้ทำการบ้าน เดี๋ยวค่อยย้อนกลับมาแล้วกันนะคะ เดี๋ยวค่อยย้อนมาสั่ง อันนี้ 1NF เดี๋ยวแก้แล้ว เมื่อกี้นะคะ ขั้นตอนสุดท้ายนะคะ 3nf นะคะ โดยความสัมพันธ์นะคะ ก่อนที่จะทำเป็น 3NF ได้ จะต้องทำ 2NF อย่างนี้มาก่อน หลักของการทำขั้นตอนที่ 3 คือ ต้องเอาความสัมพันธ์ที่ไม่ใช่คีย์หลักออกนะคะ เช่นไม่ใช่คีย์หลักแต่ไปมีผลกับคอลัมน์อื่นไม่ได้นะคะ ไม่ได้ วิธีการแก้ปัญหาเช่นเดิมค่ะ สร้างตารางใหม่ขึ้นมาแก้ปัญหานั้น ๆ อย่างเช่น ในตัวอย่างนะคะ รหัสพนักงานนะคะ ชื่อสกุล รหัสแผนก ชื่อแผนก เงินเดือน จะเห็นได้ว่าในตารางนี้นี่ คีย์หลัก ก็คือรหัสพนักงานนะคะ แต่มันมีรหัสแผนกกับชื่อแผนกติดมาด้วย ซึ่งมันไม่ได้เกี่ยวกับรหัสพนักงานเลยนะคะ วิธีการแก้ปัญหา ก็คือเอารหัสแผนกกับชื่อแผนกไปสร้างตารางใหม่ แต่ต้องยังคงรหัสแผนกไว้ในตารางเดิมนะคะ เพื่อให้มันเชื่อมโยงได้ว่าไอ้แผนก A001 นี่คือแผนกอะไรนะคะ อันนี้คือการแก้ปัญหา ไม่ใช่คีย์หลักแต่ ไปส่งผลกับคอลัมน์อื่นในตารางนะคะ อันนี้คือ 3NF จริง ๆ แล้วอยากให้ลองทำในห้องมากกว่า แต่ด้วยสัปดาห์นี้มันมีข้อจำกัดนะ ก็ไม่เป็นไรอันนี้เป็นตัวอย่างนะคะ สรุปนะคะ วิธีการทำ Normalization หรือว่าการปรับบรรทัดฐานนะคะ 1NF ทุก ๆ Attribute ที่ทุก ๆ คอลัมน์ ในแต่ละแถวจะต้องมีค่าของข้อมูลเพียงค่าเดียวเท่านั้น เช่น เวลาเรากรอกเบอร์โทรศัพท์เราจะไม่ เรามีเบอร์โทรศัพท์ 3 เบอร์ก็จริง แต่เราจะกรอกได้แค่เบอร์เดียว ถ้าอยากใส่เบอร์ที่ 2 ที่ 3 ก็ต้องเพิ่มข้อมูลแถวใหม่ขึ้นมานะคะ ต่อมา 2NF นะคะ ก็ปัญหา คือ ถ้ามีข้อมูลนะคะ ถ้าข้อมูลทุกตัวในตารางนั้น จะต้องขึ้นกับคีย์หลักของตารางตัวเดียวเท่านั้นนะคะ ข้อที่ 3 ถ้าคอลัมน์ไหนที่ไม่ใช่คีย์หลักนะคะ จะมาส่งผลกับคอลัมน์อื่นในตารางไม่ได้นะคะ เพราะฉะนั้น ข้อ 1 นี้คือแค่กระจายตาราง อันที่ 2 อันที่ 3 ถ้ามีปัญหาปึ๊บ เราต้องสร้างตารางใหม่นะคะ การบ้าน เอาอย่างนี้ดีกว่า อาจารย์จะให้ทำ น่าจะส่งวันนี้ เอาแค่ข้อเดียวนะคะ ข้อเดียวพอ เพราะว่าจริง ๆ อยากให้ทำในห้อง เดี๋ยวสัปดาห์หน้าค่อยทำในห้องนะคะ แต่อันนี้จะให้ลองทำดูก่อนว่าที่เรียนไปวันนี้เข้าใจไหมถ้าทำเสร็จแล้วก็ค่อยเอามาส่งที่ตู้ส่งงานอาจารย์เอาเฉพาะข้อนี้นะข้อเดียว ข้อเดียวพอวันนี้ข้อเดียวพอนะคะ ส่งในวันนี้ล่ะให้ลองทำดูว่าเข้าใจไหม ข้อนี้ทำ 1NF ทำ 1NF ทำอย่างไร ง่ายมาก ๆ เลย อาจารย์เว้นช่องว่างให้แล้ว เติมมา2 มิติ คุณเห็นไหมว่ามันมีรหัสวิชาเนี่ยชาเนี่ยต้องทำยังไงกับมันแยกมันออกมาสิ แยกอย่างไรนะคะ เอาข้อเดียวก่อนนะคะ แล้วลองส่งมาให้อาจารย์ดูก่อนว่าเข้าใจมากน้อยขนาดไหนจริง ๆ อยากให้เรียนในห้องมากกว่าแต่วันนี้ก็เอาประมาณนี้ก่อนแล้วกัน ให้ทุกคนหายดีกลับมาอาทิตย์หน้าค่อยเดินดูในห้องดีกว่านะคะ วันนี้ก็จะประมาณนี้นะคะ เดี๋ยวเวลาที่เหลือให้ทำข้อนี้แล้วมาส่งวันนี้เลยยิ่งดีนะคะ เวลาที่เหลือทำใส่กระดาษมาส่งอาจารย์แล้วกันนะ ก็ประมาณนี้ค่ะ เวลาที่เหลือทำให้เสร็จภายในวันนี้นะคะ ข้อเดียวเองนะคะ ข้อเดียวมีใครสงสัยไหมคะ ปุ๋ยสงสัยไหม ปุ๋ยเปิดไมค์ได้หรือเปล่า (นักศึกษาหญิง) ไม่มีค่ะ อาจารย์เดี๋ยวถ้ายังไงเดี๋ยวให้อุบลไปส่งหรือยังไงคะเพราะว่าบนขึ้นไม่ ๆ ส่วนมากอยู่ในการอยู่หอนี่ล่ะตอนนี้เหลืออยู่ DSS ประมาณ 4 คนค่ะ (อาจารย์เกวลี) ก็รวม ๆ ได้ก็เอามา โอเค Thank You วันนี้ก็ประมาณนี้ค่ะ ขอบคุณทุกคนมากนะคะ ที่ยังตั้งใจเรียนอยู่แล้วก็งานอย่าลืมส่งวันนี้นะคะ ถ้าใครอยู่ DSS ก็ทำให้เสร็จ แล้วก็ฝากเพื่อนมาส่งรวมกันมาส่งก็ได้นะคะ ถ้าใครอยู่หอก็จะมาทำอยู่ DSS ก็ได้หรือว่าทำเสร็จแล้วมาส่งที่อาจารย์ก็ได้ โอเคค่ะ วันนี้ก็ประมาณนี้ค่ะ ขอบคุณล่ามด้วยนะคะ ค่ะ ขอบคุณค่ะ ปุ๋ย วันนี้ครบนะ ปุ๋ยไปแล้ว โอเค