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