--- title: ฝึก PE กับ ASR (ห้องเรียนสกล) หลักการและระบบการจัดการฐานข้อมูล อ.เกวลี วันที่ 13 ธ.ค. 2565 subtitle: date: วันพฤหัสบดีที่ 15 ธันวาคม 2565 เวลา 09.05 น. --- (ข้อความสดจากระบบถอดความเสียงพูดทางไกล) เดี๋ยวเริ่มเลยก็ได้ค่ะ น่าจะประมาณนี้นะคะ วันนี้จะเป็นบทที่ 5 เกี่ยวกับกระบวนการการปรับบรรทัดฐาน ภาษาอังกฤษก็จะเป็นนกอะ Season มันก็จะมีความหมายแล้วก็จุดประสงค์ของการทำการปรับมาตรฐานนะคะ แล้วก็จะเกี่ยวกับฟังก์ชันการขึ้นต่อการและกระบวนการในการทำ ด้วยนะคะ มี 3 ข้อวันนี้โดยการบฐานนะคะ หรือว่านอนเมื่อไหร่แฟชั่นเนี่ยมันจะเป็นทฤษฎีที่ คนที่จะต้องออกแบบฐานข้อมูลเขาจะต้องมาแปลงข้อมูล ข้อมูลอาจจะเป็นข้อมูลที่ซับซ้อนนะคะ ให้มันง่ายเข้าใจก็ง่ายใช้งานก็ง่ายแล้วก็ต้องเป็นระบบที่หลังจากออกแบบแล้วนำไปใช้งานจริงต้องเกิดปัญหาน้อยที่สุด โดยกระบวนการทำงานนะคะ ในการปรับบรรทัดฐานเนี่ยมันจะมี 3 ระดับนะคะ จริง ๆ เราก็จะเรียกสั้น ๆ ว่า ระดับแรกเรียกว่า 1nf 2nf 3nf ในระดับปริญญาตรีนี่ถึง 3ms ได้ก็ถือว่าเก่งมากแล้วนะคะ ถ้าเป็นระดับที่สูงขึ้นไปอีกก็จะถึงได้ถึง 5 nf เลยนะคะ อันนี้เป็นแผนภาพกระบวนการทำงานนะคะ ก่อนที่เราจะมาทำกระบวนการปรับบรรทัดฐานได้นี่ มันก็ต้องวิเคราะห์ความต้องการของผู้ใช้งานก่อน ว่าเขาต้องการระบุการฐานข้อมูลแบบไหน มีความต้องการใช้ตารางกี่ตารางในฐานข้อมูลนะคะ หลังจากนั้น วาดรูปแผนที่เรียนอาทิตย์ที่แล้วนะคะ ว่าเป็นแผนภาพเพื่อให้เข้าใจว่าสิ่งที่เรากำลังจะออกแบบ หรือสิ่งที่เรากำลังจะทำฐานข้อมูลมันตรงตามความต้องการหรือเปล่านะคะ แต่รูปแบบของรูปที่เราวันอาทิตย์ที่แล้วนี่ มันจะยังเป็นรูปแบบที่ยังไม่เป็นบรรทัดฐาน หรือว่ายังไม่มีการจัดระเบียบความคิดข้อมูลที่ซ้ำซ้อนกันออกไป หรืออาจจะมีคีย์หลักที่มันนะคะ เราก็เลยจะต้องเอาข้อมูลจากที่เราว่าอาทิตย์ที่แล้วนี่เข้าสู่กระบวนการปรับพื้นฐานก่อนซึ่งอย่างที่บอกเราทำแค่ถึง 3NF เนี่ก็เก่งมากแล้ว แอย่างน้อย 2-3 นะคะ ไอ้บอยคอร์ดกับสีนี่ไม่ทำก็ก็ก็รักไว้ได้นะคะ แต่อย่างน้อยต้องถึงวัตถุประสงค์ของการปรับฐานนะคะ แน่นอนลดความซ้ำซ้อนของข้อมูล ก็คือถ้าข้อมูลมันซ้ำกันนี่ เราก็ต้องตัดออกไปโครงสร้างเป็นสิ่งสำคัญมากเท่าไร เนื้อหาแล้วก็พื้นที่ในการเก็บข้อมูลอย่างมันก็จะเยอะ ก็ทำให้สิ้นเปลืองประมาณเหมือนกันรวมถึงลดปัญหาความไม่ถูกต้องของข้อมูล ข้อมูลนี่ นอกจากที่จะไม่เกิดความซ้ำซ้อนกันแล้วเนี่ย วันจันทร์อาจจะเกิดจากสาเหตุคือถ้าเหมือนที่ตัดกระจกทุกอย่างก็คือถ้าเราเก็บข้อมูลหลาย ๆ ที่นักศึกษาเก็บข้อมูลที่คณะด้วยเก็บที่มหาลัยด้วยเก็บที่สาขาด้วยนี่บางทีถ้าวันนึงคุณอาจจะเปลี่ยนแปลงเบอร์โทรศัพท์ที่บ้าน เราก็ต้องไปตามเปลี่ยนทุกที่เลยนะคะ ซึ่งเสียเวลาแล้วคราวนี้ก็จะเป็นที่เถียงกันว่าสรุปแล้วเบอร์ไหนถูกเบอร์ไหนผิด โดยวัตถุประสงค์ของการปรับบรรทัดฐานนี่ ก็คือข้อมูลจะถูกเก็บอยู่อย่างเดียวนะคะ เก็บไว้ที่เดียว แต่สามารถเรียกใช้และใช้งานได้หลาย ๆ ที่พร้อมกันได้ แต่ถ้ามันมีการเปลี่ยนแปลงข้อมูลหรือมีการลบหรือการเพิ่มข้อมูลเพื่อให้ข้อมูลเป็นปัจจุบันที่สุด เราจะเก็บข้อมูลไว้ที่เดียว แก้ไขก็ที่เดียว เพราะฉะนั้น ข้อมูลก็จะเป็นข้อมูลที่ถูกต้อง แล้วก็ปัจจุบันด้วยแล้วก็อย่างที่ใช้ในการเก็บข้อมูลที่เดียวนี่ มันก็จะลดความผิดพลาดที่เกิดจากการเปลี่ยนแปลงข้อมูล ปรับปรุงข้อมูลนะคะ เหมือนที่บอกว่าคือถ้าเปลี่ยนเบอร์โทรศัพท์ หรือเปลี่ยนบ้านเลขที่นะคะ ก็เปลี่ยนแปลงที่เดียว เราสามารถเรียกใช้ข้อมูลได้ ทุกที่พร้อมกันถ้าต้องการข้อมูลนะคะ ความซ้ำซ้อนกันของข้อมูลนี่ มันอาจจะเกิดความผิดพลาดของการปรับปรุงข้อมูลนะคะ แนวคิดที่สำคัญของการออกแบบฐานข้อมูลนี่ ก็คือการออกแบบข้อมูลที่ซ้ำซ้อนกันน้อยที่สุด เพื่อประหยัดเนื้อที่ในการเก็บข้อมูลแล้วก็ลดปัญหาที่จะเกิดขึ้น ถ้าสมมุติว่าข้อมูลมันซ้ำซ้อนกันมากเกินไป หรือปริมาณข้อมูลมันเยอะเกินไปนะคะ อย่างเช่นตัวอย่างนะคะ ตารางด้านบน ตารางสีเทาข้างบน จะเป็นตัวอย่างการออกแบบฐานข้อมูลที่ดี เดี๋ยวจะมาให้ดูว่าทำไมมันถึงดีกว่า ในตารางข้างบนนี่ มันจะมีตารางของพนักงาน แล้วก็ต่างสาขาจะเห็นได้ว่าตารางพนักงานนี่ จะมีส่วนหนึ่งที่เป็นข้อมูลของรหัสสาขาห้อยไม่อยู่ถามว่าทำไมไม่เอา ข้อมูลสาขามาไว้ในตารางพนักงานทีเดียวเลยล่ะ ทำไมต้องแยกออกถ้าศึกษาดูคนแรกนะคะ พนักงานคนแรก รหัสสาขา b005 ก็คือสาขาเชียงใหม่ ถ้าสมมุติว่าพนักงานคนที่ 1 ลาออก ก็จะมีการลบข้อมูลเกิดขึ้นใช่ไหมคะ มีการลบข้อมูลบุคคลนี้ออก ขีดฆ่าทิ้ง ขีดฆ่าทิ้ง สิ่งไหนที่หายไปบ้าง แน่นอนสาขาเชียงใหม่จะหายไปด้วย ถ้าสมมุติเราอยู่ด้วยกัน แต่ถ้าสมมุติพนักงานคนนี้ลาออก สาขาเชียงใหม่ยังอยู่ไหม ยังอยู่นะคะ ซึ่งแตกต่างจากด้านล่าง ด้านล่าง เห็นไหมคะว่า ถ้าสมมุติว่าจะลบทิ้งหมดเลย กากบาททิ้ง สาขาเชียงใหม่หายไปด้วย อันีแบบที่ไม่ดีเหมือนคนข้างล่างออก สาขาพิษณุโลกก็หายไปด้วย แต่ถ้าเป็นตารางด้านบนนะคะ ถ้าคนนี้ลาออก สาขายังอยู่ไหมยังอยู่เหมือนเดิม อันนี้คือการออกแบบฐานข้อมูลที่ดี ถ้าข้อมูลตัวไหนที่มันมีผลกระทบต่อกัน เราจะต้องแยกตารางออกนะคะ ตัวอย่างนะคะ ถ้าการออกแบบที่ดีนี่ เราจะลดปัญหาความซ้ำซ้อนของข้อมูลออกได้ อย่างเช่นตัวนี้ อันนี้เป็นตารางที่ออกแบบที่ไม่ดีนะคะ เห็นไหมคะ ว่ามันจะมีรหัสสาขา แล้วก็ที่อยู่อยู่ในตารางเดียวกัน ถ้าสมมุติว่าอาจารย์เพิ่มเข้ามาใหม่อีก 1 คนนะคะ เป็น EM10 ตรงนี้ ถ้าต้องการเพิ่มพนักงานสาขาเชียงใหม่ ก็ต้องมากรอกข้อมูลตรงนี้อีก เชียงใหม่ณโรงเรียนระโนแต่ถ้าการออกแบบฐานข้อมูลที่ดีเนี่ย เราแค่ใส่รหัสสาขา ไม่จำเป็นจะต้องพิมพ์ที่อยู่ทุกครั้งก็ได้ เหมือนเวลาคุณไปธนาคารใช่ไหมคะ คุณก็แค่ยื่นบัตรประชาชน พนักงานธนาคารก็จะกรอกเลขบัตรประชาชนคุณลงไป หรืออาจจะเอาชิปการ์ดของคุณนี่ เสียบเข้าไปในเครื่อง ถามว่าตอนนี้เราได้กรอกข้อมูลไหมไม่ต้อง ขอแค่มีเลขบัตรประชาชนข้อมูลทุกอย่างที่คุณมี เขาจะดึงออกมาจากระบบให้เลยเราไม่ต้องมาเสียเวลาก่อน เหมือนเมื่อก่อนนี่ ต้องเขียนใส่กระดาษและเลขบัตรประชาชน รายชื่ออะไรนามสกุลอะไรที่อยู่ที่ไหนเบอร์โทรศัพท์อะไรเดี๋ยวนี้ไม่ต้องเลยขอแค่มีเลขบัตรประชาชนข้อมูลทุกอย่างเราสามารถดึงขึ้นมาได้อยู่แล้ว อันนี้ก็เช่นเดียวกัน ถ้าการออกแบบไม่ดี แต่เราต้องกรอกข้อมูลถูกต้องทุกช่องเลยเนี่ยมันทำให้อาจจะคนเดียวไม่เดือดร้อนค่ะ ถ้าเป็นพนักงานใหม่เป็นเหมือนโรงงานน่ะค่ะ ที่รักพันคนนั่งกรอก เชียงใหม่เป็นพันครั้งนี่เสียเวลามาก ๆ อันนี้คือการออกแบบที่ไม่ดีนะคะ กลับอีกอย่างนึงถ้าสมมุติว่าเมื่อกี้อาจารย์เพิ่มพนักงานแล้ว ถ้ามันอยากเพิ่มแค่สาขา อยากเพิ่มแค่สาขาซึ่งในตารางนี้กีฬาจำได้ไหมคะ ที่รัจะเป็นคีย์ที่ขีดเส้นใต้ซึ่งอาจารย์อยากเพิ่มสาขาสมุทรจะเพิ่มบี100 สกลนคร ละครนะคะ ถามว่าเพิ่มได้ไหม อาจจะเป็นการตั้งสาขาแต่ยังไม่มีพนักงานหรอกถ้าจากตารางนี้เราจะเพิ่มเฉพาะชื่อสาขาไม่ได้ เรายังไม่มีรหัสพนักงานเพราะรหัสพนักงานเป็นคีย์หลัก คีย์หลักคือคุณสมบัติมันคือเป็นค่าว่างไม่ได้ ก็ทำให้เราเพิ่มสาขาไม่ได้ ไม่มีพนักงาน อันนี้ก็เป็นข้อผิดพลาดในการเพิ่มข้อมูลถ้าเราออกแบบตารางแบบนี้นะคะ นี่ ก็คือกันปัญหาที่เกิดขึ้นจากการออกแบบตารางที่ดี กับปัญหาต่อมาเป็นปัญหาการลบข้อมูลที่อาจารย์บอก ถ้าพนักงานคนนี้ออกสาขาเชียงใหม่หายไปด้วย ลบไปกรณีความผิดพลาดจากการเปลี่ยนแปลงเหมือน b03 b03 นะคะ เป็นกรุงเทพฯใช่ไหมคะ แล้วคราวนี้ข้อมูลมันอยู่ในตารางเดียวกันถ้านักศึกษาจะแก้ สมมุติว่าเราย้ายจากกรุงเทพฯ ไปอยู่นนทบุรี สมมุติมีพนักงาน 3000 คนคุณต้องแก้กรุงเทพฯ 3000 ครั้ง เป็นนนทบุรี ถ้าพนักงานมีคน 2 คนไม่ใช่ปัญหาค่ะ แต่ถ้าคุณเป็นโรงงานขนาดใหญ่ นั่งแก้ทีละ 3000 คนไม่ใช่เรื่องสนุกแน่ ๆ นี่มันก็เป็นปัญหานะคะ เพราะฉะนั้น เราควรแยกตารางพนักงาน กับตารางสาขาออกจากกันนะคะ มีเป็นเหตุผลนี่คือขนาดข้อมูลขนาดเล็กนะคะ แล้วยังเห็นปัญหาขนาดนี้ถ้าสมมุติว่าองค์กรขนาดใหญ่ เป็นบริษัทเป็นโรงงาน หรือระดับโรงเรียนมีนักเรียนเป็น 2 3000 คนก็ได้นะคะ มีปัญหาเยอะมากถ้าสมมุติว่าเราจัดการตารางไม่ดี จากปัญหาที่เกิดขึ้นเมื่อกี้นะคะ อย่างที่บอกค่ะ เราจะแก้ปัญหาโดยการแยกตารางเป็น 2 ตารางแบบนี้นะคะ ฟังก์ชันการขึ้นต่อกันนะคะ อันนี้เดี๋ยว เป็นเกี่ยวกับตารางหนึ่งนะคะ มีผลดีต่ออีตาราง 1 เราจะเรียกว่าเป็นฟังก์ชันการขึ้นต่อกัน เดี๋ยวดูตัวอย่างเลยละกัน อย่างเช่นทางนี้นะคะ ดูจากรหัสพนักงานนะคะ เขียนได้ว่ารหัสพนักงาน จะส่งผลกับชื่อตำแหน่ง สัญลักษณ์ของการขึ้นต่อกันนะคะ อันไหนเป็นตัวหลัก จะชี้ไปที่ตัวรองนะคะ ตามหัวลูกศรเลย ดูทิศทางตามหัวลูกศรนะคะ อันไหนเป็นตัวหลัก อันไหนเป็นตัวรองนะคะ อย่างเช่น ตัวนี้ถามว่าตำแหน่งบัญชี ที่รหัสพนักงานได้ไหมนะคะ ถามว่าไม่ได้เพราะการขึ้นต่อกัน จะต้องเป็นลักษณะหนึ่งต่อหนึ่งเท่านั้น เป็นหนึ่งต่อกลุ่มไม่ได้ ชนิดของการขึ้นต่อกันนะคะ จะมีอยู่ 4 ชนิดนะคะ ชนิดแรกเป็นการขึ้นต่อกันโดยสมบูรณ์นะคะ ซึ่งอาจจะเป็นเกี่ยวกับตารางนะคะ จะมีคอลัมน์ 1 คอลัมน์หรือมากกว่า 1 คอลัมน์มาประกอบกันนะคะ โดยในคอลัมน์นั้น ๆ นี่ จะระค่าที่ระบุความพิเศษของแถว ๆ ได้อย่างชัดเจน จะเป็นค่าเฉพาะที่บอกเลยว่า คอร์ดข้อมูลแถวนั้นเนี่ยมันมีลักษณะพิเศษเฉพาะตัวยังไง โดยในทุกความสัมพันธ์เนี่ยจะต้องระบุค่าคีย์หลักไว้ด้วย ครึ่งปีหลังนี้คือต้องเป็นค่าเอกลักษณ์คือไม่ซ้ำกันอยู่แล้วนะคะ อย่างเช่นการขึ้นต่อกันอย่างสมบูรณ์อันแรกนะคะ ก็คือคอลัมน์ที่ไม่ใช่คีย์ คหลักจำได้ใช่ไหมคะ คีย์หลักจะเป็นคอลัมน์ที่มีขีดเส้นใต้คอลัมน์ที่ไม่ใช่คีย์หลัก จะขึ้นตรงต่อคอลัมน์ที่เป็นคีย์หลัก คอลัมน์เดียวเท่านั้น เช่นเลขบัตรประชาชน จะขึ้นจะเป็นเจ้าของชื่อนี้เท่านั้นนะคะ เพราะฉะนั้น การขึ้นตัวกันอย่างสมบูรณ์จะเป็นลักษณะแบบ 1 ต่อหนึ่นะคะ เลขบัตรประชาชน 1 เลขต้องเป็นของคนคนเดียวเท่านั้น ไม่ใช่ว่าเลขประชาชนที่ใช้ 10 คน เป็นไปไม่ได้นะคะ ตัวอย่างนะคะ ตารางที่มี Column หลายตัวนะคะ ขึ้นอยู่กับคีย์หลักตัวเดียว เช่น คนหนึ่งคนนี่ ก็จะมีข้อมูลชื่อนามสกุล วัน เดือน ปีเกิด วันที่ทำบัตรใช่ไหมคะ แต่ว่าเขาจะต้องขึ้นตรงกับเลขบัตรประชาชนเดียวเท่านั้น ถามว่า 3 คนนี้อาจจะเกิดวันเดียวกันก็ได้ค่ะ เลขบัตรประชาชนเขาจะไม่เหมือนกัน หรือเขาอาจจะมาทำบัตรวันเดียวกัน แต่หมายเลขบัตรประชาชนเขาจะไม่ซ้ำกัน คืออะไรซ้ำกันได้ทุกอย่างค่ะ ยกเว้นหมายเลขบัตรประชาชนต้องไม่ซ้ำกัน แต่บางตารางนะคะ ก็อาจจะเป็นการรวมตัวกันของคีย์หลักมากกว่า 1 ปีหลักนะคะ มารวมกันเช่นนักศึกษาวันนี้ เอกสารนี้ลงทะเบียนวิชานี้ ได้เกรดอะไรอันนี้ก็เป็นความสัมพันธ์ที่เกิดขึ้นได้เหมือนกันค่ะ ว่าบัตรนักศึกษาซ้ำกันได้ไหม ไม่ซ้ำนะคะ รหัสวิชาซ้ำกันได้ไหม ไม่ซ้ำนะคะ เหมือนชื่อวิชาการรหัสหนึ่งเชื่คนอื่นก็รหัสวิชาอีกอันนึงนี้จะไม่ซ้ำกันอยู่แล้วนะคะ ต่อมาจะเป็นการขึ้นต่อกันบางส่วน มันก็จะเป็นอาศัยความสัมพันธ์ที่เกิดขึ้นจากคีย์ผสมนะคะ อาจจะเป็นเส้นตรงจากตารางอื่นหรือส่งตารางมารวมกัน อาจจะไม่ใช่คีย์หลักก็ได้แต่มันมีความหมายกับคอลัมน์หนึ่ง เดี๋ยวจะยกตัวอย่างเลยดีกว่า อย่างเช่น ตารางให้ดูเมื่อกี้นะคะ ก็จะมีรหัสนักศึกษา รหัสวิชามีเกรดแล้วก็มีการบอกด้วยว่ารหัสวิชานี้ เป็นชื่อวิชาอะไรนะคะ มันจะเป็นการเกิดขึ้นเมื่อคีย์หลักประกอบกันด้วยคอลัมน์หรือว่า Accident รวมกันโดยบางส่วนของคีย์หลักสามารถไประบุค่า Attribute อย่างอื่นที่ไม่ใช่คีย์หลักได้นะคะ อย่างเช่น ในความสัมพันธ์นี้คีย์หลักจะมี 2 ตัวมีรหัสนักศึกษา รหัสวิชา ถามว่าถ้ามีแต่รหัสนักศึกษานะคะ เกรด รหัสวิชาแล้วเราจะรู้ไหมว่าชื่อวิชาที่เราเรียนไปนี่ วิชาอะไรนะคะ เหมือนบางคนรู้รหัสวิชาแต่จำชื่อวิชาไม่ได้ก็มี เพราะฉะนั้น รหัสวิชานี่ มันเลยสามารถไปส่งผลกับชื่อวิชาได้เหมือนกัน เพราะเป็นตัวระบุว่าไปหลายวิชานี่ มันชื่อวิชาอะไร ก็คือคีย์หลักในตารางนี้มี 2 อันแต่มีคีย์หลัก 1 ตัวนี่ ไปมีผลกับ Attribute1 ได้นะคะ อันนี้คือความขึ้นต่อกันบางส่วนอย่างเช่นตัวนี้ก็จะเป็นของจริง ถ้าสมมติว่าอาจารย์ตัดรหัสนักศึกษาออก มีแค่ 5 วิชามีเกรดมีการวิชาเขียนโปรแกรมแล้วถามรู้ไหมคะ ว่าเกรดเอที่ของใครนะคะ หรือว่า อย่าลบไปก่อนนะ หรือว่าการลบรหัสวิชาออก เหลือแต่นักศึกษา เหลือเกรด ชื่อวิชา แล้วถามว่ารหัสวิชาอะไรล่ะที่เราได้เกรด A เราก็ไม่ทราบอีกเหมือนกันนะคะ อันนี้ก็คือการขึ้นต่อกันบางส่วนนะคะ นี่เป็นตัวอย่าง ต่อมาเป็นการขึ้นต่อกันแบบส่งต่อ ก็จะเป็นความสัมพันธ์ที่เกิดขึ้นก็ต่อเมื่อมี Attribute หรือว่าที่ไม่ใช่ครีมแต่ไปสามารถขึ้นสามารถระบุค่าของ Attribute อื่นใน Accord ได้ซึ่งเป็นการออกแบบที่ไม่เหมาะสม เพราะส่วนใหญ่แล้วในตารางนี่ ถ้าเราจะระบุค่าอื่นให้กับคอลัมน์อื่นได้ ควรจะต้องเป็นคีย์หลักเท่านั้น ดูตัวอย่างนะคะ เช่นตารางนี้ เขาบอกว่าสิ่งที่เกิดขึ้นคือ Attribute คือคอลัมน์ที่ไม่ใช่คีย์หลักหรือ Primary Key นะคะ ก็คือไม่ใช่คอลัมน์ที่มีเส้นขีดมันไประบุค่าอื่น ๆ ในตารางได้เช่นตารางนี้ก็คือเลขประจำตัว โดยตัวเลขประจำตัวนี่ ไปมีผลกับชื่อนามสกุล ที่อยู่ตำแหน่งใช่ไหมคะ เขานี่รถประจำตำแหน่งมันไม่ถูกระบุโดยเลขประจำตัวมันถูกระบุโดยรหัสตำแหน่ง เหมือนถ้าเป็นผู้จัดการนี่ แผนที่ผู้จัดการนะคะ จะรู้เลยว่ารถประจำตำแหน่งคืออะไร แต่เขาไปเช็กที่รหัสตำแหน่ง แทนที่จะเช็กกับเลขประจําตัว นี่คือการออกแบบที่ไม่ดี เพราะฉะนั้น ถ้าสมมุติว่าจะให้รถประจำตำแหน่ง วิธีการแก้ปัญหาก็คือเราควรจะแยกตารางนี้ ออกไปสร้างตารางใหม่เลยค่ะ มันไม่ควรจะมาขึ้นกับตาราง ที่มีคีย์หลักแต่ไม่สามารถระบุค่าข้อมูลตรงนี้ได้นี่ มันไม่ควรทำนะคะ กับต่อมาเป็นการขึ้นต่อการเชิงกลุ่มนะคะ น่าจะเป็นความสัมพันธ์ระหว่างคอลัมน์ Attribute ขึ้นต่อกันแบบสมบูรณ์นะคะ ก็ไปสามารถระบุค่าอื่นได้โดยที่อย่างเช่นตัวอย่าง ในตารางนี้นะคะ จะมีรหัสหลักสูตรสามารถระบุรหัสวิชาได้หลายวิชา เช่น จริง ๆ ในรหัสศึกษา จะเห็นได้ว่ามีเลข 122 รหัสนักศึกษา B122 คืออะไร B122 ก็คือหลักสูตรที่เราเรียนอยู่ซึ่งในหลักสูตรที่โรงเรียนนี่ มันมีวิชามากกว่า 20 วิชานะคะ ก็คือรหัสหลักสูตรนี่มันสามารถระบุรหัสวิชาได้หลากหลายรหัสวิชามาก ๆ อันนี้ก็คือการขึ้นต่อกันแบบมีค่ามากกว่า 1 รหัสหลักสูตรสามารถระบุรหัสวิชาได้หลายค่านั่นเอง แล้วรหัสหลักสูตรก็สามารถระบุค่ารหัสนักศึกษาได้หลายคนเช่นกัน เหมือนตอนนี้หลักสูตรที่เราเรียนนี่ มีนักศึกษาเกือบ 100 คน รหัสหลักสูตรเดียวนะ นะคะ นี่คือความสัมพันธ์แบบสามารถระบุค่าได้มากกว่า 1 นั่นเองแบบไหนค่า เพราะฉะนั้น วิธีการแก้ปัญหาของสิ่งที่เกิดขึ้นนะคะ เราเลยจะต้องมีการกระบวนการปรับบรรทัดฐาน หรือว่ากระบวนการปรับปรุงโครงสร้างของฐานข้อมูลนะคะ ที่มีความซ้ำซ้อนกันให้อยู่ในรูปแบบที่เป็นบรรทัดฐาน ก็คือเป็นรูปแบบที่พร้อมที่จะเอาไปพัฒนาเป็นฐานข้อมูลได้ โดยหลักการนะคะ อย่างที่บอกมี 5 ระดับ แต่ระดับที่ 3 นี่ ก็ถือว่าเพียงพอสำหรับการออกแบบฐานข้อมูลในปัจจุบันแล้ว โดยคีย์หลักของการทำงานนะคะ ท่านที่ 1 นะคะ กำจัดกลุ่มของข้อมูลที่มีความซ้ำซ้อนกันออกไป ขอแรกง่ายมาก ๆ ง่ายที่สุดก็คือ 1 nf นะคะ ต่อมาครั้งที่ 2 อยู่ 2 nf จะกำจัดการขึ้นต่อกันบางส่วนออก ขั้นสุดท้าย 3nf นะคะ กำจัดการขึ้นต่อกันของ Attribute ที่ไม่ใช่คีย์หลัก เดี๋ยวจะมาดูทีละขั้น มันจะต้องเป็นยังไงบ้าง ข้อแรกง่ายที่สุดง่ายมาก ๆ นะคะ ให้นักศึกษาจำกระบวนการหลัก ๆ จะมี 3 ข้อนะคะ ขั้นตอนการแรกเลย ดูก่อนว่าซ้อนกันไหมคำที่ 2 คือมันขึ้นต่อกันแค่บางส่วนหรือเปล่า อันที่ 3 อันไหนไม่ใช่คีย์หลักแต่มันไปส่งผลกระทบกับข้อมูลอื่นได้หรือเปล่าดูอันดับที่ 1 ก่อนวันที่ 1 ได้มากนะคะ ทุก ๆ คอลัมน์ Records จะต้องเป็นค่า Single Value คือมีค่าเดียวเท่านั้น จะใส่แบบนี้ไม่ได้ เพราะฉะนั้นข้อมูลทุกแถว จะต้องไม่มีค่าที่ซ้ำกัน อย่างนี้ นักศึกษาคนที่ 1 แน่นอนทั้ง 1 เทอมนี่ คุณลงทะเบียนประมาณ 6-7 วิชาใช่ไหมคะ ข้อมูลมันก็จะเป็นแบบนี้ ถ้าเราไม่มีการทำ Noราวนี้ขั้นตอนที่ 1เราจะข้อมูลที่ซ้ำซ้อนกันออกวิธีการง่ายมากค่ะ คือแจ้งข้อมูลออกเป็นอย่างละแถวที่ไม่ซ้ำกัน ดูตัวอย่างนะคะ วิธีการทำ 1 nf ง่ายมากค่ะ ถ้าข้อมูลตัวไหนเป็นกลุ่มนะคะ คนที่ 1 วิชาลงทะเบียนเรียน 3 วิชาใช่ไหมคะ คนที่ 2 มี 2 วิชา สามารถทำในรูปแบบ 1nf ก็คือเอามันกระจายออกมาค่ะ ย้ายข้อมูลพรุ่งนี้ออกมากระต่ายออกใช่ไหมคะ กระจายออกง่ายมาก ข้อมูลพรุ่งนี้ก็ทำซ้ำลงมาทำซ้ำลงมาสำโรงมา ทำซ้ำลงมา ถามว่าเขาทำไม ทำไม 001 มันซ้ำกันได้ล่ะ แต่รหัสวิชาเขาไม่ซ้ำกันเห็นไหมค่ะ เด็ก ๆ เลยง่ายมากค่ะ ข้อมูลทำไมเป็นก้อนอย่างนี้ เรากระจายออกมาเป็นแยกออกมาเป็นบรรทัด บรรทัดเลยแค่นั้นเอง อย่างน้อยในข้อสอบต้องทำ 1 NF ให้ได้มันง่ายที่สุดแล้วนะคะ อย่างตัวนี้นะคะ ก็กระจายออกมาแล้ว คราวนี้ถ้าเรากระจายข้อมูลเรียบร้อยแล้วนะคะ ว่าจะมาดูว่าในตารางนี้ค่ะ มันมีตารางของพนักงานใช่ไหมคะ เขาจะมีคีย์หลัก 1 ตัวละ แต่ว่ามันจะมีตัวนี้ค่ะ ตัวที่ 1 ตัวที่ 2 ที่มีคุณสมบัติเป็นคีย์หลักได้ เราต้องแยกมันออกนะคะ กระบวนการนะคะ ดูก่อนว่าตารางวิธีนะคะ สิ่งที่ขึ้นตรงกับคีย์หลักตัวนี้นะคะ ก็จะเป็นตัวที่ 1 ตัวที่ 2 ตัวที่ 3 สังเกตแล้วว่า คีย์หลักมีตัวเดียวข้อมูลมีเยอะมากนะคะ ออกมาได้อันแรกเลยรหัสโปรเจกต์นะคะ แล้วก็ชื่อโปรเจกต์นะคะ ใครเป็นผู้จัดการเงินเดือนเท่าไรงบประมาณเท่าไหร่ คือมันจะเชื่อมโยงกับข้อมูลที่เป็นคีย์หลักก็คือ Project Code วันนี้ ส่วนตัวนี้เป็นคีย์คู่แข่ง 2 ตัว 2 ตัว มันสามารถทำหน้าที่เป็นคีย์หลัก ให้กับอย่างตัวนี้นะคะ มันจะเป็นคีย์หลักให้กับชื่อของพนักงาน อย่างตัวนี้ว่าจะเป็นคีย์หลักสำหรับชื่อแผนก ถามว่ามันขึ้นตรงกับโปรเจกต์ Code ไหม ไม่นะคะ เพราะฉะนั้น การทำขั้นตอนต่อมานะคะ 2 NF ขั้นตอนที่ 1เราจะต้องทำ 1 nf มาเรียบร้อย แล้วซึ่งได้มาแล้วก็ต้องมา ตัของการขึ้นต่อกันบางส่วนออกก็คือการกำจัด ไม่ขึ้นคีย์หลักของตารางนั้นเองจะออกนะคะ อย่างเช่นตัวนี้นะคะ การขึ้นต่อกันบางส่วน จะเห็นได้ว่ารหัสวิชากับชื่อวิชา มันไม่ขึ้นตรงกับรหัสนักศึกษาใช่ไหมคะ อันนี้จำได้นะ รูปเดิม รูปเดิม วิธีกำจัดปัญหาเราก็ดึงสิ่งที่มันเป็นปัญหาสิ่งที่มันไม่ขึ้นตรงกับคีย์หลักตัวนั้น ไปสร้างตารางใหม่ สร้างตารางเพิ่ม เอาสิ่งที่เป็นปัญหาออกมาไปใส่ตารางใหม่ กำหนดคีย์หลักใหม่นะคะ ในตารางเดิมนะคะ เราก็เอาคีย์หลักของตารางใหม่ไปใส่ แค่นั้นเองนะคะ วิธีการก็คือ เหมือนรูปนี้นะคะ สิ่งที่เป็นปัญหาที่อาจารย์จะยกตัวอย่างคือรหัสวิชา ชิชาเพราะรหัสวิชามันไม่ได้ขึ้นตรงกับรหัสนักศึกษา เพราะฉะนั้น ไอ้สองตัวนี้คือสิ่งที่เป็นปัญหา วิธีการแก้ปัญหาคือเราสร้างตารางผลการเรียนใหม่ สร้างตารางวิชาใหม่ เห็นไหมคะ ในตารางใหม่เราจะตัดชื่อวิชาออก แต่ต้องเหลือรหัสวิชาไว้ เพื่อให้เชื่อมโยงว่ารหัสวิชาน ี้มันชื่อวิชาอะไร จากอีกตาราง 1 แค่นั้นเองนะคะ โอเคค่ะ อันนี้เป็นตัวอย่างของปรับบรรทัดฐานในรูปแบบของส 2 Nเดี๋ยววันนี้จะให้ทำการบ้าน เดี๋ยวค่อยย้อนกลับมาแล้วกันนะคะ สอนภาษาเดี๋ยวแก้แล้ว เมื่อกี้นะคะ ขั้นตอนสุดท้ายนะคะ 3nf นะคะ โดยความสัมพันธ์นะคะ ก่อนที่จะทำเป็น 3NF ได้จะต้องทำ 2 Nอย่างนี้มาก่อนหลักของการทำขั้นตอนที่ 3 คือต้องเอาความสัมพันธ์ที่ไม่ใช่คีย์หลักออกนะคะ เช่น ไม่ใช่คีย์หลัก แต่ไม่มีผลกับคอลัมน์อื่นไม่ได้นะคะ ไม่ได้วิธีการแก้ปัญหาเช่นเดิมค่ะ สร้างตารางใหม่ขึ้นมา แก้ปัญหานาน ๆ อย่างเช่นในตัวอย่างนะคะ รหัสพนักงานนะคะ ชื่อสกุล รหัสแผนก ชื่อแผนก เงินเดือน จะเห็นได้ว่าในตารางนี้นี่ คีย์หลักก็คือรหัสพนักงาน แต่มันมีรหัสแผนกกับชื่อแผนกติดมาด้วย ซึ่งมันไม่ได้เกี่ยวกับรหัสพนักงานเลย วิธีการแก้ปัญหาก็คือเอารหัสแผนกกับชื่อแผนกไปสร้างตารางใหม่ แต่ต้องยังคงรหัสแผนกไว้ ในตารางเดิมนะคะ เพื่อให้มันเชื่อมโยงได้ว่าไอ้แผนก a001 นี่ คือแผนกอะไรนะคะ อันนี้คือการแก้ปัญหาไม่ใช่คีย์หลัก แต่ไปส่งผลกับคอลัมน์อื่นในตารางนะคะ จริง ๆ แล้วอยากให้ลองทำในห้องมากกว่า แต่ด้วยสัปดาห์นี้มันมีข้อจำกัดนะ ก็ไม่เป็นไร อันนี้เป็นตัวอย่างนะคะ สรุปนะคะ วิธีการทำ Normalizatioหรือว่าการปรับบรรทัดฐานนะคะ ทุก ๆ ที่ทุก ๆ คนร่ำในแต่ละแถวจะต้องมีค่าของข้อมูลเพียงค่าเดียวเท่านั้น เช่นเวลาเรากรอกเบอร์โทรศัพท์ เรามีโทรศัพท์ 3 เบอร์ก็จริง แต่เราจะกรอกได้แค่เบอร์เดียว ถ้าอยากใส่เบอร์ที่ 2 ที่ 3 ก็ต้องเพิ่มข้อมูลแถวใหม่ขึ้นมา ต่อมา2 nFก็ปัญหาคือถ้ามีข้อมูลนะคะ ขอข้อมูลทุกตัวในตารางนั้น จะต้องขึ้นกับคีย์หลักของตารางตัวเดียวเท่านั้นนะคะ ข้อที่ 3 ถ้าคอลัมน์ไหนที่ไม่ใช่คีย์หลักนะคะ จะมาส่งผลกับคอลัมน์อื่นในตารางไม่ได้ เพราะฉะนั้น ข้อ 1 นี้คือแค่กระจายตาราง อันที่ 2 อันที่ 3 ถ้ามีปัญหาเราต้องสร้างตารางใหม่ การบ้านเี้ดีกว่า อาจารย์จะให้ทำน่าจะส่งวันนี้ เอาแค่ข้อเดียวนะคะ ข้อเดียวพอ เพราะว่าจริง ๆ อยากให้ทำในห้องเดี๋ยวสัปดาห์หน้าค่อยทำในห้อง จะให้ลองทำดูก่อน ว่าที่เรียนไปวันนี้ เข้าใจไหม ถ้าทำเสร็จแล้วก็ค่อยเอามาส่งโต๊ะ ส่งงานอาจารย์เอาเฉพาะข้อดีนะข้อเดียว ขเดียวพอวันนี้คนเดียวพอนะคะ ส่งในเวลานี้แหละ ให้ลองทำดูว่าเข้าใจไหมข้อนี้ทำอย่างทำยังไงได้มาก ๆ เลยการเว้นช่องว่างให้แล้ว เติมมา 2 คุณเห็นไหมว่ามันมีรหัสวิชาเนี่ชาเนี่ยต้องทำยังไงกับมันแยกมันออกมาสิ แยกยังไง เอาข้าวเหนียวก่อนนะคะ แล้วลองส่งมาให้อาจารย์ดูก่อนว่าเข้าใจมากน้อย ขนาดไหน จริง ๆ อยากให้เรียนในห้องมากกว่า แต่วันนี้ก็เอามานี้ก่อนแล้วกันให้ทุกคนหายดี กลับมาอาทิตย์หน้าค่อย เดินดูในห้องดีกว่า วันนี้ก็ประมาณนี้นะคะ เดี๋ยวเวลาที่เหลือให้ทำข้อนี้ แล้วมาส่งวันนี้เลยยิ่งดี เวลาที่เหลือทำใส่กระดาษมาส่งอาจารย์แล้วกันนะ ประมาณนี้ค่ะ เวลาที่เหลือทำให้เสร็จภายในวันนี้นะคะ ข้อเดียวเองนะคะ ข้อเดียว ใครสงสัยไหมคะ ปุ๋ยสงสัยไหม เปิดไม่ได้หรือเปล่าไม่มีค่ะ อาจารย์เดี๋ยวถ้ายังไงเดี๋ยวให้อุบลไปส่งหรือยังไงคะ เพราะว่าอุบลขึ้น ไม่ ๆ ส่วนมากอยู่ในการอยู่หอนี่แหละ ตอนนี้เหลืออยู่ประมาณใส่ได้ก็เอามา Ok Thank You วันนี้ก็ประมาณนี้ค่ะ ขอบคุณทุกคนมากนะคะ ที่ยังตั้งใจเรียนอยู่ แล้วก็งานอย่าลืมส่งวันนี้นะคะ ใครที่อยู่ Dดี ๆ ก็ทำให้เสร็จแล้วก็ฝากเพื่อนมาส่ง รวมกันมาส่งก็ได้นะคะ ถ้าใครอยู่หอก็จะมาทำอยู่ดี ๆ ก็ได้หรือว่าทำเสร็จแล้วมาส่งที่อาการก็ได้ โอเคค่ะ วันนี้ก็ประมาณนี้ค่ะ ขอบคุณล่ามด้วยนะคะ ค่าขอบคุณค่ะ ปุ๋ยวันนี้ครบนะ ไปแล้ว OK