--- title: ฝึก PE กับ Bot โดยใช้ log ASR (ห้อง 5273) หลักการและระบบการจัดการฐานข้อมูล อ.เกวลี วันที่ 13 ธ.ค. 2565 ปลา subtitle: date: วันจันทร์ที่ 19 ธันวาคม 2565 เวลา 10.00 น. --- (ข้อความสดจากระบบถอดความเสียงพูดทางไกล) เดี๋ยวเริ่มเลยก็ได้ค่ะ โอเค หรืประมาณนี้นะคะ วันนี้จะเป็นบทที่ 5เกี่ยวกับกระบวนการการปรับบรรทัดฐานขาภาษาอังกฤษก็จะเป็นนกอะไร Season มันก็จะมีความหมายแล้วก็จุดประสงค์ของการทำการปรับมาตรฐานนะคะ แล้วก็จะเกี่ยวกับฟังก์ชันการขึ้นต่อการและกระบวนการในการทำ Normalization ด้วยนะคะ มี 3 ข้อวันนี้ โดยการปรับบรรทัดฐานนะคะ หรือว่านอนเมื่อไหร่แฟชั่นเนี่ยมันจะเป็นทฤษฎีที่คนที่จะต้องออกแบบฐานข้อมูลเขาจะต้องมาแปลงข้อมูลข้อมูลอาจจะเป็นข้อมูลที่ซับซ้อนนะคะ ให้มันง่าย เข้าใจก็ง่าย ใช้งานก็ง่ายแล้วก็ต้องเป็นระบบที่หลังจากออกแบบแล้วนำไปใช้งานจริงต้องเกิดปัญหาน้อยที่สุดนะคะ โดยกระบวนการทำงานนะคะ ในการปรับบรรทัดฐานนี่ มันจะมี 3 ระดับนะคะ จริง ๆ เราก็จะเรียกสั้น ๆ ว่า ระดับแรกนึกว่า 1nf นะคะ 2nf 3nf นะคะ ในระดับปริญญาตรีนี่ถึง 3 NF ได้ก็ถือว่าเก่งมากแล้วนะคะ ถ้าเป็นระดับที่สูงขึ้นไปอีกก็จะถึงได้ถึง 5 nf เลยนะคะ อันนี้เป็นแผนภาพกระบวนการทำงานนะคะ ก่อนที่เราจะมาทำกระบวนการปรับบรรทัดฐานได้นี่ มันก็ต้องวิเคราะห์ความต้องการของผู้ใช้งานก่อนว่าเขาต้องการระบบจัดการฐานข้อมูลแบบไหน มีความต้องการใช้ตารางกี่ตารางในฐานข้อมูลนะคะ หลังจากนั้น วาดรูปแผนที่โรงเรียนอาทิตย์ที่แล้วนะคะ ว่าเป็นแผนภาพเพื่อให้เข้าใจว่าสิ่งที่เรากำลังจะออกแบบหรือสิ่งที่เรากำลังจะทำฐานข้อมูล มันตรงตามความต้องการหรือเปล่านะคะ แต่รูปแบบของรูปที่เราวันอาทิตย์ที่แล้วนี่ มันจะยังเป็นรูปแบบที่ยังไม่เป็นบรรทัดฐานหรือว่ายังไม่มีการจัดระเบียบความคิดข้อมูลที่ซ้ำซ้อนกันออกไปหรืออาจจะมีคีย์หลักที่มันขอนแก่นนะคะ เราก็เลยจะต้องเอาข้อมูลจากที่เราว่าอาทิตย์ที่แล้วเนี่ยเข้าสู่กระบวนการปรับพื้นฐานก่อนซึ่งอย่างที่บอกเราทำแค่ถึง 3NF นี่ก็เก่งมากแล้วอย่างน้อย 2-3 นะคะ ไอ้บอยคอร์ดกับไม่ทำก็ก็ก็รักไว้ได้นะคะ แต่อย่างน้อยต้องถึงวัตถุประสงค์ของการปรับฐานนะคะ แน่นอนลดความซ้ำซ้อนกันของข้อมูลก็คือถ้าข้อมูลมันซ้ำกันนี่ เราก็ต้องตัดออกไป โครงสร้างเป็นสิ่งสำคัญมากเท่าไรเนื้อหาแล้วก็พื้นที่ในการเก็บข้อมูลอย่างมันก็จะเยอะก็ทำให้สิ้นเปลืองประมาณเหมือนกัน รวมถึงลดปัญหาความไม่ถูกต้องของข้อมูล ข้อมูลนี่ นอกจากที่จะไม่เกิดความสอดคล้องกันแล้วนี่ วันจันทร์อาจจะเกิดจากสาเหตุคือ ถ้าเหมือนที่ตัดกระจกทุกอย่างก็คือถ้าเราเก็บข้อมูลหลาย ๆ ที่นักศึกษาเก็บข้อมูลที่คณะด้วยเก็บที่มหาลัยด้วยเก็บที่สาขาด้วยเนี่บางทีถ้าวันนึงคุณอาจจะเปลี่ยนแปลงเบอร์โทรศัพท์ที่บ้าน ก็ต้องไปตามเปลี่ยนทุกที่เลยนะคะ ซึ่งเสียเวลา แล้วคราวนี้ก็จะเป็นที่เถียงกันว่าสรุปแล้วเบอร์ไหนถูกเบอร์ไหนผิด โดยวัตถุประสงค์ของการปรับบรรทัดฐานก็คือข้อมูลจะถูกเก็บอยู่แหล่งเดียวนะคะ เก็บไว้ที่เดียวแต่สามารถเรียกใช้และใช้งานได้หลาย ๆ ที่พร้อมกันได้ แต่ถ้ามันมีการเปลี่ยนแปลงข้อมูลหรือมีการลบหรือการเพิ่มข้อมูล เพื่อให้ข้อมูลเป็นปัจจุบันที่สุดเราจะเก็บข้อมูลไว้ที่เดียว แก้ไขก็ที่เดียว เพราะฉะนั้น ข้อมูลก็จะเป็นข้อมูลที่ถูกต้องแล้วก็ปัจจุบันด้วย แล้วก็อย่างที่ใช้ในการเก็บข้อมูลที่เดียวนี่ มันก็จะลดความผิดพลาดที่เกิดจากการเปลี่ยนแปลงข้อมูลปรับปรุงข้อมูลนะคะ เหมือนที่บอกว่าคือถ้าเปลี่ยนเบอร์โทรศัพท์หรือเปลี่ยนบ้านเลขที่นะคะ ก็เปลี่ยนแปลงที่เดียวเราสามารถเรียกใช้ข้อมูลได้พร้อมกันทุกที่ ถ้าต้องการข้อมูลนะคะ ความซ้ำซ้อนกันของข้อมูลนี่ มันอาจจะเกิดความผิดพลาดของการปรับปรุงข้อมูลนะคะ แนวคิดที่สำคัญของการออกแบบฐานข้อมูลการออกแบบข้อมูลที่ซ้ำซ้อนกันน้อยที่สุดนะคะ เพื่อประหยัดเนื้อที่ในการเก็บข้อมูล แล้วก็ลดปัญหาที่จะเกิดขึ้น ถ้าสมมุติว่าข้อมูลมันซ้ำซ้อนกันมากเกินไป หรือปริมาณข้อมูลมันเยอะเกินไปนะคะ อย่างเช่นตัวอย่างนะคะ ตารางด้านบนตารางสีเทาข้างบนจะเป็นตัวอย่างการออกแบบฐานข้อมูลที่ดี เดี๋ยวจะมาให้ดูว่าทำไมมันถึงดีกว่า ในตารางข้างบนนี่ มันจะมีตารางของพนักงานแล้วก็ต่างสาขาจะเห็นได้ว่าตารางพนักงาน จะมีส่วนหนึ่งที่เป็นข้อมูลของรหัสสาขาห้อยไว้อยู่ ถามว่าทำไมไม่เอาข้อมูลสาขามาไว้ในตารางพนักงานทีเดียวเลยล่ะ ทำไมต้องแยกออก ถ้าศึกษาดูคนแรกนะคะ พนักงานคนแรกรหัสสาขา b005 ก็คือสาขาเชียงใหม่ ถ้าสมมุติว่าพนักงานคนที่ 1 ลาออก ก็จะมีการลบข้อมูลเกิดขึ้นใช่ไหมคะ มีการลบข้อมูลบุคคลนี้ ขีดฆ่าทิ้ง ขีดฆ่าทิ้ง สิ่งไหนที่หายไปบ้าง แน่นอนสาขาเชียงใหม่จะหายไปด้วย ถ้าสมมุติเราอยู่ด้วยกัน แต่ถ้าสมมุติพนักงานคนนี้ลาออกสาขาเชียงใหม่ยังอยู่ไหม ยังอยู่นะคะ ซึ่งแตกต่างจากด้านล่างนะคะ ด้านล่าง เห็นไหมคะ ว่าถ้าสมมุติว่าจะลบทิ้งหมดเลย กากบาททิ้ง สาขาเชียงใหม่หายไปด้วย แบบนี้เป็นการออกแบบที่ไม่ดี เหมือนคนข้างล่างออก สาขาพิษณุโลกก็หายไปด้วย แต่ถ้าเป็นตารางด้านบนถ้าคนนี้ลาออก สาขายังอยู่ไหม ยังอยู่เหมือนเดิม อันนี้คือการออกแบบฐานข้อมูลที่ดี ถ้าข้อมูลตัวไหนที่มันมีผลกระทบต่อกัน เราจะต้องแยกตารางออกนะคะ ตัวอย่างนะคะ ถ้าการออกแบบที่ดีนี่ เราจะลดปัญหาความซ้ำซ้อนของข้อมูลได้นะคะ เช่นตัวนี้อันนี้เป็นตารางที่ออกแบบที่ไม่ดีนะคะ เห็นไหมคะ ว่ามันจะมีรหัสสาขา แล้วก็ที่อยู่ อยู่ในตารางเดียวกัน ถ้าสมมุติว่าอาจารย์เพิ่มเข้ามาใหม่อีก 1 คนนะคะ เป็น EM 10 ถ้าต้องการเพิ่มพนักงานสาขาเชียงใหม่ ก็ต้องมากรอกข้อมูลตรงนี้อีก เชียงใหม่ณโ แต่ถ้าการออกแบบฐานข้อมูลที่ดีเนี่เราแค่ใส่รหัสสาขาไม่จำเป็นจะต้องพิมพ์ที่อยู่ทุกครั้งก็ได้ เหมือนเวลาคุณไปธนาคารใช่ไหมคะ คุณก็แค่ยื่นบัตรประชาชนพนักงานธนาคารก็จะกรอกเลขบัตรประชาชนคุณลงไป หรืออาจจะเอาชิปการ์ดของคุณนี่ เสียบเข้าไปในเครื่องถามว่าตอนนี้เราได้กรอกข้อมูลไหม ไม่ต้อง ขอแค่มีเลขบัตรประชาชน ข้อมูลทุกอย่างที่คุณมีเขาจะดึงออกมาจากระบบให้เลย เราไม่ต้องมาเสียเวลาก่อน เหมือนเมื่อก่อนนี่ ต้องเขียนใส่กระดาษ เลขบัตรประชาชน ด้านรายชื่ออะไรนามสกุลอะไรที่อยู่ที่ไหนเบอร์โทรศัพท์อะไรเดี๋ยวนี้ไม่ต้องเลยขอแค่มีเลขบัตรประชาชนข้อมูลทุกอย่างเราสามารถดึงขึ้นมาได้อยู่แล้วอันนี้ก็เช่นเดียวกัน ถ้าการออกแบบไม่ดี เราต้องกรอกข้อมูลทุกช่องเลยเนี่ย มันทำให้อาจจะคนเดียวไม่เดือดร้อนค่ะ ถ้าเป็นพนักงานใหม่ เป็นเหมือนโรงงานน่ะค่ะ ที่รพันคนนั่งกรอกเชียงใหม่เป็นพันครั้งนี่ เสียเวลามาก ๆ อันนี้คือการออกแบบที่ไม่ดีนะคะ กับอีกอย่างหนึ่งถ้าสมมุติว่าเมื่อกี้อาจารย์เพิ่มพนักงานแล้ว ถ้ามันอยากเพิ่มแค่สาขา อย่เพิ่งแค่สาขาซึ่งในตารางนี้ กีฬาจำได้ไหมคะ คจะเป็นคีย์ที่ขีดเส้นใต้ซึ่งอาจารย์อยากเพิ่มสาขาสมุทรปราการจะเพิ่ม B100 สกลนครนะคะ ถามว่าเพิ่มได้ไหม อาจจะเป็นการตั้งสาขาแต่ยังไม่มีพนักงานหรอก ถ้าจากตารางนี้เราจะเพิ่มเฉพาะชื่อสาขาไม่ได้ เรายังไม่มีรหัสพนักงาน เพราะรหัสพนักงานเป็นคีย์หลัก คีย์หลักคือคุณสมบัติมันคือเป็นค่าว่างไม่ได้ ก็ทำให้เราเพิ่มสาขาไม่ได้ไม่มีพนักงานอันนี้ก็เป็นข้อผิดพลาดในการเพิ่มข้อมูล ถ้าเราออกแบบตารางแบบนี้นะคะ นี่ก็คือปัญหาที่เกิดขึ้นจากการออกแบบตารางดี กลับปัญหามาเป็นปัญหาการลบข้อมูลที่อาจารย์บอกถ้าพนักงานคนนี้ออกสาขาเชียงใหม่หายไปด้วย โดนลบไป กรณีความผิดพลาดจากการเปลี่ยนแปลง เหมือน b03 b03 นะคะ เป็นกรุงเทพฯ ใช่ไหมคะ แล้วคราวนี้ข้อมูลมันอยู่ในตารางเดียวกัน ถ้านักศึกษาจะแก้สมมุติว่าเราย้ายจากกรุงเทพฯ ไปอยู่นนทบุรี สมมุติมีพนักงาน 3,000 คน คุณต้องแก้กรุงเทพฯ 3,000 ครั้ง เป็นนนทบุรี พนักงานมีคน 2-3 คนไม่ใช่ปัญหาค่ะ แต่ถ้าคุณเป็นโรงงานขนาดใหญ่นั่งแก้ทีละ 3000 คนไม่ใช่เรื่องสนุกแน่ ๆ มันก็เป็นปัญหานะคะ เพราะฉะนั้น เราควรแยกตารางพนักงาน กับตารางสาขาออกจากกันนะคะ นี่เป็นเหตุผล นี่คือขนาดข้อมูลขนาดเล็กนะคะ แล้วยังเห็นปัญหาขนาดนี้ ถ้าสมมุติว่าองค์กรขนาดใหญ่ เป็นบริษัทเป็นโรงงานร ะดับโรงเรียนมีนักเรียนเป็น 2-302 3000 คนก็ได้นะคะ มีปัญหาเยอะมาก ถ้าสมมุติว่าเราจัดการตารางไม่ดีนะคะ จากปัญหาที่เกิดขึ้นเมื่อกี้นะคะ อย่างที่บอกค่ะ เราจะแก้ปัญหาโดยการแยกตารางเป็น 2 ตารางแบบนี้นะคะ ฟังก์ชันการขึ้นต่อกันนะคะ อันนี้เดี๋ยวเป็นเกี่ยวกับตารางหนึ่งนะคะ มีผลดีต่อราง 1 เราจะเรียกว่าเป็นฟังก์ชันการขึ้นต่อกัน เดี๋ยวดูตัวอย่างเลยแล้วกัน อย่างเช่นตารางนี้นะคะ ดูจากรหัสพนักงานนะคะ เราจะเห็นได้ว่ารหัสพนักงานจะส่งผลกับชื่อตำแหน่ง สัญลักษณ์ของการขึ้นต่อกันนะคะ อันไหนเป็นตัวหลักชี้ไปที่ตัวรองนะคะ ตามหัวลูกศรเลย ดูทิศทางตามหัวลูกศรนะคะ อันไหนเป็นตัวหลักอันไหนเป็นตัวรองนะคะ อย่างเช่นตัวนี้ ถามว่าตำแหน่งบัญชีที่รหัสพนักงานได้ไหม นะคะ ถามว่าไม่ได้ เพราะการขึ้นต่อการจะต้องเป็นลักษณะหนึ่งต่อหนึ่งเท่านั้นนะคะ เป็นหนึ่งต่อกลุ่มไม่ได้ ชนิดของการขึ้นต่อกันนะคะ จะมีอยู่ 4 ชนิดนะคะ ชนิดแรกเป็นการขึ้นต่อกันโดยสมบูรณ์นะคะ ซึ่งอาจจะเป็นเกี่ยวกับตารางนะคะ จะมีคอลัมน์ 1 คอลัมน์หรือมากกว่า 1 คอลัมน์มาประกอบกันนะคะ โดยในคอลัมน์นั้น ๆ นี่ จะระบุค่าที่ระบุความพิเศษของแถว ๆ ได้อย่างชัดเจน aprilia จะเป็นค่าเฉพาะที่บอกเลยว่าคอร์ดข้อมูลแถวนั้นเนี่ยมันมีลักษณะพิเศษเฉพาะตัวยังไงโดยในทุกความสัมพันธ์นี่จะต้องระบุค่าคีย์หลักไว้ด้วย ครึ่งปีหลังนี้คือต้องเป็นค่าเอกลักษณ์คือไม่ซ้ำกันอยู่แล้วนะคะ อย่างเช่นการขึ้นต่อกันอย่างสมบูรณ์อันแรกนะคะ Attribute ก็คือคอลัมน์ที่ไม่ใช่คีย์หลัก คี์หลักจำได้ใช่ไหมคะ คีย์หลักจะเป็นคอลัมน์ที่มีขีดเส้นใต้ คอลัมน์ที่ไม่ใช่คีย์หลักจะขึ้นตรงต่อคอลัมน์ ที่เป็นคีย์หลัก คอลัมน์เดียวเท่านั้น เช่นเลขบัตรประชาชนจะขึ้นจะเป็นเจ้าของชื่อนี้เท่านั้นนะคะ เพราะฉะนั้น การขึ้นตัวกันอย่างสมบูรณ์จะเป็นลักษณะแบบหนึ่งต่อหนึ่งนะคะ เลขบัตรประชาชน 1 เลข จะต้องเป็นของคนคนเดียวเท่านั้น ไม่ใช่ว่าเลขประชาชนที่ใช้ 10 คนเป็นไปไม่ได้นะคะ ตัวอย่างนะคะ ตารางที่มี Column หลายตัวนะคะ ขึ้นอยู่กับคีย์หลักตัวเดียว เช่น คนหนึ่งคนนี่ ก็จะมีข้อมูลชื่อ นามสกุล วัน เดือน ปีเกิดวันที่ทำบัตรใช่ไหมคะ แต่ว่าเขาจะต้องขึ้นตรงกับเลขบัตรประชาชนเดียวเท่านั้น ถามว่าสามคนนี้อาจจะเกิดวันเดียวกันก็ได้ค่ะ เลขบัตรประชาชนเขาจะไม่เหมือนกัน หรือเขาอาจจะมาทำบัตรวันเดียวกัน แต่หมายเลขบัตรประชาชนเขาจะไม่ซ้ำกัน คืออะไรซ้ำกันได้ทุกอย่างค่ะ ยกเว้นหมายเลขบัตรประชาชน แต่บางตารางนะคะ ก็อาจจะเป็นการรวมตัวกันของคีย์หลักมากกว่า 1 คีย์หลักนะคะ มารวมกัน เช่น นักศึกษานี้ เอกสารนี้ลงทะเบียนวิชานี้ ได้เกรดอะไร อันนี้ก็เป็นความสัมพันธ์ที่เกิดขึ้นได้เหมือนกันค่ะ ถามว่าเลขบัตรนักศึกษาซ้ำกันได้ไหม รหัสวิชาซ้ำกันได้ไหม เหมือนชื่อวิชา รหัสหนึ่ง เชืคนอื่นก็รหัสวิชาอีกอันนึงนี้จะไม่ซ้ำกันอยู่แล้วนะคะ ต่อมาจะเป็นการขึ้นต่อกันบางส่วนมันก็จะเป็นอาศัยความสัมพันธ์ที่เกิดขึ้นจากคีย์ผสมนะคะ อาจจะเป็นเส้นตรงจากตารางอื่น หรือส่งตารางมารวมกัน อาจจะไม่ใช่คีย์หลักก็ได้แต่มันมีความหมายกับคอลัมน์หนึ่ง เดี๋ยวจะยกตัวอย่างเลยดีกว่า อย่างเช่น นึกว่าตารางเทียบไซส์ให้ดูเมื่อกี้นะคะ ก็จะมีรหัสนักศึกษารหัสวิชามีเกรด แล้วก็มีการบอกด้วยว่ารหัสวิชานี้ เป็นชื่อวิชาอะไรนะคะ มันจะเป็นการเกิดขึ้นเมื่อ คีย์หลักประกอบกันด้วยคอลัมน์หรือว่า Accident รวมกัน โดยบางส่วนของคีย์หลักสามารถไประบุค่าอย่างอื่น ที่ไม่ใช่คีย์หลักได้นะคะ อย่างเช่นในความสัมพันธ์นี้คีย์หลักจะมี 2 ตัว มีรหัสนักศึกษา กับรหัสวิชานะคะ ถามว่า ถ้ามีแต่รหัสนักศึกษา เกรดนะคะ รหัสวิชา แล้วเราจะรู้ไหมว่าชื่อวิชาที่เราเรียนไปนี่ ชื่อวิชาอะไร เหมือนบางคนรู้รหัสวิชา แต่จำชื่อวิชาไม่ได้ก็มีเพราะฉะนั้น รหัสวิชานี่ มันเลยสามารถไปส่งผลกับชื่อวิชาได้เหมือนกันเพราะเป็นตัวระบุว่าไปหลายวิชานี่ ชื่อวิชาอะไรก็คือคีย์หลักในตารางนี้มี 2 อัน แต่มีคีย์หลัก 1 ตัวนี่ ไปมีผลกับAttribute 1 ได้นะคะ อันนี้คือความขึ้นต่อกันบางส่วนอย่างเช่นตัวนี้ ก็จะเป็นของจริงถ้าสมมติว่าอาจารย์ปัดรหัสนักศึกษาออก มีแค่ 5 วิชามีเกรดมีการวิชาเขียนโปรแกรมแล้ว ถามรู้ไหมคะ ว่าเกรด Aที่ของใครนะคะ หรือว่าอย่าลบไปก่อนนะ หรือว่าการลบรหัสวิชาออก เหลือแต่นักศึกษา เหลือเกรด ชื่อวิชา แล้วถามว่ารหัสวิชาอะไรล่ะ ที่เราได้เกรด A เราก็ไม่ทราบอีกเหมือนกันนะคะ อันนี้ก็คือการขึ้นต่อกันบางส่วนนะคะ อันนี้ตัวอย่างนะคะ ต่อมา เป็นการขึ้นต่อกันแบบส่งต่อ ก็จะเป็นความสัมพันธ์ที่เกิดขึ้นก็ต่อเมื่อมีแอตทริบิวต์ หรือว่าคนอื่นที่ไม่ใช่ครีม แต่ไปสามารถขึ้นสามารถระบุค่าของแอตทริบิวต์อื่น ใน Record ได้ซึ่งเป็นการออกแบบที่ไม่เหมาะสม เพราะส่วนใหญ่แล้วในตารางนี่ ถ้าเราจะระบุค่าอื่น ให้กับคอลัมน์อื่นได้ ควรจะต้องเป็นคีย์หลักเท่านั้น ดูตัวอย่างนะคะ เช่นตารางนี้ เขาบอกว่าสิ่งที่เกิดขึ้นคือแอตทริบิวต์คือคอลัมน์ ที่ไม่ใช่คีย์หลักหรือ Primary Key นะคะ ก็คือไม่ใช่คอลัมน์ที่มีเส้นขีดมันไประบุค่าอื่น ๆ ในตารางได้เช่น ตารางนี้ก็คือเลขประจำตัว นะคะ โดยตัวเลขประจำตัวนี่ ไปมีผลกับชื่อนามสกุลที่อยู่ตำแหน่งใช่ไหมคะ เขานี่ รถประจำตำแหน่งมันไม่ถูกระบุโดยเลขประจำตัวมันถูกระบุโดยรหัสตำแหน่ง เหมือนถ้าเป็นผู้จัดการนี่ แผนที่ผู้จัดการนะคะ จะรู้เลยว่ารถประจำตำแหน่งคืออะไร แต่เขาไปเช็กที่รหัสตำแหน่ง แทนที่จะเช็คกับเลขประจําตัวการออกแบบที่ไม่ดี เพราะฉะนั้น ถ้าสมมุติว่าจะให้รถประจำตำแหน่ง วิธีการแก้ปัญหาก็คือเราควรจะแยกตารางนี้ ออกไปสร้างตารางใหม่เลยค่ะ มันไม่ควรจะมาขึ้นกับตาราง ที่มีคีย์หลักแต่ไม่สามารถระบุค่าข้อมูลตรงนี้ได้นี่ มันไม่ควรทำกลับต่อมาเป็นการขึ้นต่อการเชิงกลุ่มนะคะ ก็จะเป็นความสัมพันธ์ระหว่างคอลัมน์ Attribute ขึ้นต่อกันแบบสมบูรณ์นะคะ ก็ไปสามารถระบุค่าอื่นได้ โดยที่อย่างเช่นตัวอย่าง ในตารางนี้นะคะ จะมีรหัสหลักสูตรสามารถระบุรหัสวิชาได้หลายวิชา เช่น จริง ๆ ในสถานศึกษาจะเห็นได้ว่ามีเลข 122 รหัสนักศึกษา B122 คืออะไร B12 ก็คือหลักสูตรที่เราเรียนอยู่ซึ่งในหลักสูตรที่โรเรียนนี่ มันมีวิชามากกว่า 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 มันซ้ำกันได้ล่ะ แต่รหัสวิชาเขาไม่ซ้ำกันเห็นไหมค่ะ เด็ก ๆ เลยง่ายมากค่ะ ข้อมูลทำไมเป็นก้อนอย่างนี้เรากระจายออกมา เป็นแยกออกมาเป็นบรรทัด บรรทัดเลยแค่นั้นเอง อย่างน้อยในข้อสอบ ต้องทำ ให้ได้มันง่ายที่สุดแล้วนะคะ ไม่ใช่ตัวนี้นะคะ ก็กระจายออกมาแล้วคราวนี้ ถ้าเรากระจายข้อมูลเรียบร้อยแล้วนะคะ ก็จะมาดูว่าในตารางนี้ค่ะ มันมีตารางของพนักงานใช่ไหมคะ เขาจะมีคีย์หลัก 1 ตัวละ แต่ว่ามันจะมีตัวนี้ค่ะ ตัวที่ 1 ตัวที่ 2 ที่มีคุณสมบัติเป็นคีย์หลักได้ เราต้องแยกมันออกนะคะ กระบวนการนะคะ ดูก่อนว่าตารางวิธีนะคะ สิ่งที่ขึ้นตรงกับคีย์หลักตัวนี้นะคะ ก็จะเป็นตัวที่ 1 ตัวที่ 2 ตัวที่ 3 สังเกตแล้ว ว่าที่รักมีตัวเดียว ข้อมูลมีเยอะมากนะคะ ออกมาได้อันแรกเลย รหัสโปรเจกต์นะคะ แล้วก็ชื่อโปรเจกต์นะคะ ใครเป็นผู้จัดการเงินเดือนเท่าไหร่ งบประมาณเท่าไรคือมันจะเชื่อมโยงกับข้อมูลที่เป็นคีย์หลัก ก็คือ Project Code วันนี้ ส่วนตัวนี้เป็นคีย์คู่แข่ง 2 ตัว 2 ตัว มันสามารถทำหน้าที่เป็นคีย์หลัก ให้กับอย่างตัวนี้นะคะ มันจะเป็นคีย์หลัก ให้กับชื่อของพนักงาน อย่างตัวนี้ว่าจะเป็นคีย์หลักสำหรับชื่อแผนก ถามว่ามันขึ้นตรงกับโปรเจกต์ Code ไหม ไม่นะคะ เพราะฉะนั้น การทำขั้นตอนต่อมานะคะ 2 NF ขั้นตอนที่ 1เราจะต้องทำ 1 nf มาเรียบร้อยแล้ว ซึ่งได้ทักมาแล้วก็ต้องมาบัตรของการขึ้นต่อกันบางส่วนออก ก็คือการกำจัด Attribute ไม่ขึ้นคีย์หลักของตารางนั้นเอง จะออกนะคะ อย่างเช่นตัวนี้นะคะ การขึ้นต่อกันบางส่วนจะเห็นได้ว่ารหัสวิชากับชื่อวิชามันไม่ขึ้นตรงกับรหัสนักศึกษาใช่ไหมคะ อันนี้จำได้นะ รูปเดิมนะ รูปเดิม วิธีกำจัดปัญหา เราก็ดึงสิ่งที่มันเป็นปัญหาสิ่งที่มันไม่ขึ้นตรงกับคีย์หลักตัวนั้น ไปสร้างตารางใหม่ สร้างตารางเพิ่มเอาสิ่งที่เป็นปัญหาออกมาไปใส่ตารางใหม่ กำหนดคีย์หลักใหม่นะคะ ในตารางเดิมนะคะ เราก็เอาคีย์หลักของตารางใหม่ไปใส่แค่นั้นเอง วิธีการก็คือรูปนี้นะคะ สิ่งที่เป็นปัญหาที่ยกตัวอย่างคือ รหัสวิชา ชื่อวิชา เพราะรหัสวิชามันไม่ได้ขึ้นตรงกับรหัสนักศึกษาเพราะฉะนั้น ไอ้สองตัวนี้คือสิ่งที่เป็นปัญหา วิธีการแก้ปัญหาคือเราสร้างตารางผลการเรียนใหม่ สร้างตารางวิชาใหม่ เห็นไหมคะ ในตารางใหม่เราจะตัดชื่อวิชาออก แต่ต้องเหลือรหัสวิชาไว้เพื่อให้เชื่อมโยงว่ารหัสวิชานี้ มันชื่อวิชาอะไร จากอีกตาราง 1 แค่นั้นเองนะคะ โอเคค่ะ อันนี้เป็นตัวอย่าง ของการสารในรูปแบบของ 2 NF เดี๋ยววันนี้ จะให้ทำการบ้านเดี๋ยวค่อยย้อนกลับมาแล้วกันนะคะ เดี๋ยวแก้แล้ว เมื่อกี้นะคะ ขั้นตอนสุดท้ายนะคะ 3nf นะคะ โดยความสัมพันธ์นะคะ ก่อนที่จะทำเป็น 3Nf ได้จะต้องทำ 2 อย่างนี้มาก่อนหลักของการทำขั้นตอนที่ 3 คือ ต้องเอาความสัมพันธ์ที่ไม่ใช่คีย์หลักออกนะคะ เช่น ไม่ใช่คีย์หลักแต่ไม่มีผลกับคอลัมน์อื่นไม่ได้นะคะ ไม่ได้วิธีการแก้ปัญหาเช่นเดิมค่ะ สร้างตารางใหม่ขึ้นมา แก้ปัญหานาน ๆ อย่างเช่นในตัวอย่างนะคะ รหัสพนักงานนะคะ ชื่อ สกุล รหัสแผนก ชื่อแผนก เงินเดือน จะเห็นได้ว่าในตารางนี้นี่ คีย์หลักก็คือรหัสพนักงาน แต่มันมีรหัสแผนกกับชื่อแผนกติดมาด้วย ซึ่งมันไม่ได้เกี่ยวกับรหัสพนักงานเลย วิธีการแก้ปัญหา ก็คือเอารหัสแผนก กับชื่อแผนกไปสร้างตารางใหม่ แต่ต้องยังคงรหัสแผนกไว้ตารางเดิมนะคะ เพื่อให้มันเชื่อมโยงได้ว่าไอ้แผนก a001 นี่ คือแผนกอะไรนะคะ อันนี้คือการแก้ปัญหาไม่ใช่คีย์หลัก แต่ไปส่งผลกับคอลัมน์อื่น ๆ ในตารางนะคะ อันนี้คือ 3NF จริง ๆ แล้วอยากให้ลองทำในห้องมากกว่า แต่ด้วยสัปดาห์นี้มันมีข้อจำกัดเนะก็ไม่เป็นไร อันนี้เป็นตัวอย่างนะคะ สรุปนะคะ วิธีการทำ Normalization หรือว่าการปรับบรรทัดฐานนะคะ ทุก ๆ ที่ทุก ๆ คอลัมน์ในแต่ละแถว จะต้องมีค่าของข้อมูลเพียงค่าเดียวเท่านั้น เช่นเวลาเรากรอกเบอร์โทรศัพท์เรามีโทรศัพท์ 3 เบอร์ก็จริง แต่เราจะกรอกได้แค่เบอร์เดียว ถ้าอยากใส่เบอร์ที่ 2 ที่ 3 ก็ต้องเพิ่มข้อมูลแถวใหม่ขึ้นมา ต่อมา 2 NF นะคะ ก็ปัญหาคือถ้ามีข้อมูลนะคะ ขอข้อมูลทุกตัวในตารางนั้นจะต้องขึ้นกับคีย์หลักของตารางตัวเดียวเท่านั้นนะคะ ข้อที่ 3 ถ้าคอลัมน์ไหนที่ไม่ใช่คีย์หลักนะคะ จะมาส่งผลกับคอลัมน์อื่นในตารางไม่ได้ เพราะฉะนั้น ข้อ 1 นี้คือแค่กระจายตารางอันที่ 2 อันที่ 3 ถ้ามีปัญหาเราต้องสร้างตารางใหม่ การบ้านเอาอย่างนี้ดีกว่า อาจารย์จะให้ทำ น่าจะส่งวันนี้เอาแค่ข้อเดียวนะคะ ข้อเดียวพอเพราะว่าจริง ๆ อยากให้ทำในห้องเดี๋ยวสัปดาห์หน้าค่อยทำในห้องจะให้ลองทำดูก่อนว่าที่เรียนไปวันนี้ เข้าใจไหม ถ้าทำเสร็จแล้วก็ค่อยเอามาส่งตู้ส่งงานอาจารย์ เอาเฉพาะข้อนี้นะ ข้อเดียว ข้อเดียวพอวันนี้คนเดียวพอนะคะ ส่งในเวลานี้แหละให้ลองทำดูว่าเข้าใจไหมข้อนี้ทำอย่างนี้ ทำอย่ได้มาก ๆ เลย การเว้นช่องว่างให้แล้วเติมมา2 มิติคุณเห็นไหมว่ามันมีรหัสวิชานี่ วิชาเนี่ต้องทำยังไงกับมันแยกมันออกมาสิแยกยังไงเอาข้าวเหนียวก่อนนะคะ แล้วลองส่งมาให้อาจารย์ดูก่อน ว่าเข้าใจมากน้อยขนาดไหน จริง ๆ อยากให้เรียนในห้องมากกว่า แต่วันนี้ก็เอามานี้ก่อนแล้วกันให้ทุกคนหายดีกลับมาอาทิตย์หน้าค่อยเดินดูในห้องดีกว่า วันนี้ก็ประมาณนี้นะคะ เดี๋ยวเวลาที่เหลือให้ทำข้อนี้แล้ว มาส่งวันนี้เลยยิ่งดีเ วลาที่เหลือทำใส่กระดาษมาส่งอาจารย์แล้วกันนะประมาณนี้ค่ะ เวลาที่เหลือทำให้เสร็จภายในวันนี้นะคะ ข้อเดียวเองนะคะ ข้อเดียวใครสงสัยไหมคะ ปุ๋ยสงสัยไหม เปิดไม่ได้หรือเปล่า// ไม่มีค่ะ อาจารย์เดี๋ยวถ้ายังไงเดี๋ยวให้อุบลไปส่งหรือยังไงคะเพราะว่าบนขึ้น (อาจารย์เกวลี) ไม่ ๆ ส่วนมากอยู่ในการอยู่หอนี่แหละ ตอนนี้เหลืออยู่ประมาณ ใส่ได้ก็เอามา Ok Thank You วันนี้ก็ประมาณนี้ค่ะ ขอบคุณทุกคนมากนะคะ ที่ยังตั้งใจเรียนอยู่ แล้วก็งานอย่าลืมส่งวันนี้นะคะ อยู่ดี ๆ ก็ทำให้เสร็จแล้วก็ฝากเพื่อนมาส่งรวมกันมาส่งก็ได้นะคะ ถ้าใครอยู่หอก็จะมาทำอยู่ DSS ก็ได้หรือว่าทำเสร็จแล้วมาส่งที่อาจารย์ก็ได้โอเคค่ะ วันนี้ก็ประมาณนี้ค่ะ ขอบคุณล่ามด้วยนะคะ ค่ะ ขอบคุณค่ะ ปุ๋ย วันนี้ครบนะ ปุ๋ยไปแล้ว OK