--- title: ฝึก PE กับ Bot โดยใช้ log ASR (ห้อง 5273) หลักการและระบบการจัดการฐานข้อมูล อ.เกวลี วันที่ 13 ธ.ค. 2565 นาโน subtitle: date: วันจันทร์ที่ 19 ธันวาคม 2565 เวลา 10.00 น. --- (ข้อความสดจากระบบถอดความเสียงพูดทางไกล) (อาจารย์เกวลี) ประมาณนี้นะคะ วันนี้จะเป็นบทที่ 5 เกี่ยวกับกระบวนการการปรับบรรทัดฐาน ของภาษาอังกฤษก็จะเป็นนกอะไร Seasonมันก็จะมีความหมายแล้วก็จุดประสงค์ของการทำการปรับมาตรฐานนะคะแล้วก็จะเกี่ยวกับฟังก์ชั่นการขึ้นต่อการและกระบวนการในการทำนมคาร์เนชั่นด้วยนะคะมี 3 ข้อวันนี้คนที่จะต้องออกแบบฐานข้อมูลเขาจะต้องมาแปลงข้อมูล จากข้อมูลอาจจะเป็นข้อมูลที่ซับซ้อนนะคะ ให้มันง่าย เข้าใจก็ง่ายก็ง่าย นำไปใช้งานก็ง่าย แล้วก็ต้องเป็นระบบที่หลังจากออกแบบแล้วนำไปใช้งานจริงนี่ ต้องเกิดปัญหาน้อยที่สุดนะค ะ โดยกระบวนการทำงานนะคะ ในการปรับบรรทัดฐานนี่ มันจะมีอยู่ 3 ระดับ จริง ๆ เราก็จะเรียกสั้น ๆ ว่าระดับแรกนึกว่า 1nf นะคะ 2nf 3nf นะคะ ในระดับปริญญาตรีนี่ ถึง 3nf ได้ ก็ถือว่าเก่งมากแล้วนะคะ แต่ถ้าเป็นระดับที่สูงขึ้นไปอีก ก็จะถึงได้ถึง 5 nf เลยนะคะ อันนี้เป็นแผนภาพกระบวนการทำงานนะคะ ก่อนที่เราจะมาทำกระบวนการปรับบรรทัดฐานได้นี่ มันก็ต้องวิเคราะห์ความต้องการของผู้ใช้งานก่อนว่าเขาต้องการระบบการฐานข้อมูลแบบไหน มีความต้องการใช้ตารางกี่ตารางในฐานข้อมูลนะคะ หลังจากนั้น ก็จะมาวาดรูป เหมือนที่เราเรียนอาทิตย์ที่แล้วนะคะ ว่าเป็นแผนภาพเพื่อให้เข้าใจว่าสิ่งที่เรากำลังจะออกแบบหรือสิ่งที่เรากำลังจะทำฐานข้อมูลมันตรงตามความต้องการหรือเปล่านะคะ แต่รูปแบบของรูปที่เราวันอาทิตย์ที่แล้วนี่ มันจะยังเป็นรูปแบบที่ยังไม่เป็นบรรทัดฐาน หรือว่ายังไม่มีการจัดระเบียบความคิดข้อมูลที่ตัดข้อมูลที่มันซ้ำซ้อนกันออกไป หรืออาจจะมีคีย์หลักที่มันขอนแก่นนะคะ เราก็เลยจะต้องเอาข้อมูลจากที่เราว่าอาทิตย์ที่แล้นี่ มาเข้าสู่กระบวนการปรับพื้นฐานก่อน ซึ่งอย่างที่บอกเราทำแค่ถึง 3S นี่ ก็เก่งมากแล้ว แต่อย่างน้อยต้องถึง 3 นะคะ ไอ้บอยคอร์ดกับ 4 nf นีั่ไม่ทำก็ก็ก็รักไว้ได้นะคะ แต่อย่างน้อยต้องถึงวัตถุประสงค์ของการปรับฐานนะคะ แน่นอน ลดความซ้ำซ้อนกันของข้อมูล ก็คือถ้าข้อมูลมันซ้ำกันเนี่ย เราก็ต้องตัดออกไป เพราะถ้ามันซ้ำกันมากเท่าไร เนื้อหาแล้วก็พื้นที่ในการเก็บข้อมูลอย่างมันก็จะเยอะก็ทำให้สิ้นเปลืองประมาณเหมือนกันรวมถึงลดปัญหาความไม่ถูกต้องของข้อมูล ข้อมูลนี่ นอกจากที่จะไม่เกิดความซ้ำซ้อนกันแล้วเนี่ย มันอาจจะเกิดจากสาเหตุคือถ้าเหมือนที่ตัดกระจกทุกอย่างก็คือถ้าเราเก็บข้อมูลหลาย ๆ ที่ อย่างนักศึกษาเก็บข้อมูลที่คณะด้วยเก็บที่มหาลัย ด้วยเก็บที่สาขาด้วยเนี่ย บางทีถ้าวันหนึ่ง คุณอาจจะเปลี่ยนแปลงเบอร์โทรศัพท์ที่บ้าน เราก็ต้องไปตามเปลี่ยนทุกที่เลยนะคะ ซึ่งเสียเวลา แล้วคราวนี้ก็จะเป็นที่เถียงกันว่าสรุปแล้วเบอร์ไหนถูก เบอร์ไหนผิดนะคะ โดยวัตถุประสงค์ของการปรับบรรทัดฐานนี่ ก็คือข้อมูลจะถูกเก็บอยู่เก็บอยู่แหล่งเดียวนะคะ เก็บไว้ที่เดียว แต่สามารถเรียกใช้และใช้งานได้หลาย ๆ ที่พร้อมกันได้แต่ถ้ามันมีการเปลี่ยนแปลงข้อมูล หรือมีการลบหรือการเพิ่มข้อมูลนี่ เพื่อให้ข้อมูลเป็นปัจจุบันที่สุด เราเลยเก็บข้อมูลไว้ที่เดียว แก้ไขก็ที่เดียว เพราะฉะนั้น ข้อมูลก็จะเป็นข้อมูลที่ถูกต้อง แล้วก็ปัจจุบันด้วย แล้วก็อย่างที่ให้เหตุผลเมื่อนกี้นี้นะคะ เก็บข้อมูลที่เดียวเนี่ย มันก็จะลดความผิดพลาดที่เกิดจากการเปลี่ยนแปลงข้อมูลปรับปรุงข้อมูลนะคะ เหมือนที่บอกว่า คือ ถ้าเปลี่ยนเบอร์โทรศัพท์หรือเปลี่ยนบ้านเลขที่นะคะ ก็เปลี่ยนแปลงที่เดียว เราสามารถเรียกใช้ข้อมูลได้ทุกที่พร้อม ๆ กันถ้าต้องการข้อมูลนะคะ ความซ้ำซ้อนกันของข้อมูลนี่ หรือมันอาจจะเกิดความผิดพลาดของการปรับปรุงข้อมูลนะคะ แนวคิดที่สำคัญของการออกแบบฐานข้อมูลนี่ ก็คือการออกแบบข้อมูลที่ซ้ำซ้อนกันน้อยที่สุดนะคะ เพื่อประหยัดเนื้อที่ในการเก็บข้อมูล แล้วก็ลดปัญหาที่จะเกิดขึ้น ถ้าสมมุติว่าข้อมูลมันซ้ำซ้อนกันมากเกินไป หรือปริมาณข้อมูลมันเยอะเกินไปนะคะ อย่างเช่น ตัวอย่างนะคะ ตารางด้านบน ตารางสีเทาข้างบนนะคะ จะเป็นตัวอย่างการออกแบบฐานข้อมูลที่ดี เดี๋ยวจะมาให้ดูว่าทำไมมันถึงดีกว่า ในตารางข้างบนเนี่ย มันจะมีตารางของพนักงาน แล้วก็ต่างสาขานะคะ จะเห็นได้ว่าตารางพนักงานี่ จะมีส่วนหนึ่งที่เป็นข้อมูลของรหัสสาขา ห้อยไว้อยู่ ถามว่าทำไมไม่เอาข้อมูลสาขามาไว้ในตารางพนักงานทีเดียวเลยล่ะ ทำไมต้องแยกออกนะะค อย่างถ้าศึกษาดูคนแรกนะคะ พนักงานคนแรก รหัสสาขา b005 ก็คือสาขาเชียงใหม่ ถ้าสมมติว่าพนักงานคนที่ 1 ลาออก ก็จะมีการลบข้อมูลเกิดขึ้นใช่ไหมคะ มีการลบข้อมูล ลบคนนี้ออก ขีดฆ่าทิ้งฆ่าทิ้ง นี่นะคะ ขีดฆ่าทิ้ง สิ่งไหนที่หายไปบ้าง แน่นอน สาขาเชียงใหม่จะหายไปด้วยนะะค ถ้าสมมติเราอยู่ด้วยกัน แต่ถ้าสมมติพนักงานคนนี้ลาออก สาขาเชียงใหม่ยังอยู่ไหม ยังอยู่นะคะ ซึ่งแตกต่างจากด้านล่าง ด้านล่าง เห็นไหมคะ ว่า ถ้าสมมุติว่าจะลบทิ้งหมดเลย ลบทิ้งนี่ กากบาททิ้ง สาขาเชียงใหม่หายไปด้วย อันนี้คือการออกแบบที่ไม่ดี เหมือนลบคนข้างล่าง คนนี้ออก สาขาพิษณุโลกก็หายไปด้วย แต่ถ้าเป็นตารางด้านบนนะคะ ถ้าคนนี้ลาออก สาขายังอยู่ไหม ยังอยู่เหมือนเดิมนะคะ อันนี้คือการออกแบบฐานข้อมูลที่ดี ถ้าข้อมูลตัวไหนที่มันมีผลกระทบต่อกัน เราจะต้องแยกตารางออกนะะค ตัวอย่างนะคะ ถ้าการออกแบบที่ดีนี่ เราจะลดปัญหาความซ้ำซ้อนกันของข้อมูลออกได้ อย่างเช่น ตัวนี้ อันนี้เป็นตารางที่ออกแบบที่ไม่ดีนะคะ เห็นไหมคะ ว่ามันจะมีรหัสสาขา แล้วก็ที่อยู่ อยู่ในตารางเดียวกัน ถ้าสมมติว่าอาจารย์เพิ่มเข้ามาใหม่อีก 1 คน นะคะ เป็น em 10 ตรงนี้นะคะ ถ้าต้องการเพิ่มพนักงานสาขาเชียงใหม่ อาจารย์ก็ต้องมากรอกข้อมูลตรงนี้อีก เชียงใหม่ โน่นนี่นั่นโน่น แต่ถ้าการออกแบบฐานข้อมูลที่ดีเนี่ย เราแค่ใส่รหัสสาขาไม่จำเป็นจะต้องพิมพ์ที่อยู่ทุกครั้งก็ได้นะคะ เหมือนเวลาคุณไปธนาคารใช่ไหมคะ คุณก็แค่ยื่นบัตรประชาชน พนักงานธนาคารก็จะกรอกเลขบัตรประชาชนคุณลงไปนะคะ หรืออาจจะเอาชิปการ์ดของคุณนี่ เสียบเข้าไปในเครื่อง ถามว่าตอนนี้เราได้กรอกข้อมูลไหม ไม่ต้อง ขอแค่มีเลขบัตรประชาชน ข้อมูลทุกอย่างที่คุณมี เขาจะดึงออกมาจากระบบให้เลย เราไม่ต้องมาเสียเวลากรอกนะคะ เหมือนเมื่อก่อนนี่ ต้องเขียนใส่กระดาษ เลขบัตรประชาชน ด้านรายชื่ออะไรนามสกุลอะไรที่อยู่ที่ไหนเบอร์โทรศัพท์อะไรเดี๋ยวนี้ไม่ต้องเลยขอแค่มีเลขบัตรประชาชนข้อมูลทุกอย่างเราสามารถดึงขึ้นมาได้อยู่แล้ว อันนี้ก็เช่นเดียวกัน ถ้าการออกแบบไม่ดี เราต้องกรอกข้อมูลถูกต้องทุกช่องเลยนี่ มันทำให้ อาจจะคนเดียว ไม่เดือดร้อนค่ะ แต่ถ้าเป็นพนักงานใหม่ เป็นเหมือนโรงงานน่ะค่ะ ที่ละ 1,000 คน ต้องนั่งกรอกเชียงใหม่เป็นพัน ๆ ครั้งน่ี่ เสียเวลามาก ๆ อันนี้คือการออกแบบที่ไม่ดีนะคะ กับอีกอย่างนึง ถ้าสมมติว่าเมื่อกี้อาจารย์เพิ่มพนักงานแล้วถ้ามันอยากเพิ่มแค่สาขาอย่าเพิ่งแค่สาขา ซึ่งในตารางนี้ คีย์หลัก จำได้ไหมคะ คีย์หลักจะเป็นคีย์ที่ขีดเส้นใต้ ซึ่งอาจารย์อยากเพิ่มสาขา สมมติอาจารย์จะเพิ่มบี100สกลนครละครนะคะ ถามว่าเพิ่มได้ไหม อาจจะเป็นการตั้งสาขาแต่ยังไม่มีพนักงานหรอก ถ้าจากตารางนี้นะคะ เราจะเพิ่มเฉพาะชื่อสาขาไม่ได้ เรายังไม่มีรหัสพนักงานเพราะรหัสพนักงานเป็น คีย์หลัก คือ คุณสมบัติมันคือเป็นค่าว่างไม่ได้ อันนี้ก็ทำให้เราเพิ่มสาขาไม่ได้ เพราะเราไม่มีพนักงาน อันนี้ก็เป็นข้อผิดพลาดในการเพิ่มข้อมูล ถ้าเราออกแบบตารางแบบนี้นะคะ นี่ก็คือการ ปัญหาที่เกิดขึ้นจากการออกแบบตารางไม่ดี กับปัญหาหาต่อมา เป็นปัญหาการลบข้อมูลที่อาจารย์บอก ถ้าพนักงานคนนี้ออก สาขาเชียงใหม่หายไปด้วยนะคะ โดนลบไป กรณีความผิดพลาดจากการเปลี่ยนแปลง เหมือน b03 b03 นะคะ เป็นกรุงเทพฯ ใช่ไหมคะ แล้วคราวนี้ข้อมูลมันอยู่ในตารางเดียวกัน ถ้านักศึกษาจะ แก้สมมติว่าเราย้ายจากกรุงเทพฯ ไปอยู่นนทบุรี สมมุติมีพนักงาน 3,000 คน คุณต้องแก้กรุงเทพฯ 3,000 ครั้ง เป็นนนทบุรีนะะค ถ้าพนักงานมีคน 2 คนไม่ใช่ปัญหาค่ะ แต่ถ้าคุณเป็นโรงงานขนาดใหญ่ นั่งแก้ทีละ 3,000 คน ไม่ใช่เรื่องสนุกแน่ ๆ อันนี้มันก็เป็นปัญหานะคะ เพราะฉะนั้นเราควรแยกตารางพนักงานกับตารางสาขาออกจากกันนะคะ มีเป็นเหตุผล อันนี้ คือ ขนาดข้อมูลขนาดเล็กนะคะ แล้วยังเห็นปัญหาขนาดนี้ ถ้าสมมุติว่าองค์กรขนาดใหญ่ เป็นบริษัทเป็นโรงงาน หรือระดับโรงเรียน มีนักเรียนเป็น 2-3 ร้อย 3000 คนก็ได้นะคะ มีปัญหาเยอะมากถ้าสมมุติว่าเราจัดการตารางไม่ดีนะคะ จากปัญหาที่เกิดขึ้นเมื่อกี้นะคะ อย่างที่บอกค่ะ เราจะแก้ปัญหาโดยการแยกตาราง ออกเป็น 2 ตารางแบบนี้นะคะ ฟังก์ชั่นการขึ้นต่อกันนะคะ อันนี้เดี๋ยวจะเป็นเกี่ยวกับตารางหนึ่งมีผลกับอีกตารางหนึ่งนะคะ เราจะเรียกว่าเป็นฟังก์ชันการขึ้นต่อกันเดี๋ยวดูตัวอย่างเลยละกันอย่างเช่นทางนี้นะคะ ดูจากรหัสพนักงานนะ คะ เราจะเห็นได้ว่ารหัสพนักงานจะส่งผลกับชื่อตำแหน่ง สัญลักษณ์ของการขึ้นต่อกันนะคะ อันไหนเป็นตัวหลักจะชี้ไปที่ตัวรองนะคะ ตามหัวลูกศรเลย ดูทิศทางตามหัวลูกศรนะคะ อันไหนเป็นตัวหลัก อันไหนเป็นตัวรองนะคะ อย่างเช่น ตัวนี้ถามว่าตำแหน่งบัญชีที่รหัสพนักงานได้ไหม นะคะ ถามว่าไม่ได้ เพราะการขึ้นต่อการจะต้องเป็นลักษณะหนึ่งต่อหนึ่งเท่านั้นนะคะ เป็นหนึ่งต่อกลุ่มไม่ได้ ชนิดของการขึ้นต่อกันนะคะ จะมีอยู่ 4 ชนิดนะคะ ชนิดแรก เป็นการขึ้นต่อกันโดยสมบูรณ์นะคะ ซึ่งอาจจะเป็นเกี่ยวกับตารางนะคะ จะมีคอลัมน์ 1 คอลัมน์ หรือมากกว่า 1 คอลัมน์ มาประกอบกันนะคะ โดยในคอลัมน์นั้น ๆ นี่ จะบรรจุค่าที่ระบุความพิเศษของแถว ๆ นั้น ได้อย่างชัดเจน Attribute จะเป็นค่าเฉพาะที่บอกเลยว่าคอร์ดข้อมูลแถวนั้นเนี่ยมันมีลักษณะพิเศษเฉพาะตัวยังไงโดยในทุกความสัมพันธ์เนี่ยจะต้องระบุค่าคีย์หลักไว้ด้วย ซึ่งคีย์หลักนี่ คือต้องเป็นค่าเอกลักษณ์คือไม่ซ้ำกันอยู่แล้วนะคะ อย่างเช่น การขึ้นต่อกันอย่างสมบูรณ์ อันแรกนะคะ Attribute ที่ ก็คือคอลัมน์ที่ไม่ใช่คีย์ หลัก คีย์หลัก จำได้ใช่ไหมคะ คีย์หลักจะเป็นคอลัมน์ที่มีขีดเส้นใต้คอลัมน์ที่ไม่ใช่คีย์หลัก จะขึ้นตรงต่อคอลัมน์ที่เป็นคีย์หลักคอลัมน์เดียวเท่านั้น เช่น เลขบัตรประชาชน จะขึ้น จะเป็นเจ้าของชื่อนี้เท่านั้นนะคะ เพราะฉะนั้น การขึ้นต่อกันอย่างสมบูรณ์ จะเป็นลักษณะแบบหนึ่งต่อหนึ่งนะคะ เลขบัตรประชาชน 1 เลข ต้องเป็นของคนคนเดียวเท่านั้น ไม่ใช่ว่าเลขประชาชนที่ใช้ 10 คน เป็นไปไม่ได้นะคะ ตัวอย่างนะคะ ตารางที่มีคอลัมน์หลายตัวนะคะ ขึ้นอยู่กับคีย์หลักตัวเดียว ช่น คนหนึ่งคนนี่ ก็จะมีข้อมูลชื่อนามสกุลวันเดือนปีเกิดวันที่ทำบัตรใช่ไหมคะ แต่ว่าเขาจะต้องขึ้นตรงกับเลขบัตรประชาชนเดียวเท่านั้น ถามว่า 3 คนนี้ อาจจะเกิดวันเดียวกันก็ได้ค่ะ แต่เลขบัตรประชาชนเขาจะไม่เหมือนกัน หรือเขาอาจจะมาทำบัตรวันเดียวกันนะคะ แต่เลขบัตรประชาชนเขาจะไม่ซ้ำกันนะคะ คืออะไรซ้ำกันได้ทุกอย่างค่ะ ยกเว้นหมายเลขบัตรประชาชน แต่บางตารางนะคะ ก็อาจจะเป็นการรวมตัวกันของคีย์หลัก มากกว่า 1 คีย์หลักนะคะ มารวมกัน เช่น นักศึกษาวันนี้เอกสารนี้ลงทะเบียนวิชานี้ได้เกรดอะไร อันนี้ก็เป็นความสัมพันธ์ที่เกิดขึ้นได้เหมือนกันค่ะ ถามว่ารหัสนักศึกษาซ้ำกันได้ไหม ไม่ซ้ำ รหัสวิชาซ้ำกันได้ไหม ไม่ซ้ำนะคะ เหมือนชื่อวิชาการ รหัสหนึ่ง ชื่ออาจารย์คนอื่นก็รหัสวิชาอีกอันนึงนี้จะไม่ซ้ำกันอยู่แล้วนะคะ ต่อมาจะเป็นการขึ้นต่อกันบางส่วนมันก็จะเป็นอาศัยความสัมพันธ์ที่เกิดขึ้นจาก คีย์ผสมนะคะ อาจจะเป็นเส้นตรงจากตารางอื่น หรือส่งตารางมารวมกันอาจจะไม่ใช่คีย์หลักก็ได้ แต่มันมีความหมายกับอีกคอลัมน์หนึ่ง เดี๋ยวจะยกตัวอย่างเลยดีกว่า อย่างเช่น เมื่อตารางที่อาจารย์ให้ดูเมื่อกี้นะคะ ก็จะมีรหัสนักศึกษารหัสวิชามีเกรด แล้วก็มีการบอกด้วยว่ารหัสวิชานี้เป็นชื่อวิชาอะไรนะคะ มันจะเป็นการเกิดขึ้นเมื่อคีย์หลักระกอบกันด้วยคอลัมน์หรือว่า Attribute รวมกันโดยบางส่วนของคีย์หลักสามารถไประบุค่าอย่างอื่นที่ไม่ใช่คีย์หลักได้นะคะ อย่างเช่น ในความสัมพันธ์นี้คีย์หลักจะมี 2 ตัว มีรหัสนักศึกษา กับรหัสวิชานะคะ ถามว่าถ้ามีแต่รหัสนักศึกษา เกรดนะคะ รหัสวิชา แล้วเราจะรู้ไหมว่าชื่อวิชาที่เราเรียนไปนี่ ชื่อวิชาอะไรนะคะ เหมือนบางคนรู้รหัสวิชา แต่จำชื่อวิชาไม่ได้ก็มี เพราะฉะนั้น รหัสวิชานี่ มันเลยสามารถไปส่งผลกับชื่อวิชาได้เหมือนกัน เพราะเป็นตัวระบุว่าไอ้รหัสวิชานี้ ชื่อวิชาอะไร ก็คือคีย์หลักในตารางนี้มี 2 อัน แต่มีคีย์หลัก 1 ตัวเนี่ยไปมีผลกับAttribute 1 ได้นะคะ อันนี้คือความขึ้นต่อกันบางส่วน อย่างเช่น ตัวนี้ก็จะเป็นของจริง ถ้าสมมติว่าอาจารย์ปัดรหัสนักศึกษาออก มีแค่รหัสวิชา มีเกรด มีการวิชาเขียนโปรแกรม แล้วถามรู้ไหมคะ ว่าเกรดเอที่ของใครนะคะ ไม่รู้ หรือว่า เดี๋ยวลบอันนี้ิออกก่อนนะ หรือว่าการลบรหัสวิชาออก เหลือแต่นักศึกษา เหลือเกรด ชื่อวิชา แล้วถามว่ารหัสวิชาอะไรล่ะ ที่เราได้เกรด A เราก็ไม่ทราบอีก เหมือนกันนะคะ อันนี้ก็คือการขึ้นต่อกันบางส่วนนะคะ อันนี้เป็นตัวอย่างนะคะ ต่อมา เป็นการขึ้นต่อกันแบบส่งต่อ ก็จะเป็นความสัมพันธ์ที่เกิดขึ้นก็ต่อเมื่อมี Attribute หรือว่าคนอื่นที่ไม่ใช่ คีย์หลัก แต่ไปสามารถขึ้นสามารถระบุค่าของ Attribute อื่นใน Attribute ได้ ซึ่งเป็นการออกแบบที่ไม่เหมาะสม เพราะส่วนใหญ่แล้ว ในตารางน่ี่ ถ้าเราจะระบุค่าอื่นให้กับคอลัมน์อื่นได้ควรจะต้องเป็นคีย์หลักเท่านั้นนะคะ ดูตัวอย่างนะคะ เช่นตารางนี้ เขาบอกว่าสิ่งที่เกิดขึ้น คือ Attribute คือ คอลัมน์ที่ไม่ใช่คีย์หลักหรือ Primary Key นะคะ ก็คือไม่ใช่คอลัมน์ที่มีเส้นขีดมันไประบุค่าอื่น ๆ ในตารางได้ เช่น คีย์หลักนี้ก็คือเลขประจำตัว ตัวเลขประจำตัวนี่ ไปมีผลกับชื่อนามสกุลที่อยู่ตำแหน่งใช่ไหมคะ แต่คราวนี้รถประจำตำแหน่งมันไม่ถูกระบุโดยเลขประจำตัวมันถูกระบุโดยรหัสตำแหน่ง เหมือนถ้าเป็นผู้จัดการเนี่ย แผนที่ผู้จัดการนะคะ จะรู้เลยว่ารถประจำตำแหน่งคืออะไร แต่เขาไปเช็คที่รหัสตำแหน่ง แทนที่จะเช็กกับเลขประจําตัว อันนี้คือการออกแบบที่ไม่ดี เพราะฉะนั้น ถ้าสมมุติว่าจะให้รถประจำตำแหน่ง วิธีการแก้ปัญหา ก็คือเราควรจะแยกตารางนี้ออกไปสร้างตารางใหม่เลยค่ะ มันไม่ควรจะมาขึ้นกับตารางที่มีคีย์หลัก แต่ไม่สามารถระบุค่าข้อมูลตรงนี้ได้นี่ มันไม่ควรทำ กับต่อมา เป็นการขึ้นต่อการเชิงกลุ่มนะคะ ก็จะเป็นความสัมพันธ์น่าจะเป็นความสัมพันธ์ระหว่างคอลัมน์ Matrixขึ้นต่อกันแบบสมบูรณ์นะคะ ก็ไปสามารถระบุค่าอื่นได้โดยที่อย่างเช่นตัวอย่าง ในตารางนี้นะคะ จะมีรหัสหลักสูตร สามารถระบุรหัสวิชาได้หลายวิชา เช่น จริง ๆ ในรหัสนักศึกษา จะเห็นได้ว่ามีเลข122รหัสนักศึกษา 112 คืออะไร 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 แน่นอนทั้ง 31 เทอมเนี่ยคุณลงทะเบียนประมาณ 6-7 วิชาใช่ไหมคะ ข้อมูลมันก็จะเป็นแบบนี้ ถ้าเราไม่มีการทำ Normaization คราวนี้ขั้นตอนที่ 1เราจะข้อมูลที่ซ้ำซ้อนกันออกวิธีการง่ายมากค่ะ คือแจ้งข้อมูลออกเป็นอย่างละแถวที่ไม่ซ้ำกัน ดูตัวอย่างนะคะ วิธีการทำ 1 n f ง่ายมากค่ะ ถ้าข้อมูลตัวไหนเป็นกลุ่มนี่ค่ะ คนที่ 1 วิชาลงทะเบียนเรียน 3 วิชาใช่ไหมคะ คนที่ 2 ลง 2 วิชา สามารถทำในรูปแบบ 1nf ก็คือเอามันจะจายออกมาค่ะ กระจายข้อมูลพรุ่งนี้ออกมา กระจายออกใช่ไหมคะ กระจายออก ง่ายมากข้อมูลพวกนี้ก็ทำซ้ำลงมาทำซ้ำลงมา ทำซ้ำลงมา ทำซ้ำลงมา ถามว่าอ้าวตาเขาทำไมทำไม 001 มันซ้ำกันได้ล่ะ โน่นนี่นั้่นโน่น แต่รหัสวิชาเขาไม่ซ้ำกันเห็นไหมค่ะ เด็ก ๆ 1 nf เลยง่ายมากค่ะ ข้อมูลทำไมเป็นก้อนอย่างนี้เรากระจายออกมาเป็นแยกออกมาเป็นบรรทัดบรรทัดเลยแค่นั้นเอง อย่างน้อยในข้อสอบต้องทำ 1 nf ให้ได hเพราะมันง่ายที่สุดแล้วนะคะ ไม่ใช่ตัวนี้นะคะ ก็กระจายออกมา แล้วคราวนี้ ถ้าเรากระจายข้อมูลเรียบร้อยแล้วนะคะ ก็จะมาดูว่าในตารางนี้ค่ะ มันมีตารางของพนักงานใช่ไหมคะ เขาจะมีคีย์หลัก 1 ตัวแล้ว แต่ว่ามันจะมีตัวนี้ค่ะ ตัวที่ 1 ตัวที่ 2 ที่มีคุณสมบัติเป็นคีย์หลักได้ เราต้องแยกมันออกนะคะ กระบวนการนะคะ ดูก่อนว่าตารางวิธีนะคะ สิ่งที่ขึ้นตรงกับคีย์หลักตัวนี้นะคะ ก็จะเป็นตัวที่ 1 ตัวที่ 2 ตัวที่ 3 สังเกตเรา ว่าที่มีคีย์หลักตัวเดียว ข้อมูลมีเยอะมากนะคะ ออกมาได้อันแรกเลย รหัสโปรเจกต์นะคะ แล้วก็ชื่อโปรเจกต์นะคะ ใครเป็นผู้จัดการเงินเดือนเท่าไร งบประมาณเท่าไหร่คือมันจะเชื่อมโยงกับข้อมูลที่เป็นคีย์หลักก็คือ Project Code ตัวนี้นะคะ ส่วนตัวนี้เป็นคีย์คู่แข่ง 2 ตัว2 นะคะ 2 ตัวนี่ มันสามารถทำหน้าที่เป็นคีย์หลักให้กับอย่างตัวนี้นะคะ มันจะเป็นคีย์หลักให้กับชื่อของพนักงาน อย่างตัวนี้ว่าจะเป็นคีย์หลักสำหรับชื่อแผนก ถามว่ามันขึ้นตรงกับ project Code ไหมไม่นะคะ เพราะฉะนั้น การทำขั้นตอนต่อมานะคะ 1 nf ขั้นตอนที่ 1 ราจะต้องทำ 1 nf มาเรียบร้อยแล้วซึ่งได้ทักมาแล้วก็ต้องมาบัตรของการขึ้นต่อกันบางส่วนออกก็คือการกำจัด Attribute ไม่ขึ้นคีย์หลักของตารางนั้นเองจะออกนะคะ อย่างเช่นตัวนี้นะคะ การขึ้นต่อกันบางส่วน จะเห็นได้ว่ารหัสวิชากับชื่อวิชามันไม่ขึ้นตรงกับรหัสนักศึกษาใช่ไหมคะ อันนี้จำได้นะ รูปเดิมนะคะ รูปเดิม วิธีกำจัดปัญหา เราก็ดึงสิ่งที่มันเป็นปัญหาสิ่งที่มันไม่ขึ้นตรงกับคีย์หลักตัวนั้น ไปสร้างตารางใหม่ สร้างตารางเพิ่ม เอาสิ่งที่เป็นปัญหาออกมาไปใส่ตารางใหม่ กำหนดคีย์หลักใหม่นะคะ ในตารางเดิมนะคะ เราก็เอาคีย์หลักของตารางใหม่ไปใส่แค่นั้นเองนะคะ วิธีการ ก็คือเหมือนรูปนี้นะคะ สิ่งที่เป็นปัญหาที่จะยกตัวอย่างคือรหัสวิชาชิชาเพราะรหัสวิชามันไม่ได้ขึ้นตรงกับรหัสนักศึกษานะคะ เพราะฉะนั้น ไอ้สองตัวนี้คือสิ่งที่เป็นปัญหาวิธีการแก้ปัญหา คือ เราสร้างตารางผลการเรียนใหม่ สร้างตารางวิชาใหม่นะคะ เห็นไหมคะ ตารางใหม่ เราจะตัดชื่อวิชาออก แต่ต้องเหลือรหัสวิชาไว้ เพื่อให้เชื่อมโยงว่ารหัสวิชานี้มันชื่อวิชาอะไร จากอีกตารางหนึ่งแค่นั้นเองนะคะ โอเคค่ะ อันนี้เป็นตัวอย่างของการสารในรูปแบบบรรทัดฐาน ของ 2nf เดี๋ยววันนี้จะให้ทำการบ้านเดี๋ยวค่อยย้อนกลับมาแล้วกันนะคะ อันนี้ 2 nf เดี๋ยวแก้แล้วตาเมื่อกี้นะคะ ขั้นตอนสุดท้ายนะคะ 3nfนะคะ โดยความสัมพันธ์นะคะ ก่อนที่จะทำเป็น 3nf ได้ จะต้องทำ 2 อย่างนี้มาก่อนหลักของการทำขั้นตอนที่ 3 คือ ต้องเอาความสัมพันธ์ที่ไม่ใช่คีย์หลักออกนะคะ เช่น ไม่ใช่คีย์หลักแต่ไปมีผลกับคอลัมน์อื่นไม่ได้นะคะ ไม่ได้ วิธีการแก้ปัญหาเช่นเดิมค่ะ สร้างตารางใหม่ขึ้นมา แก้ปัญหานั้น ๆ อย่างเช่น ในตัวอย่างนะคะ รหัสพนักงานนะคะ ชื่อสกุล รหัสแผนก ชื่อแผนก เงินเดือน จะเห็นได้ว่าในตารางนี้เนี่ยคีย์หลัก ก็คือรหัสพนักงาน มันมีรหัสแผนกกับชื่อแผนกติดมาด้วย ซึ่งมันไม่ได้เกี่ยวกับรหัสพนักงานเลย วิธีการแก้ปัญหา ก็คือเอารหัสแผนกกับชื่อแผนกไปสร้างตารางใหม่ แต่ต้องยังคงรหัสแผนกไว้ตารางเดิมนะคะ เพื่อให้มันเชื่อมโยงได้ว่าไอ้แผนก a001 นี่ คือแผนกอะไรนะคะ อันนี้คือการแก้ปัญหาไม่ใช่คีย์หลัก แต่ไปส่งผลกับคอลัมน์อื่น ๆ ในตารางนะคะ อันนี้คือ 3nf จริง ๆ แล้วอยากให้ลองทำในห้องมากกว่า แต่ด้วยสัปดาห์นี้มันมีข้อจำกัดนะ ก็ไม่เป็นไร อันนี้เป็นตัวอย่างนะคะ สรุปนะคะ วิธีการทำ Normalization หรือว่าการปรับบรรทัดฐานนะคะ ทุก ๆ ที่ทุก ๆ คอลัมน์ในแต่ละแถวจะต้องมีค่าของข้อมูลเพียงค่าเดียวเท่านั้นเช่นเวลาเรากรอกเบอร์โทรศัพท์เรามีโทรศัพท์ 3 เบอร์ก็จริง แต่เราจะกรอกได้แค่เบอร์เดียวนะคะ ถ้าอยากใส่เบอร์ที่ 2 ที่ 3 ก็ต้องเพิ่มข้อมูลแถวใหม่ขึ้นมานะคะ ต่อมา 2 nF นะคะ ก็ปัญหาคือ ถ้ามีข้อมูลนะคะ ขอข้อมูลทุกตัวในตารางนั้นจะต้องขึ้นกับคีย์หลักของตารางตัวเดียวเท่านั้นนะคะ ข้อที่ 3 ถ้าคอลัมน์ไหนที่ไม่ใช่คีย์หลักนะคะ จะมาส่งผลกับคอลัมน์อื่นในตารางไม่ได้ เพราะฉะนั้น ไปข้อ 1 นี้ คือแค่กระจายตารางอันที่ 2 อันที่ 3 ถ้ามีปัญหาเราต้องสร้างตารางใหม่ การบ้านเอาอย่างนี้ดีกว่า อาจารย์จะให้ทำ น่าจะส่งวันนี้ เอาแค่ข้อเดียวนะคะ ข้อเดียวพอ เพราะว่าจริง ๆ อยากให้ทำในห้องเดี๋ยว สัปดาห์หน้าค่อยทำในห้องนะคะ แต่อันนี้จะให้ลองทำดูก่อนว่าที่เรียนไปวันนี้เข้าใจไหมถ้าทำเสร็จแล้วก็ค่อยเอามาส่งที่ตู้ส่งงานอาจารย์ เอาเฉพาะข้อดีนะ ข้อเดียว ข้อเดียวพอ วันนี้คนเดียวพอนะคะ ส่งในเวลานี้แหละ ให้ลองทำดูว่าเข้าใจไหมข้อนี้ ทำอย่างนี้ ทำอย่างไร ง่ายมาก ๆ เลย อาจารย์เว้นช่องว่างให้แล้ว เติมมา 2 มิติ คุณเห็นไหมว่ามันมีรหัสวิชาวิชานี่ ต้องทำยังไงกับมันแยกมันออกมาซิแยกยังไงเอาข้าวเหนียวก่อนนะคะ แล้วลองส่งมาให้อาจารย์ดูก่อนว่าเข้าใจมากน้อยขนาดไหน จริง ๆ อยากให้เรียนในห้องมากกว่า แต่วันนี้ก็เอาประมาณมานี้ก่อนแล้วกัน ให้ทุกคนหายดี กลับมา อาทิตย์หน้าค่อยเดินดูในห้องดีกว่านะคะ วันนี้ก็ประมาณนี้นะคะ เดี๋ยวเวลาที่เหลือให้ทำข้อนี้แล้วมาส่งวันนี้เลยยิ่งดี เวลาที่เหลือ ทำใส่กระดาษมาส่งอาจารย์แล้วกันนะ ประมาณนี้ค่ะ เวลาที่เหลือทำให้เสร็จภายในวันนี้นะคะ ข้อเดียวเองนะคะ ข้อเดียว มีใครสงสัยไหมคะ ปุ๋ยสงสัยไหม เปิดไม่ได้หรือเปล่า ไม่มีค่ะ อาจารย์เดี๋ยวถ้าอย่างไร เดี๋ยวให้อุบลไปส่งหรืออย่างไรคะ เพราะว่าบนขึ้นไม่ ๆ ส่วนมากอยู่ในการอยู่หอนี่แหละ ตอนนี้เหลืออยู่ DSS ประมาณ 4 คนค่ะ ก็รวบรวมได้เท่าไรไก็เอามา Ok Thank You วันนี้ก็ประมาณนี้ค่ะ ขอบคุณทุกคนมากนะคะ ที่ยังตั้งใจเรียนอยู่ แล้วก็งานอย่าลืมส่งวันนี้นะคะ อยู่ DSS ก็ทำให้เสร็จแล้วก็ฝากเพื่อนมาส่งรวมกันมาส่งก็ได้นะคะ ถ้าใครอยู่หอก็จะมาทำอยู่ DSS ก็ได้ หรือว่าทำเสร็จแล้วมาส่งที่โต๊ะอาจารย์ก็ได้ โอเคค่ะ วันนี้ก็ประมาณนี้ค่ะ ขอบคุณล่ามด้วยนะคะ ค่ะ ขอบคุณค่ะ ปุ๋ย วันนี้ครบนะ โอเค OK