--- title: ฝึก PE กับ Bot โดยใช้ log ASR (ห้อง 5273) หลักการและระบบการจัดการฐานข้อมูล อ.เกวลี วันที่ 13 ธ.ค. 2565 แมน subtitle: date: วันจันทร์ที่ 19 ธันวาคม 2565 เวลา 10.00 น. --- (ข้อความสดจากระบบถอดความเสียงพูดทางไกล) ประมาณนี้นะคะ วันนี้จะเป็นบทที่ 5 เกี่ยวกับกระบวนการการปรับบรรทัดฐานนะคะ ภาษาอังกฤษก็จะเป็น normalization มันก็จะมีความหมายแล้วก็จุดประสงค์ของการทำการปรับมาตรฐานนะคะ แล้วก็จะเกี่ยวกับฟังก์ชันการขึ้นต่อกันและกระบวนการในการทำนมคาร์เนชั่นด้วยนะคะ มี 3 ข้อวันนี้โดยการประปาฐานนะคะ หรือว่านอนเมื่อไหรมันจะเป็นทฤษฎีที่คนที่จะต้องออกแบบฐานข้อมูลเขาจะต้องมาแปลงข้อมูลข้อมูลอาจจะเป็นข้อมูลที่ซับซ้อนนะคะ ให้มันง่าย เข้าใจก็ง่าย นำไปใช้งานก็ง่ายแล้วก็ต้องเป็นระบบที่หลังจากออกแบบแล้วนำไปใช้งานจริงนี่ต้องเกิดปัญหาน้อยที่สุดนะคะ โดยกระบวนการทำงานนะคะ ในการปรับบรรทัดฐานนี่มันจะมี 3 ระดับนะคะ จริง ๆ เราก็จะเรียกสั้น ๆ ว่าระดับแรกเรียกว่า 1nf นะคะ 2nf 3nf ในระดับปริญญาตรีนี่ถึง 3nf ได้ก็ถือว่าเก่งมากแล้วนะคะ ถ้าเป็นระดับที่สูงขึ้นไปอีกก็จะถึงได้ถึง 5 nf เลยนะคะ อันนี้เป็นแผนภาพกระบวนการทำงานนะคะ ก่อนที่เราจะมาทำกระบวนการปรับบรรทัดฐานได้นี่ มันก็ต้องวิเคราะห์ความต้องการของผู้ใช้งานก่อนว่าเขาต้องการระบุฐานข้อมูลแบบไหน มีความต้องการใช้ตารางกี่ตารางในฐานข้อมูลนะคะ หลังจากนั้นวาดรูป เหมือนอาทิตย์ที่โรงเรียนอาทิตย์ที่แล้วนะคะ ว่าเป็นแผนภาพเพื่อให้เข้าใจว่าสิ่งที่เรากำลังจะออกแบบหรือสิ่งที่เรากำลังจะทำฐานข้อมูลมันตรงตามความต้องการหรือเปล่านะคะ แต่รูปแบบของรูปที่เราวันอาทิตย์ที่แล้วนี่มันจะยังเป็นรูปแบบที่ยังไม่เป็นบรรทัดฐานหรือว่ายังไม่มีการจัดระเบียบความคิดข้อมูลที่ ตัดความซ้ำซ้อนกันออกไปหรืออาจจะมีคีย์หลักที่มันทับซ้อนกันนะคะ เราก็เลยจะต้องเอาข้อมูลจากที่เราว่าอาทิตย์ที่แล้วเนี่ยเข้าสู่กระบวนการปรับพื้นฐานก่อนซึ่งอย่างที่บอกเราทำแค่ถึง 3nf นี่ก็เก่งมากแล้วอย่างน้อย 2-3 นะคะ ไอ้บอยคอร์ดกับสีนี่ไม่ทำก็ก็ก็รักไว้ได้นะคะ แต่อย่างน้อยต้องถึงวัตถุประสงค์ของการปรับฐานนะคะ แน่นอนลดความซ้ำซ้อนกันของข้อมูลก็คือถ้าข้อมูลมันซ้ำกันนี่เราก็ต้องตัดออกไปโครงสร้างเป็นสิ่งสำคัญมากเท่าไรเนื้อหาแล้วก็พื้นที่ในการเก็บข้อมูลอย่างมันก็จะเยอะก็ทำให้สิ้นเปลืองประมาณเหมือนกันรวมถึงลดปัญหาความไม่ถูกต้องของข้อมูลนะคะ ข้อมูลนี่นอกจากที่จะไม่เกิดความสอดคล้องกันแล้วนี่ มันอาจจะเกิดจากสาเหตุคือถ้าเหมือนที่ ก็คือถ้าเราเก็บข้อมูลหลาย ๆ ที่นักศึกษาเก็บข้อมูลที่คณะด้วยเก็บที่มหาวิทยาลัยด้วยเก็บที่สาขาด้วยเนี่ยบางทีถ้าวันนึงคุณอาจจะเปลี่ยนแปลงเบอร์โทรศัพท์ที่บ้านก็ต้องไปตามเปลี่ยนทุกที่เลยนะคะ ซึ่งเสียเวลาแล้วคราวนี้ก็จะเป็นที่เถียงกันว่าสรุปแล้วเบอร์ไหนถูกเบอร์ไหนผิดนะคะ โดยวัตถุประสงค์ของการปรับบรรทัดฐานนี่ ก็คือข้อมูลจะถูกเก็บอยู่อย่างเดียวนะคะ เก็บไว้ที่เดียวแต่สามารถเรียกใช้และใช้งานได้หลาย ๆ ที่พร้อม ๆ กันได้ แต่ถ้ามันมีการเปลี่ยนแปลงข้อมูลหรือมีการลบหรือการเพิ่มข้อมูลนี่ เพื่อให้ข้อมูลเป็นปัจจุบันที่สุด เราจะเก็บข้อมูลไว้ที่เดียวมีแก้ไขก็ที่เดียว เพราะฉะนั้นข้อมูลก็จะเป็นข้อมูลที่ถูกต้อง แล้วก็ปัจจุบันด้วย แล้วก็อย่างที่ให้เหตุผล ใช้ในการเก็บข้อมูลที่เดียวนี่มันก็จะลดความผิดพลาดที่เกิดจากการเปลี่ยนแปลงข้อมูลปรับปรุงข้อมูลนะคะ เหมือนที่บอกว่าคือถ้าเปลี่ยนเบอร์โทรศัพท์หรือเปลี่ยนบ้านเลขที่นะคะ ก็เปลี่ยนแปลงที่เดียวเราสามารถเรียกใช้ข้อมูลได้ทุกที่พร้อมกันถ้าต้องการข้อมูลนะคะ ความซ้ำซ้อนกันของข้อมูลนี่ หรือมันอาจจะเกิดความผิดพลาดของการปรับปรุงข้อมูลนะคะ แนวคิดที่สำคัญของการออกแบบฐานข้อมูลนี่ ก็คือการออกแบบข้อมูลที่ซ้ำซ้อนกันน้อยที่สุดนะคะ เพื่อประหยัดเนื้อที่ในการเก็บข้อมูลแล้วก็ลดปัญหาที่จะเกิดขึ้นถ้าสมมติว่าข้อมูลมันซ้ำซ้อนกันมากเกินไปหรือปริมาณข้อมูลมันเยอะเกินไปนะคะอย่างเช่นตัวอย่างนะคะ ตารางด้านบน ตารางสีเทาข้างบนนะคะ จะเป็นตัวอย่างการออกแบบฐานข้อมูลที่ดี เดี๋ยวจะมาให้ดูว่า ทำไมมันถึงดีกว่า ในตารางข้างบนนี่มันจะมีตารางของพนักงานแล้วก็ต่างสาขานะคะ จะเห็นได้ว่าตารางพนักงานนี่จะมีส่วนหนึ่งที่เป็นข้อมูลของรหัสสาขาห้อยไว้อยู่ ถามว่าทำไมไม่เอาข้อมูลสาขามาไว้ในตารางพนักงานทีเดียวเลยล่ะ ทำไมต้องแยกออก อย่างถ้าศึกษาดูคนแรกนะคะ พนักงานคนแรก รหัสสาขา b005 ก็คือสาขาเชียงใหม่ถ้าสมมุติว่าพนักงานคนที่ 1 ลาออกก็จะมีการลบข้อมูลเกิดขึ้นใช่ไหมคะ มีการลบข้อมูล ลบคนนี้ออก ขีดฆ่าทิ้ง ฆ่าทิ้ง สิ่งไหนที่หายไปบ้าง แน่นอนสาขาเชียงใหม่จะหายไปด้วยนะคะ ถ้าสมมุติเราอยู่ด้วยกัน แต่ถ้าสมมุติพนักงานคนนี้ลาออกสาขาเชียงใหม่ยังอยู่ไหม ยังอยู่นะคะ ซึ่งแตกต่างจากด้านล่างนะคะ ด้านล่าง เห็นไหมคำว่าถ้าสมมุติว่าจะลบทิ้งหมดเลย กากบาททิ้ง สาขาเชียงใหม่หายไปด้วย อันนี้คืิอการออกแบบที่ไม่ดีนะคะ เหมือนลบคนข้างล่างออกสาขาพิษณุโลกก็หายไปด้วยแต่ถ้าเป็นตารางด้านบนนะคะ ถ้าคนนี้ลาออกสาขายังอยู่ไหม ยังอยู่เหมือนเดิม อันนี้คือการออกแบบฐานข้อมูลที่ดี ถ้าข้อมูลตัวไหนที่มันมีผลกระทบต่อการ... เราจะต้องแยกตารางออก ตัวอย่างนะคะ ถ้าการออกแบบที่ดีนี่ เราจะลดปัญหาความซ้ำซ้อนของข้อมูลออกได้ อย่างเช่นตัวนี้อันนี้เป็นตารางที่ออกแบบที่ไม่ดีนะคะ เห็นไหมคะว่ามันจะมีรหัสสาขา แล้วก็ที่อยู่ อยู่ในตารางเดียวกัน ถ้าสมมติว่าอาจารย์เพิ่มเข้ามาใหม่อีก 1 คนนะคะ เป็น em10 ถ้าต้องการเพิ่มพนักงานสาขาเชียงใหม่ก็ต้องมากรอกข้อมูลตรงนี้อีกเชียงใหม่ ณโรแต่ถ้าการออกแบบฐานข้อมูลที่ดีนี่เราแค่ใส่รหัสสาขานะคะ ไม่จำเป็นจะต้องพิมพ์ที่อยู่ทุกครั้งก็ได้ เหมือนเวลาคุณไปธนาคารใช่ไหมคะ คุณก็แค่ยื่นบัตรประชาชน พนักงานธนาคารก็จะกรอกเลขบัตรประชาชนคุณลงไปนะคะ หรืออาจจะเอาชิปการ์ดของคุณเนี่เสียบเข้าไปในเครื่องถามว่าตอนนี้เราได้กรอกข้อมูลไหม ขอแค่มีเลขบัตรประชาชนข้อมูลทุกอย่างที่คุณมีเขาจะดึงออกมาจากระบบให้เลยเราไม่ต้องมาเสียเวลากรอก เหมือนเมื่อก่อนนี่ต้องเขียนใส่กระดาษและเลขบัตรประชาชนด้านรายชื่ออะไร นามสกุลอะไร ที่อยู่ที่ไหนเบอร์โทรศัพท์อะไรเดี๋ยวนี้ไม่ต้องเลยขอแค่มีเลขบัตรประชาชนข้อมูลทุกอย่างเราสามารถดึงขึ้นมาได้อยู่แล้วอันนี้ก็เช่นเดียวกัน ถ้าการออกแบบไม่ดีแต่เราต้องกรอกข้อมูลถูกต้องทุกช่องเลยนี่ มันทำให้อาจจะคนเดียวไม่เดือดร้อนค่ะ ถ้าเป็นพนักงานใหม่เป็นเหมือนโรงงานน่ะค่ะ ทีละพันคน ต้องนั่งกรอกเ ชียงใหม่เป็นพันคนนี่เสียเวลามาก ๆ อันนี้คือการออกแบบที่ไม่ดีนะคะ กับอีกอย่างนึง ถ้าสมมุติว่าเมื่อกี้อาจารย์เพิ่มพนักงานแล้วถ้ามันอยากเพิ่มแค่สาขา อยากเพิ่มแค่สาขา ซึ่งในตารางนี่จำได้ไหมคะ ที่รักจะเป็นคีย์ที่ขีดเส้นใต้ซึ่งอาจารย์อยากเพิ่มสาขาสมุทรปราการจะเพิ่ม บี100สกลนครละครนะคะ ถามว่าเพิ่มได้ไหม อาจจะเป็นการตั้งสาขา แต่ยังไม่มีพนักงานหรอก ถ้าจากตารางนี้ เราจะเพิ่มเฉพาะชื่อสาขาไม่ได้ เนื่องจากเรายังไม่มีรหัสพนักงาน เพราะรหัสพนักงานเป็นคีย์หลัก คือคุณสมบัติมันคือเป็นค่าว่างไม่ได้ ก็ทำให้เราเพิ่มสาขาไม่ได้ เพราะเราไม่มีพนักงาน อันนี้ก็เป็นข้อผิดพลาดในการเพิ่มข้อมูล ถ้าเราออกแบบตารางแบบนี้นะคะ ก็คือกันปัญหาที่เกิดขึ้นจากการออกแบบตารางไม่ดี กับปัญหาต่อมาเป็นปัญหาการลบข้อมูลที่อาจารย์บอกถ้าพนักงานคนนี้ออกสาขาเชียงใหม่หายไปด้วย ลบไป กรณีความผิดพลาดจากการเปลี่ยนแปลงเหมือน b03 b003 นะคะ เป็นกรุงเทพฯใช่ไหมคะ แล้วคราวนี้ข้อมูลมันอยู่ในตารางเดียวกันถ้านักศึกษาจะแก้สมมติว่าเราย้ายจากกรุงเทพฯ ไปอยู่นนทบุรี สมมติมีพนักงาน 3000คน คุณต้องแก้กรุงเทพฯ 3000 ครั้งเป็นนนทบุรี พนักงานมีคนส่งคนไม่ใช่ปัญหาค่ะ แต่ถ้าคุณเป็นโรงงานขนาดใหญ่ นั่งแก้ทีละ 3000 คนไม่ใช่เรื่องสนุกแน่ ๆ นะคะ อันนี้ก็เป็นปัญหานะคะ เพราะฉะนั้นเราควรแยกตารางพนักงานกับตารางสาขาออกจากกันนะคะ นี่เป็นเหตุผล นี่คือขนาดข้อมูลขนาดเล็กนะคะ แล้วยังเห็นปัญหาขนาดนี้ถ้าสมมุติว่าองค์กรขนาดใหญ่เป็นบริษัทเ ป็นโรงงาน หรือเป็นระดับโรงเรียนมีนักเรียนเป็น 2 3000 คนก็ได้นะคะ มีปัญหาเยอะมากถ้าสมมุติว่าเราจัดการตารางไม่ดีนะคะ จากปัญหาที่เกิดขึ้นเมื่อกี้นะคะ อย่างที่บอกค่ะ เราจะแก้ปัญหาโดยการแยกตารางออกเป็น 2 ตารางแบบนี้นะคะ ฟังก์ชันการขึ้นต่อกันนะคะ อันนี้เดี๋ยว จะเป็นเกี่ยวกับตารางหนึ่งนะคะ มีผลดีต่ออีกตาราง 1 เราจะเรียกว่าเป็นฟังก์ชันการขึ้นต่อกัน เดี๋ยวดูตัวอย่างเลยละกัน อย่างเช่นทางนี้นะคะ ดูจากรหัสพนักงานนะคะ เราจะเขียนได้ว่ารหัสพนักงาน จะส่งผลกับชื่อตำแหน่ง สัญลักษณ์ของการขึ้นต่อกันนะคะ อันไหนเป็นตัวหลักชี้ไปที่ตัวรองตามหัวลูกศรเลย ดูทิศทางตามหัวลูกศรนะคะ อันไหนเป็นตัวหลักอันไหนเป็นตัวรองนะคะ อย่างเช่นตัวนี้ถามว่าตำแหน่งมาชี้ที่รหัสพนักงานได้ไหมนะคะ ถามว่า ไม่ได้ เพราะการขึ้นต่อการจะต้องเป็นลักษณะหนึ่ง ต่อ หนึ่งเท่านั้น เป็น หนึ่ง-ต่อ-กลุ่ม ไม่ได้ ชนิดของการขึ้นต่อกันนะคะ จะมีอยู่ 4 ชนิดนะคะ ชนิดแรกเป็นการขึ้นต่อกันโดยสมบูรณ์นะคะ ซึ่งอาจจะเป็นเกี่ยวกับตารางนะคะ จะมีคอลัมน์ 1 คอลัมน์หรือมากกว่า 1 คอลัมน์มาประกอบกันนะคะ โดยในคอลัมน์นะนี่ จะบรรจุค่าที่ระบุความพิเศษของแถว ๆ ได้อย่างชัดเจนนะคะ attribute จะเป็นค่าเฉพาะที่บอกเลยว่าคอร์ดข้อมูลแถวนั้นนี่ มันมีลักษณะพิเศษเฉพาะตัวยังไงโดยในทุกความสัมพันธ์นี่จะต้องระบุค่าคีย์หลักไว้ด้วยครึ่งปีหลังนี้คือต้องเป็นค่าเอกลักษณ์คือไม่ซ้ำกันอยู่แล้วนะคะ อย่างเช่นการขึ้นต่อกันอย่างสมบูรณ์อันแรกนะคะ attribute ก็คือคอลัมน์ที่ไม่ใช่คีย์หลักจำได้ใช่ไหมคะ คีย์หลักจะเป็นคอลัมน์ที่มีขีดเส้นใต้ คอลัมน์ที่ไม่ใช่คีย์หลักจะขึ้นตรงต่อคอลัมน์ที่เป็นคีย์หลัก คอลัมน์เดียวเท่านั้น เช่นเลขบัตรประชาชน ตัวนี้ จะขึ้น จะเป็นเจ้าของชื่อนี้เท่านั้นนะคะ เพราะฉะนั้นการขึ้นตัวกันอย่างสมบูรณ์จะเป็นลักษณะแบบหนึ่ง-ต่อ-หนึ่งนะคะ เลขบัตรประชาชน 1 เลข จะต้องเป็นของคนคนเดียวเท่านั้นไม่ใช่ว่าเลขประชาชนที่ใช้ 10 คนเป็นไปไม่ได้นะคะ ตัวอย่างนะคะ ตารางที่มี Column หลายตัวนะคะ ขึ้นอยู่กับคีย์หลักตัวเดียวเช่น คนหนึ่งคนนี่ก็จะมีข้อมูลชื่อ นามสกุล วันเดือนปีเกิดวันที่ทำบัตรใช่ไหมคะ แต่ว่าเขาจะต้องขึ้นตรงกับเลขบัตรประชาชนเดียวเท่านั้นถามว่า อาจจะเกิดวันเดียวกันก็ได้ค่ะ แต่เลขบัตรประชาชนเขาจะไม่เหมือนกัน หรือเขาอาจจะมาทำบัตรวันเดียวกันนะคะ แต่หมายเลขบัตรประชาชนเขาจะไม่ซ้ำกันคะคะ คืออะไรซ้ำกันได้ทุกอย่างค่ะ ยกเว้นหมายเลขบัตรประชาชน แต่บางตารางนะคะ ก็อาจจะเป็นการรวมตัวกันของกคีย์หลัก มากกว่า 1 ปีหลักนะคะ มารวมกัน เช่น นักศึกษาคนนี้ ลงทะเบียนวิชานี้ ได้เกรดอะไร อันนี้ก็เป็นความสัมพันธ์ที่เกิดขึ้นได้เหมือนกันค่ะ ว่าบัตรนักศึกษาซ้ำกันได้ไหม รหัสวิชาซ้ำกันได้ไหม ไม่ซ้ำนะคะ เหมือนชื่อวิชารหัสนึง เชื่อใจคนอื่นก็รหัสวิชาอีกอันนึงนี้จะไม่ซ้ำกันอยู่แล้วนะคะ ต่อมาจะเป็นการขึ้นต่อกันบางส่วน มันก็จะเป็นอาศัยความสัมพันธ์ที่เกิดขึ้นจากคีย์ผสมนะคะ อาจจะเป็นเส้นตรงจากตารางอื่นหรือส่งตารางมารวมกัน อาจจะไม่ใช่คีย์หลักก็ได้แต่มันมีความหมายกับคอลัมน์หนึ่งเดี๋ยวจะยกตัวอย่างเลยดีกว่า อย่างเช่น เมื่อตารางที่อาจารย์ให้ดูเมื่อกี้นะคะ นึกว่าตารางเทียบไซส์ให้ดูเมื่อกี้นะคะ ก็จะมีรหัสนักศึกษารหัสวิชามีเกรดแล้วก็มีการบอกด้วยว่ารหัสวิชานี้เป็นชื่อวิชาอะไรนะคะ มันจะเป็นการเกิดขึ้นเมื่อคีย์หลักประกอบกันด้วยคอลัมน์หรือว่า A รวมกันโดยบางส่วนของคีย์หลักสามารถไประบุค่าอย่างอื่นที่ไม่ใช่คีย์หลักได้นะคะ อย่างเช่นในความสัมพันธ์นี้คีย์หลักจะมี 2 ตัวมีรหัสนักศึกษากับรหัสวิชานะคะ ถามว่าถ้ามีแต่รหัสนักศึกษา เกรดนะคะ รหัสวิชา แล้วเราจะรู้ไหมว่า ชื่อวิชาที่เราเรียนไปนี่ ชื่อวิชาอะไรนะคะ เหมือนบางคนรู้รหัสวิชาแต่จำชื่อวิชาไม่ได้ก็มี เพราะฉะนั้นรหัสวิชานี่มันเลยสามารถไปส่งผลกับชื่อวิชาได้เหมือนกัน เพราะเป็นตัวระบุว่าไป หลายวิชานี่ชื่อวิชาอะไรก็คือคีย์หลักในตารางนี้มี 2 อันแต่มีคีย์หลัก 1 ตัวนี่ไปมีผลกับแอตทริบิวต์ 1 ได้นะคะ อันนี้คือความขึ้นต่อกันบางส่วนนะคะ อย่างเช่นตัวนี้ก็จะเป็นของ จริงถ้าว่าอาจารย์ตัดรหัสนักศึกษาออก มีแค่ 5 วิชามีเกรดมีการวิชาเขียนโปรแกรมแล้วถามรู้ไหมคะ ว่าเกรดเอ นี่ของใครนะคะ หรือว่า ลบไปก่อนนะ หรือว่าการลบรหัสวิชาออกเหลือแต่นักศึกษาเหลือเกรด เหลือชื่อวิชาแล้วถามว่า รหัสวิชาอะไรล่ะที่เราได้เกรด A เราก็ไม่ทราบอีกเหมือนกันนะคะ อันนี้ก็คือการขึ้นต่อกันบางส่วนนะคะ อันนี้คือตัวอย่าง ต่อมาเป็นการขึ้นต่อกันแบบส่งต่อก็จะเป็นความสัมพันธ์ที่เกิดขึ้นก็ต่อเมื่อมีแอตทริบิวต์หรือว่าคอลัมน์อื่น ๆ ที่ไม่ใช่ครีมแต่ไปสามารถขึ้นสามารถระบุค่าของแอตทริบิวต์อื่นใน Record ได้ซึ่งเป็นการออกแบบที่ไม่เหมาะสมเพราะส่วนใหญ่แล้วในตารางนี่ ถ้าเราจะระบุค่าอื่นให้กับคอลัมน์อื่นได้ควรจะต้องเป็นคีย์หลักเท่านั้นนะคะ ดูตัวอย่างนะคะ เช่นตารางนี้ เขาบอกว่าสิ่งที่เกิดขึ้นคือแอตทริบิวต์ก็คือคอลัมน์ที่ไม่ใช่คีย์หลักหรือ Primary Key นะคะ ก็คือไม่ใช่คอลัมน์ที่มีเส้นขีดมันไประบุค่าอื่น ๆ ในตารางได้ เช่นตารางนี้คีย์หลักก็คือเลขประจำตัวตัวเลขประจำตัวนี่ไปมีผลกับชื่อ นามสกุล ที่อยู่ตำแหน่งใช่ไหมคะ ทีนี้รถประจำตำแหน่งมันไม่ถูกระบุโดยเลขประจำตัว มันถูกระบุโดยรหัสตำแหน่ง เหมือนถ้าเป็นผู้จัดการนี่แผนที่ผู้จัดการนะคะ จะรู้เลยว่ารถประจำตำแหน่งคืออะไร แต่เขาไปเช็คที่รหัสตำแหน่งแทนที่จะเช็คกับเลขประจําตัว อันนี้คือการออกแบบที่ไม่ดี เพราะฉะนั้นถ้าสมมติว่าจะให้รถประจำตำแหน่งวิธีการแก้ปัญหาก็คือเราควรจะแยกตารางนี้ ออกไปสร้างตารางใหม่เลยค่ะ มันไม่ควรจะมาขึ้นกับตารางที่มีกี่หลัก แต่ไม่สามารถระบุค่าข้อมูลตรงนี้ได้นี่ มันไม่ควรทำนะคะ กับต่อมาเป็นการขึ้นต่อการเชิงกลุ่มนะคะ ก็จะเป็นความสัมพันธ์ระหว่างคอลัมน์ขึ้นต่อกันแบบสมบูรณ์นะคะ ก็ไปสามารถระบุค่าอื่นได้ โดยที่ อย่างเช่นตัวอย่างนะคะ ในตารางนี้นะคะ จะมีรหัสหลักสูตร สามารถระบุรหัสวิชาได้หลายวิชาเช่นจริง ๆ ในรหันักศึกษาจะเห็นได้ว่ามีเลข 122 รหัสนักศึกษา 112 คืออะไร 122 ก็คือหลักสูตรที่เราเรียนอยู่ซึ่งในหลักสูตรที่โรงเรียนนี่มันมีวิชามากกว่า 20 วิชานะคะ นั่นก็คือรหัสหลักสูตรนี่มันสามารถระบุรหัสวิชาได้หลากหลายรหัสวิชามาก ๆ อันนี้ก็คือการขึ้นต่อกันแบบมีค่ามากกว่า 1 นะคะ รหัสหลักสูตรสามารถระบุรหัสวิชาได้หลายค่านั่นเองนะคะ แล้วรหัสหลักสูตรก็สามารถระบุค่ารหัสนักศึกษาได้หลายคนเช่นกัน เหมือนตอนนี้หลักสูตรที่โรงเรียนนี่ มีศึกษาเกือบ 100 คน แต่รหัสเดียวนะนะคะ นี่คือความสัมพันธ์แบบสามารถระบุค่าได้มากกว่า 1 นั้นเองนะคะ แบบไหนค่าเพราะฉะนั้นวิธีการแก้ปัญหาของสิ่งที่เกิดขึ้นนะคะ เราเลยจะต้องมีการกระบวนการปรับบรรทัดฐานหรือว่ากระบวนการปรับปรุงโครงสร้างของฐานข้อมูลนะคะ ที่มีความซ้ำซ้อนกันให้อยู่ในรูปแบบที่เป็นบรรทัดฐานก็คือเป็นรูปแบบที่พร้อมที่จะเอาไปพัฒนาเป็นฐานข้อมูลได้นะคะ โดยหลักการนะคะ อย่างที่บอกมี 5 ระดับ แต่ระดับที่ 3 นี่ก็ถือว่าเพียงพอสำหรับการออกแบบฐานข้อมูลในปัจจุบันแล้วนะคะ โดยคีย์หลักของการทำงานนะคะ ขั้นที่ 1 นะคะ กำจัดกลุ่มของข้อมูลที่มีความซ้ำซ้อนกันออกไปนะคะ ขอแรกง่ายมาก ๆ ง่ายที่สุดก็คือ 1 nf นะคะ ต่อมาขั้นที่ 2 อยู่ 2 nf จะกำจัดการขึ้นต่อกันบางส่วนออกนะคะ ขั้นสุดท้าย 3nf นะคะ กำจัดการขึ้นต่อกันของแอตทริบิวต์ที่ไม่ใช่คีย์หลักนะคะ เดี๋ยวจะมาดูทีละขั้น มันจะต้องเป็นอย่างไรบ้าง ข้อแรกง่ายที่สุดง่ายมาก ๆ นะคะ ให้นักศึกษาจำกระบวนการหลัก ๆ จะมี 3 ข้อนะคะ ขั้นตอนการแรกเลยดูก่อนว่าคำซ้อนกันไหม ขั้นที่ 2 คือมันขึ้นต่อกันแค่บางส่วนหรือเปล่า ขั้นที่ 3 อันไหนไม่ใช่คีย์หลัก แต่มันไปส่งผลกระทบกับข้อมูลอื่นได้หรือเปล่า ดูขั้นตอรที่ 1 ก่อน ขั้นที่ 1 ได้มากนะคะ ทุก ๆ คอลัมน์ Recordsจะต้องเป็นค่า Single Value คือมีค่าเดียวเท่านั้น จะใส่แบบนี้ไม่ได้เพราะฉะนั้นข้อมูลทุกแถวจะต้องไม่มีค่าที่ซ้ำกันอย่างนี้นักศึกษาคนที่ 1 แน่นอนทั้ง 3 1 เทอมนี่คุณลงทะเบียนประมาณ 6-7 วิชาใช่ไหมคะ ข้อมูลมันก็จะเป็นแบบนี้ ถ้าเราไม่มีการทำ normalization คราวนี้ขั้นตอนที่ 1 เราจะข้อมูลที่ซ้ำซ้อนกันออกวิธีการง่ายมากค่ะ คือแก้ข้อมูลออกเป็นอย่างละแถวที่ไม่ซ้ำกันดูตัวอย่างนะคะ วิธีการทำ 1 nf ง่ายมากค่ะ ถ้าข้อมูลตัวไหนเป็นกลุ่มนะคะ คนที่ 1 วิชา ลงทะเบียนเรียน 3 วิชาใช่ไหมคะ คนที่ 2 มี 2 วิชาสามารถทำในรูปแบบ 1nf ก็คือเอามันกระจายออกมาค่ะ ย้ายข้อมูลพรุ่งนี้ออกมา กระจายออกใช่ไหมคะ กระจายออกง่ายมากข้อมูลพรุ่งนี้ก็ทำซ้ำลงมา ทำซ้ำลงมา ทำซ้ำลงมาทำซ้ำลงม ถามว่าอ้าวตาเขาทำไม ทำไม 001 มันซ้ำกันได้ล่ะ แต่รหัสวิชาเขาไม่ซ้ำกันเห็นไหมค่ะ เด็ก ๆ เลยง่ายมากค่ะ ข้อมูลทำไมเป็นก้อนอย่างนี้เรากระจายออกมาเป็นแยกออกมาเป็นบรรทัดบรรทัดเลยแค่นั้นเอง อย่างน้อยในข้อสอบต้องทำ 1nf ให้ได้ เพราะมันง่ายที่สุดแล้วนะคะ อย่างเช่นตัวนี้นะคะ ก็กระจายออกมา แล้วคราวนี้ถ้าเรากระจายข้อมูลเรียบร้อยแล้วนะคะ ว่าจะมาดูว่าในตารางนี้ค่ะ มันมีตารางเป็นของพนักงานใช่ไหมคะ เขาจะมีคีย์หลัก 1 ตัวล่ะ แต่ว่ามันจะมีตัวนี้ค่ะ ตัวที่ 1 ตัวที่ 2 ที่มีคุณสมบัติเป็นคีย์หลักได้ เราต้องแยกมันออกนะคะ กระบวนการนะคะ ดูก่อนว่า ตารางวิธีนะคะ สิ่งที่ขึ้นตรงกับคีย์หลักตัวนี้นะคะ ก็จะเป็นตัวที่ 1 ตัวที่ 2 ตัวที่ 3 สังเกตเราว่าที่รักมีตัวเดียว แต่ข้อมูลมีเยอะมากนะคะ ออกมาได้อันแรกเลย ก็จะมีรหัสโปรเจคนะคะ แล้วก็ชื่อโปรเจกนะคะ ใครเป็นผู้จัดการเงินเดือนเท่าไหร่งบประมาณเท่าไรคือมันจะเชื่อมโยงกับข้อมูลที่เป็นคีย์หลักก็คือ Project Code นะคะ วนนี้ส่วนตัวนี้เป็นคีย์คู่แข่ง 2 ตัว 2 ตัว มันสามารถทำหน้าที่เป็นคีย์หลักให้กับอย่างตัวนี้นะคะ มันจะเป็นคีย์หลักให้กับชื่อของพนักงาน อย่างตัวนี้ก็จะเป็นคีย์หลักสำหรับชื่อแผนก ถามว่ามันขึ้นตรงกับโปรเจก Code ไหม ไม่นะคะ เพราะฉะนั้นการทำขั้นตอนต่อมานะคะ 2NF ขั้นตอนที่ 1 เราจะต้องทำ 1 nf มาเรียบร้อยแล้วซึ่งได้ทักมาแล้วก็ต้องมาบัตรของการขึ้นต่อกันบางส่วนออก ก็คือการกำจัดแอตทริบิวตี้ไม่ขึ้นคีย์หลักของตารางนั้นเองจะออกนะคะ อย่างเช่นตัวนี้นะคะ การขึ้นต่อกันบางส่วนจะเห็นได้ว่า รหัสวิชากับชื่อวิชา มันไม่ขึ้นตรงกับรหัสนักศึกษาใช่ไหมคะ นี้จำได้นะ รูปเดิม รูปเดิม วิธีกำจัดปัญหาเราก็ดึงสิ่งที่มันเป็นปัญหาสิ่งที่มันไม่ขึ้นตรงกับคีย์หลักตัวนั้นไปสร้างตารางใหม่ สร้างตารางเพิ่มนะคะ เอาสิ่งที่เป็นปัญหาออกมาไปใส่ตารางใหม่กำหนดคีย์หลักใหม่นะคะ ในตารางเดิมนะคะ เราก็เอาคีย์หลักของตารางใหม่ไปใส่ แค่นั้นเองนะคะ วิธีการก็คือ เหมือนรูปนี้นะคะ สิ่งที่เป็นปัญหาที่จะยกตัวอย่างคือ รหัสวิชากับชื่อวิชา เพราะรหัสวิชามันไม่ได้ขึ้นตรงกับรหัสนักศึกษานะคะ เพราะฉะนั้นไอ้สองตัวนี้คือสิ่งที่เป็นปัญหานะคะ วิธีการแก้ปัญหาคือเราสร้างตารางผลการเรียนใหม่ สร้างตารางวิชาใหม่ เห็นไหมคะ ตารางใหม่เราจะตัดชื่อวิชาออก แต่ต้องเหลือ รหัสวิชาไว้เพื่อให้ไปเชื่อมโยงว่ารหัสวิชานี้มันชื่อวิชาอะไร จากอีกตารางหนึ่งแค่นั้นเองนะคะ โอเคค่ะ อันนี้เป็นตัวอย่างของการปรับบรรทัดฐาน ในรูปแบบของ 2NF เดี๋ยววันนี้จะให้ทำการบ้านเดี๋ยวค่อยย้อนกลับมาแล้วกันนะคะ สอนภาษาเดี๋ยวแก้แล้วตารางเมื่อกี้นะคะ ขั้นตอนสุดท้ายนะคะ 3nf นะคะ โดยความสัมพันธ์นะคะ ก่อนที่จะทำเป็น 3NF ได้จะต้องทำ 2NF มาก่อน อย่างนี้มาก่อนหลักของการทำขั้นตอนที่ 3 คือต้องเอาความสัมพันธ์ที่ไม่ใช่คีย์หลักออกนะคะ เช่นไม่ใช่คีย์หลักแต่ไม่มีผลกับ คอลัมน์อื่นไม่ได้นะคะ ไม่ได้ วิธีการแก้ปัญหาเช่นเดิมค่ะ สร้างตารางใหม่ขึ้นมา แก้ปัญหานั้น ๆ อย่างเช่นในตัวอย่างนะคะ รหัสพนักงานนะคะ ชื่อสกุล รหัสแผนก ชื่อแผนก เงินเดือนจะเห็นได้ว่าในตารางนี้นี่คีย์หลักก็คือรหัสพนักงาน แต่มันมีรหัสแผนกกับชื่อแผนกติดมาด้วย ซึ่งมันไม่ได้เกี่ยวกับรหัสพนักงานเลยนะคะ วิธีการแก้ปัญหาก็คือ เอารหัสแผนก กับชื่อแผนก ไปสร้างตารางใหม่ แต่ต้องยังคงรหัสแผนกไว้ตารางเดิมนะคะ เพื่อให้มันเชื่อมโยงได้ว่า ไอ้แผนก a001 นี่คือแผนกอะไรนะคะ อันนี้คือการแก้ปัญหาไม่ใช่คีย์หลักแต่ไปส่งผลกับคอลัมน์อื่น ในตารางนะคะ อันนี้คือ 3NF จริง ๆ แล้วอยากให้ลองทำในห้องมากกว่าแต่ด้วยสัปดาห์นี้มันมีข้อจำกัดนะก็ไม่เป็นไรนี้เป็นตัวอย่างนะคะ สรุปนะคะ วิธีการทำ normalization หรือว่าการปรับบรรทัดฐานนะคะ ทุก ๆ ที่ทุก ๆ ในแต่ละแถวจะต้องมีค่าของข้อมูลเพียงค่าเดียวเท่านั้นเช่นเวลาเรากรอกเบอร์โทรศัพท์เรามีโทรศัพท์ 3 เบอร์ก็จริงแต่เราจะกรอกได้แค่เบอร์เดียวนะคะ ถ้าอยากใส่เบอร์ที่ 2 ที่ 3 ก็ต้องเพิ่มข้อมูลแถวใหม่ขึ้นมานะคะ ต่อมา 2 NF ก็ปัญหาคือถ้ามีข้อมูลนะคะ ขอข้อมูลทุกตัวในตารางนั้นจะต้องขึ้นกับคีย์หลัก ของตารางตัวเดียวเท่านั้นนะคะ ข้อที่ 3 ถ้าคอลัมน์ไหนที่ไม่ใช่คีย์หลักนะคะ จะมาส่งผลกับคอลัมน์อื่นในตารางไม่ได้ เพราะฉะนั้นไปตลาดข้อ 1 นี้คือแค่กระจายตารางอันที่ 2 อันที่ 3 ถ้ามีปัญหาปุ๊บ เราต้องสร้างตารางใหม่นะคะ การบ้านเอาอย่างนี้ดีกว่า อาจารย์จะให้ทำน่าจะส่งวันนี้ เอาแค่ ข้อเดียวนะคะ ข้อเดียวพอ เพราะว่าจริง ๆ อยากให้ทำในห้องเดี๋ยวสัปดาห์หน้าค่อยทำในห้องนะคะ แต่อันนี้จะให้ลองทำดูก่อนว่าที่เรียนไปวันนี้เข้าใจไหม ถ้าทำเสร็จแล้วก็ค่อยเอามาส่ง ที่ตู้ส่งงานอาจารย์เอาเฉพาะข้อดีนะข้อเดียว ข้อเดียวพอวันนี้คนเดียวพอนะคะ ส่งในเวลานี้ล่ะ ให้ลองทำดูว่าเข้าใจไหมข้อนี้ทำอย่างนี้ ทำอย่างไรได้มาก ๆ เลยการเว้นช่องว่างให้แล้วเติมมา2 มิติคุณเห็นไหมว่ามันมีรหัสวิชานี่ วิชานี่ต้องทำอย่างไร กับมันแยกมันออกมาซิแยกยังไง เอาข้อเดียวก่อนนะคะ แล้วลองส่งมาให้อาจารย์ดูก่อนว่าเข้าใจมากน้อยขนาดไหนจริง ๆ อยากให้เรียนในห้องมากกว่าแต่วันนี้ก็เอามานี้ก่อนแล้วกัน ให้ทุกคนหายดีกลับมาอาทิตย์หน้าค่อยเดินดูในห้องดีกว่า วันนี้ก็ประมาณนี้นะคะ เดี๋ยวเวลาที่เหลือให้ทำข้อนี้แล้วมาส่ง วันนี้เลยยิ่งดีนะคะ เวลาที่เหลือทำใส่กระดาษมาส่งอาจารย์แล้วกันนะ ประมาณนี้ค่ะ เวลาที่เหลือทำให้เสร็จภายในวันนี้นะคะ ข้อเดียวเองนะคะ ข้อเดียว มีใครสงสัยไหมคะ ปุ๋ยยสงสัยไหม ปุ๋ยเปิดไม่ได้หรือเปล่า (นักศึกษาหญิง) ไม่มีค่ะ อาจารย์เดี๋ยวถ้าอไงเดี๋ยวให้อุบลไปส่งหรือยังไงคะเพราะว่าบนขึ้นไม่ ๆ ส่วนมากอยู่ในการอยู่หอนี่แหละ ตอนนี้เหลืออยู่ประมาณ 4 คนนี่ล่ะค่ะ ใส่ได้ก็เอามา Ok Thank You ค่ะ วันนี้ก็ประมาณนี้ค่ะ ขอบคุณทุกคนมากนะคะ ที่ยังตั้งใจเรียนอยู่ แล้วก็งานอย่าลืมส่งวันนี้นะคะ อยู่ดี ๆ ก็ทำให้เสร็จแล้วก็ฝากเพื่อนมาส่งรวมกันมาส่งก็ได้นะคะ ถ้าใครอยู่หอก็จะมาทำอยู่ดี ๆ ก็ได้หรือว่าทำเสร็จแล้วมาส่งที่โต๊ะ อาจารย์ก็ได้โอเคค่ะ วันนี้ก็ประมาณนี้ค่ะ ขอบคุณล่ามด้วยนะคะ ค่ะ ขอบคุณค่ะ ปุ๋ยวันนี้ครบนะ ปุ๋ยไปแล้ว OK