เดี๋ยวเริ่มเลยก็ได้ค่ะ น่าจะประมาณนี้นะคะ วันนี้จะเป็นบทที่ 5 เกี่ยวกับกระบวนการการปรับบรรทัดฐาน ภาษาอังกฤษก็จะเป็น Normalization มันก็จะมีความหมายแล้วก็จุดประสงค์ ของการทำการปรับมาตรฐานนะคะ แล้วก็จะเกี่ยวกับฟังก์ชันการขึ้นต่อการและกระบวนการในการทำ Normalization ด้วยนะคะ มี 3 ข้อวันนี้ โดยการปรับบรรทัดฐานนะคะ หรือว่านอนเมื่อไหร่แฟชั่นเนี่ยมันจะเป็นทฤษฎีที่ คนที่จะต้องออกแบบฐานข้อมูลเขาจะต้องมาแปลงข้อมูลข้อมูลอาจจะเป็นข้อมูลที่ซับซ้อนนะคะ ให้มันง่ายเข้าใจก็ง่าย ใช้งานก็ง่าย แล้วก็ต้องเป็นระบบที่หลังจากออกแบบแล้วนำไปใช้งานจริงนี่ ต้องเกิดปัญหาน้อยที่สุดนะคะ โดยกระบวนการทำงานนะคะ ในการปรับบรรทัดฐานนี่ มันจะมี 3 ระดับ จริง ๆ เราก็จะเรียกสั้น ๆ ว่าระดับแรกเรียกว่า 1NF 2NF 3NF ในระดับปริญญาตรีเนี่ถึง 3ms ได้ก็ถือว่าเก่งมากแล้วนะคะ ถ้าเป็นระดับที่สูงขึ้นไปอีกก็จะถึงได้ถึง 5 nf เลยนะคะ อันนี้เป็นแผนภาพกระบวนการทำงานนะคะ ก่อนที่เราจะมาทำกระบวนการปรับบรรทัดฐานได้นี่ มันก็ต้องวิเคราะห์ความต้องการของผู้ใช้งานก่อน ว่าเขาต้องการระบุการฐานข้อมูลแบบไหน มีความต้องการใช้ตารางกี่ตารางในฐานข้อมูลนะคะ หลังจากนั้น ก็จะวาดรูปเหมือนที่เราที่โรงเรียนอาทิตย์ที่แล้วนะคะ ว่าเป็นแผนภาพเพื่อให้เข้าใจว่าสิ่งที่เรากำลังจะออกแบบหรือสิ่งที่เรากำลังจะทำฐานข้อมูลมันตรงตามความต้องการหรือเปล่านะคะ แต่รูปแบบของรูปที่เราวันอาทิตย์ที่แล้วนี่ มันจะยังเป็นรูปแบบที่ยังไม่เป็นบรรทัดฐานหรือว่ายังไม่มีการจัดระเบียบความคิด ที่ตัดข้อมูลที่ซ้ำซ้อนกันออกไป หรืออาจจะมีคีย์หลักที่มันนะคะ เราก็เลยจะต้องเอาข้อมูลจากที่เราว่าอาทิตย์ที่แล้วเนี่ เข้าสู่กระบวนการปรับพื้นฐานก่อนซึ่งอย่างที่บอกเราทำแค่ถึง 3NF รก็เก่งมากแล้วอย่างน้อย 2-3 นะคะ ชกับสีเนี่ยไม่ทำก็ก็ก็รักไว้ได้นะคะ แต่อย่างน้อยต้องถึง วัตถุประสงค์ของการปรับฐานนะคะ แน่นอนลดความซ้ำซ้อนของข้อมูล ก็คือถ้าข้อมูลมันซ้ำกันนี่ เราก็ต้องตัดออกไป เพราะถ้าเป็นสิมากเท่าไหร่เนื้อหาแล้วก็พื้นที่ในการเก็บข้อมูลอย่างมันก็จะเยอะก็ทำให้สิ้นเปลืองประมาณเหมือนกันรวมถึงลดปัญหาความไม่ถูกต้องของข้อมูลข้อมูลนี่ นอกจากที่จะไม่เกิดความซ้ำกันแล้วเนี่ยวันจันทร์อาจจะเกิดจากสาเหตุคือถ้าเหมือนที่ตัดกระจกทุกอย่างก็คือถ้าเราเก็บข้อมูลหลาย ๆ ที่นักศึกษาเก็บข้อมูลที่คณะด้วยเก็บที่มหาลัยด้วยเก็บที่สาขาด้วยนี่ บางทีถ้าวันหนึ่งคุณอาจจะเปลี่ยนแปลงเบอร์โทรศัพท์ที่บ้าน เราก็ต้องไปตามเปลี่ยนทุกที่เลยนะคะ ซึ่งเสียเวลาแล้วคราวนี้ก็จะเป็นที่เถียงกันว่าสรุปแล้วเบอร์ไหนถูก เบอร์ไหนผิดนะคะ โดยวัตถุประสงค์ของการปรับบรรทัดฐานก็คือข้อมูลจะถูกเก็บอยู่แหล่ดียวนะคะ เก็บไว้ที่เดียวแต่สามารถเรียกใช้และใช้งานได้หลาย ๆ ที่พร้อมกันได้แต่ถ้ามันมีการเปลี่ยนแปลงข้อมูลหรือมีการลบหรือการเพิ่มข้อมูลเพื่อให้ข้อมูลเป็นปัจจุบันที่สุด เราจะเก็บข้อมูลไว้ที่เดียว แก้ไขก็ที่เดียว เพราะฉะนั้น ข้อมูลก็จะเป็นข้อมูลที่ถูกต้อง แล้วก็ปัจจุบันด้วย แล้วก็อย่างที่ใช้ในการเก็บข้อมูลที่เดียวนี่ มันก็จะลดความผิดพลาดที่เกิดจากการเปลี่ยนแปลงข้อมูลปรับปรุงข้อมูลนะคะ เหมือนที่บอกว่าคือถ้าเปลี่ยนเบอร์โทรศัพท์ หรือเปลี่ยนบ้านเลขที่นะคะ ก็เปลี่ยนแปลงที่เดียว เราสามารถเรียกใช้ข้อมูลได้ทุกที่พร้อมกันถ้าต้องการข้อมูลนะคะ ความซ้ำซ้อนกันของข้อมูลมันอาจจะเกิดความผิดพลาดของการปรับปรุงข้อมูลนะคะ แนวคิดที่สำคัญของการออกแบบฐานข้อมูลนี่ ก็คือการออกแบบข้อมูลที่ซ้ำซ้อนกันน้อยที่สุด เพื่อประหยัดเนื้อที่ในการเก็บข้อมูล แล้วก็ลดปัญหาที่จะเกิดขึ้น ถ้าสมมุติว่าข้อมูลมันซ้ำซ้อนกันมากเกินไปหรือปริมาณข้อมูลมันเยอะเกินไปอย่างเช่นตัวอย่างนะคะ ตารางด้านบน ตารางสีเทาข้างบน จะเป็นตัวอย่างการออกแบบฐานข้อมูลที่ดี เดี๋ยวจะมาให้ดูว่าทำไมมันถึงดีกว่า ในตารางข้างบนนี่ มันจะมีตารางของพนักงาน แล้วก็ต่างสาขา จะเห็นได้ว่าตารางพนักงานนี่ จะมีส่วนหนึ่งที่เป็นข้อมูลของรหัสสาขาห้อยไว้อยู่ ถามว่าทำไมไม่เอาข้อมูลสาขามาไว้ในตารางพนักงานทีเดียวเลยล่ะ ทำไมต้องแยกออก ถ้านักศึกษาดูคนแรกนะคะ พนักงานคนแรกรหัสสาขา B005 ก็คือสาขาเชียงใหม่ ถ้าสมมุติว่าพนักงานคนที่ 1 ลาออก ก็จะมีการลบข้อมูลเกิดขึ้นใช่ไหมคะ มีการลบข้อมูล ลบคนนี้ออก ขีดฆ่าทิ้ง ฆ่าทิ้ง สิ่งไหนที่หายไปบ้าง แน่นอนสาขาเชียงใหม่จะหายไปด้วย ถ้าสมมุติเราอยู่ด้วยกัน แต่ถ้าสมมุติพนักงานคนนี้ลาออก สาขาเชียงใหม่ยังอยู่ไหม ยังอยู่นะคะ ซึ่งแตกต่างจากด้านล่าง ด้านล่างเห็นไหม คำว่า ถ้าสมมุติว่าจะลบทิ้งหมดเลย กากบาททิ้ง สาขาเชียงใหม่หายไปด้วย อันนี้เป็นการออกแบบที่ไม่ดี เหมือนลบคนข้างล่าง คนนี้ออก สาขาพิษณุโลกก็หายไปด้วย แต่ถ้าเป็นตารางด้านบน ถ้าคนนี้ลาออก สาขายังอยู่ไหม ยังอยู่เหมือนเดิม อันนี้คือการออกแบบฐานข้อมูลที่ดี ถ้าข้อมูลตัวไหนที่มันมีผลกระทบต่อกันเราจะต้องแยกตารางออก ตัวอย่างนะคะ ถ้าการออกแบบที่ดีนี่ เราจะลดปัญหาความซ้ำซ้อนของข้อมูลออกได้นะคะ เช่นตัวนี้อันนี้เป็นตารางที่ออกแบบที่ไม่ดีนะคะ เห็นไหมคะ ว่ามันจะมีรหัสสาขา แล้วก็ที่อยู่อยู่ในตารางเดียวกัน ถ้าสมมุติว่าอาจารย์เพิ่มเข้ามาใหม่อีก 1 คนนะคะ เป็น EM10 ตรงนี้นะะค ถ้าต้องการเพิ่มพนักงานสาขาเชียงใหม่ก็ต้องมากรอกข้อมูลตรงนี้อีก เชียงใหม่นะ แต่ถ้าการออกแบบฐานข้อมูลที่ดีนี่ เราแค่ใส่รหัสสาขา ไม่จำเป็นจะต้องพิมพ์ที่อยู่ทุกครั้งก็ได้ เหมือนเวลาคุณไปธนาคารใช่ไหมคะ คุณก็แค่ยื่นบัตรประชาชน พนักงานธนาคารก็จะกรอกเลขบัตรประชาชนคุณลงไปนะคะ หรืออาจจะเอาชิปการ์ดของคุณนี่ เสียบเข้าไปในเครื่อง ถามว่าตอนนี้เราได้กรอกข้อมูลไหม ไม่ต้อง ขอแค่มีเลขบัตรประชาชนข้อมูลทุกอย่างที่คุณมี เขาจะดึงออกมาจากระบบให้เลยเราไม่ต้องมาเสียเวลาก่อน เหมือนเมื่อก่อนนี่ ต้องเขียนใส่กระดาษและเลขบัตรประชาชนด้านรายชื่ออะไร นามสกุลอะไร ที่อยู่ที่ไหนเบอร์โทรศัพท์อะไรเดี๋ยวนี้ไม่ต้องเลยขอแค่มีเลขบัตรประชาชนข้อมูลทุกอย่างเราสามารถดึงขึ้นมาได้อยู่แล้วอันนี้ก็เช่นเดียวกันถ้าการออกแบบไม่ดีนี่ เราต้องกรอกข้อมูลถูกต้องทุกช่องเลยนี่ มันทำให้อาจจะคนเดียวไม่เดือดร้อนค่ะ ถ้าเป็นพนักงานใหม่เป็นเหมือนโรงงานน่ะค่ะ ที่พนักงพันคนนั่งกรอกเชียงใหม่เป็นพันครั้งนี่ เเวลามาก ๆ อันนี้คือการออกแบบที่ไม่ดีนะคะ กลับอีกอย่างหนึ่งถ้าสมมุติว่าเมื่อกี้อาจารย์เพิ่มพนักงานแล้ว ถ้ามันอยากเพิ่มแค่สาขานะคะ อยากเพิ่มแค่สาขา ซึ่งในตารางนี้ คีย์หลัก จำได้ไหมคะ ที่รักจะเป็นคีย์ที่ขีดเส้นใต้ซึ่งอาจารย์อยากเพิ่มสาขาสมุทรปราการจะเพิ่มบี100กลนครละครนะคะ ถามว่าเพิ่มได้ไหม อาจจะเป็นการตั้งสาขาแต่ยังไม่มีพนักงานหรอกถ้าจากตารางนี้ เราจะเพิ่มเฉพาะชื่อสาขาไม่ได้ เนื่องจากเรายังไม่มีรหัสพนักงาน เพราะรหัสพนักงานเป็นคีย์หลัก คีย์หลัก คือคุณสมบัติมันคือเป็นค่าว่างไม่ได้ ก็ทำให้เราเพิ่มสาขาไม่ได้ เพราะเราไม่มีพนักงาน อันนี้ก็เป็นข้อผิดพลาดในการเพิ่มข้อมูล ถ้าเราออกแบบตารางแบบนี้นะคะ นี่ก็คือกันปัญหาที่เกิดขึ้นจากการออกแบบตารางไม่ดี กับปัญหาต่อมา เป็นปัญหาการลบข้อมูลที่อาจารย์บอกถ้าพนักงานคนนี้ออก สาขาเชียงใหม่หายไปด้วย ลบไป กรณีความผิดพลาดจากการเปลี่ยนแปลง เหมือน B003 นะคะ เป็นกรุงเทพฯ ใช่ไหมคะ แล้วคราวนี้ข้อมูลมันอยู่ในตารางเดียวกัน ถ้านักศึกษาจะแก้สมมุติว่าเราย้ายจากกรุงเทพฯ ไปอยู่นนทบุรี สมมุติมีพนักงาน 3ฅ000 คนคุณต้องแก้กรุงเทพฯ 30 ครั้ง นนทบุรีพนักงานมีคนส่งคนไม่ใช่ปัญหาค่ะ แต่ถ้าคุณเป็นโรงงานขนาดใหญ่นั่งแก้ทีละ 3,000 คน ไม่ใช่เรื่องสนุกแน่ ๆ นี่ก็เป็นปัญหานะคะ เพราะฉะนั้น เราควรแยกตารางพนักงานกับตารางสาขาออกจากกันนะคะ มีเป็นเหตุผล นี่คือขนาดข้อมูลขนาดเล็กนะคะ แล้วยังเห็นปัญหาขนาดนี้ ถ้าสมมุติว่าองค์กรขนาดใหญ่ เป็นบริษัทเป็นโรงงานระดับโรงเรียน มีนักเรียนเป็น 2 302 3000 คนก็ได้นะคะ ีปัญหาเยอะมากถ้าสมมุติว่าเราจัดการตารางไม่ดี จากปัญหาที่เกิดขึ้นเมื่อกี้นะคะ อย่างที่บอกค่ะ เราจะแก้ปัญหาโดยการแยกตารางเป็น 2 ตารางแบบนี้นะคะ ฟังก์ชันการขึ้นต่อกันนะคะ อันนี้เดี๋ยวเป็นเกี่ยวกับตารางหนึ่งนะคะ มีผลดีต่อราง 1 เราจะเรียกว่าเป็นฟังก์ชันการขึ้นต่อกัน เดี๋ยวดูตัวอย่างเลยละกันนะคะ อย่างเช่นตารางนี้นะคะ ดูจากรหัสพนักงานนะคะ เราจะเห็นได้ว่ารหัสพนักงานจะส่งผลกับชื่อตำแหน่งสัญลักษณ์ของการขึ้นต่อกันนะคะ อันไหนเป็นตัวหลัก จะชี้ไปที่ตัวรองนะคะ ตามหัวลูกศรเลย ดูทิศทางตามหัวลูกศรนะคะ อันไหนเป็นตัวหลัก อันไหนเป็นตัวรองนะคะ อย่างเช่น ตัวนี้ถามว่าตำแหน่งมาชี้ที่รหัสพนักงานได้ไหมนะคะ ถามว่าไม่ได้ เพราะการขึ้นต่อการจะต้องเป็นลักษณะ 1 ต่อ 1 เท่านั้น เป็น 1 ต่อกลุ่มไม่ได้ ชนิดของการขึ้นต่อกันนะคะ จะมีอยู่ 4 ชนิดนะคะ ชนิดแรกเป็นการขึ้นต่อกันโดยสมบูรณ์นะคะ ซึ่งอาจจะเป็นเกี่ยวกับตารางนะคะ จะมีคอลัมน์ 1 คอลัมน์ หรือมากกว่า 1 คอลัมน์มาประกอบกันนะคะ โดยในคอลัมน์นั้นนี่ ่าที่ระบุค่าพิเศษของแถว ๆ ได้อย่างชัดเจน aprilia จะเป็นค่าเฉพาะที่บอกเลยว่าคอร์ดข้อมูลแถวนั้นนี่มันมีลักษณะพิเศษเฉพาะตัวยังไงดยในทุกความสัมพันธ์นี่ จะต้องระบุค่าคีย์หลักไว้ด้วย ค้คือต้องเป็นค่าเอกลักษณ์คือไม่ซ้ำกันอยู่แล้วนะคะ ่างเช่นการขึ้นต่อกันอย่างสมบูรณ์อันแรกนะคะ ก็คือคอลัมน์ที่ไม่ใช่คีย์หลัก คีย์หลัก จำได้ใช่ไหมคะ คีย์หลักจะเป็นคอลัมน์ที่มีขีดเส้นใต้ คอลัมน์ที่ไม่ใช่คีย์หลัก จะขึ้นตรงต่อคอลัมน์ที่เป็นคีย์หลัก คอลัมน์เดียวเท่านั้นเช่นเลขบัตรประชาชนจะขึ้นจะเป็นเจ้าของชื่อนี้เท่านั้นนะคะ เพราะฉะนั้น การขึ้นตัวกันอย่างสมบูรณ์จะเป็นลักษณะแบบ 1 ต่อ 1 นะคะ เลขบัตรประชาชน 1 เลข ต้องเป็นของคนคนเดียวเท่านั้น ไม่ใช่ว่าเลขประชาชนที่ใช้ 10 คน เป็นไปไม่ได้นะคะ ตัวอย่างนะคะ ตารางที่มี Column หลายตัวนะคะ ขึ้นอยู่กับคีย์หลักตัวเดียว เช่น คนหนึ่งคนนี่ ก็จะมีข้อมูลชื่อ นามสกุล วัน เดือน ปีเกิด วันที่ทำบัตรใช่ไหมคะ แต่ว่าเขาจะต้องขึ้นตรงกับเลขบัตรประชาชนเดียวเท่านั้น ถามว่า 3คนนี้อาจจะเกิดวันเดียวกันก็ได้ค่ะ เลขบัตรประชาชนเขาจะไม่เหมือนกัน หรือเขาอาจจะมาทำบัตรวันเดียวกัน หมายเลขบัตรประชาชนเขาจะไม่ซ้ำกัน คืออะไร ซ้ำกันได้ทุกอย่างค่ะ ยกเว้นหมายเลขบัตรประชาชนแต่บางตารางนะคะ ก็อาจจะเป็นการรวมตัวกันของ คีย์หลัก มากกว่า 1 คีย์หลักนะคะ มารวมกัน เช่น นักศึกษาคนนีี้ลงทะเบียนวิชานี้ได้เกรดอะไรอันนี้ก็เป็นความสัมพันธ์ที่เกิดขึ้นได้เหมือนกันค่ะ ว่าบัตรนักศึกษาซ้ำกันได้ไหม รหัสวิชาซ้ำกันได้ไหม เหมือนชื่อวิชาอาจารย์รหัสหนึ่งเชื่อใจคนอื่นก็รหัสวิชาอีกอันนึงนี้จะไม่ซ้ำกันอยู่แล้วนะคะ ต่อมาจะเป็นการขึ้นต่อกันบางส่วนมันก็จะเป็นอาศัยความสัมพันธ์ที่เกิดขึ้นจาก คีย์ผสมนะคะ อาจจะเป็นเส้นตรงจากตารางอื่นหรือส่งตารางมารวมกัน อาจจะไม่ใช่คีย์หลักก็ได้ แต่มันมีความหมายกับคอลัมน์หนึ่ง เดี๋ยวจะยกตัวอย่างเลยดีกว่า อย่างเช่น ว่าตารางเทียบไซซ์ให้ดูเมื่อกี้นะคะ ก็จะมีรหัสนักศึกษารหัสวิชามีเกรดแล้วก็มีการบอกด้วยว่ารหัสวิชานี้เป็นชื่อวิชาอะไรนะคะ มันจะเป็นการเกิดขึ้นเมื่อคีย์หลักประกอบกันด้วยคอลัมน์หรือว่า Attribute รวมกันโดยบางส่วนของคีย์หลักสามารถไประบุค่าอย่างอื่น ที่ไม่ใช่คีย์หลักได้นะคะ อย่างเช่นในความสัมพันธ์นี้ คีย์หลักจะมี 2 ตัวนะคะ มีรหัสนักศึกษา กับรหัสวิชานะคะ ถามว่าถ้ามีแต่รหัสนักศึกษา เกรดนะคะ รหัสวิชาแล้วเราจะรู้ไหมว่าชื่อวิชาที่เราเรียนไปนี่ วิชาอะไรนะคะ เหมือนบางคนรู้รหัสวิชาแต่จำชื่อวิชาไม่ได้ก็มี เพราะฉะนั้น รหัสวิชานี่ มันเลยสามารถไปส่งผลกับชื่อวิชาได้เหมือนกัน เพราะเป็นตัวระบุว่าไปหลายวิชานี่ ชื่อวิชาอะไรฃ ก็คือคีย์หลักในตารางนี้มี 2 อัน แต่มีคีย์หลัก 1 ตัวนี่ ไปมีผลกับAttribute 1 ได้นะคะ อันนี้คือความขึ้นต่อกันบางส่วนอย่างเช่นตัวนี้ก็จะเป็นของจริง ถ้าสมมาอาจารย์ปัดรหัสนักศึกษาออกมีแค่ 5 วิชา มีเกรดมีการวิชาเขียนโปรแกรม แล้วถามรู้ไหมคะ ว่าเกรด A ที่ของใครนะคะ หรือว่าอย่าลบไปก่อนนะหรือว่าการลบรหัสวิชาออก เหลือแต่นักศึกษา เหลือเกรด ชื่อวิชาแล้วถามว่ารหัสวิชาอะไรล่ะ ที่เราได้เกรด A เราก็ไม่ทราบอีกเหมือนกันนะคะ อันนี้ก็คือการขึ้นต่อกันบางส่วนนะคะ ต่อมาเป็นการขึ้นต่อกันแบบส่งต่อ ก็จะเป็นความสัมพันธ์ที่เกิดขึ้น ก็ต่อเมื่อมี Attribute หรือว่าคนอื่นที่ไม่ใช่คคีย์หลักแต่ไปสามารถขึ้นสามารถระบุค่าของ Attribute อื่นใน Record ได้ ซึ่งเป็นการออกแบบที่ไม่เหมาะสม เพราะส่วนใหญ่แล้วในตารางนี่ ถ้าเราจะระบุค่าอื่นให้กับคอลัมน์อื่นได้ควรจะต้องเป็นคีย์หลักเท่านั้นนะคะ ดูตัวอย่างนะคะ เช่นตารางนี้ เขาบอกว่าสิ่งที่เกิดขึ้นคือ Attribute คือคอลัมน์ที่ไม่ใช่คีย์หลักหรือ Primary Key นะคะ ก็คือไม่ใช่คอลัมน์ที่มีเส้นขีดมันไประบุค่าอื่น ๆ ในตารางได้เช่นตารางนี้ก็คือเลขประจำตัวนะคะ โดยตัวเลขประจำตัวนี่ จะไปมีผลกับชื่อ นามสกุล ที่อยู่ ตำแหน่งใช่ไหมคะ เขานี่ รถประจำตำแหน่งมันไม่ถูกระบุโดยเลขประจำตัว มันถูกระบุโดยรหัสตำแหน่ง เหมือนถ้าเป็นผู้จัดการนี่ แทนที่ผู้จัดการนะคะ จะรู้เลยว่ารถประจำตำแหน่งคืออะไร แต่เขาไปเช็กที่รหัสตำแหน่ง แผนที่จะเช็กกับเลขประจําตัวการออกแบบที่ไม่ดี เพราะฉะนั้น ถ้าสมมุติว่าจะให้รถประจำตำแหน่งวิธีการแก้ปัญหาก็คือเราควรจะแยกตารางนี้ออกไปสร้างตารางใหม่เลยค่ะ มันไม่ควรจะมาขึ้นกับตารางที่มีกี่หลัก แต่ไม่สามารถระบุค่าข้อมูลตรงนี้ได้นี่ มันไม่ควรทำนะคะ กับต่อมาเป็นการขึ้นต่อการเชิงกลุ่มนะคะ น่าจะเป็นความสัมพันธ์ระหว่างคอลัมน์ Attribute การขึ้นต่อกันแบบสมบูรณ์นะคะ ก็ไปสามารถระบุค่าอื่นได้ โดยที่อย่างเช่นตัวอย่าง ในตารางนี้นะคะ จะมีรหัสหลักสูตรสามารถระบุรหัสวิชาได้หลายวิชา เช่น จริง ๆ ในสถานศึกษาจะเห็นได้ว่ามีเลข 122 รหัสนักศึกษา B122 คืออะไร 122 ก็คือหลักสูตรที่เราเรียนอยู่ ซึ่งในหลักสูตรที่โรงเรียนนี่ มันมีวิชามากกว่า 20 วิชานะคะ นั่นก็คือรหัสหลักสูตรนี่ มันสามารถระบุรหัสวิชาได้หลากหลายรหัสวิชามาก ๆ นะคะ อันนี้ก็คือการขึ้นต่อกัน แบบมีค่ามากกว่า 1 รหัสหลักสูตรสามารถระบุรหัสวิชาได้หลายค่านั่นเองนะคะ แล้วรหัสหลักสูตรก็สามารถระบุค่ารหัสนักศึกษาได้หลายคนเช่นกัน เหมือนตอนนี้ หลักสูตรที่เราเรียนนี่ มีนักศึกษาเกือบ 100 คน รหัสหลักสูตรเดียวนะคะ นี่คือความสัมพันธ์แบบสามารถระบุค่าได้มากกว่า 1 นั่นเอง แบบไหนค่า เพราะฉะนั้น วิธีการแก้ปัญหาของสิ่งที่เกิดขึ้นนะคะ เราเลยจะต้องมีการกระบวนการปรับบรรทัดฐาน หรือว่ากระบวนการปรับปรุงโครงสร้างของฐานข้อมูลนะคะ ที่มีความซ้ำซ้อนกัน ให้อยู่ในรูปแบบที่เป็นบรรทัดฐาน ก็คือเป็นรูปแบบที่พร้อมที่จะเอาไปพัฒนาเป็นฐานข้อมูลได้นะคะ โดยหลักการนะคะ แบบที่บอกมี 5 ระดับ แต่ระดับที่ 3 นี่ ก็ถือว่าเพียงพอสำหรับการออกแบบฐานข้อมูลแล้วในปัจจุบันแล้วโดยคีย์หลักของการทำงานนะคะ ท่านที่ 1 นะคะ กำจัดกลุ่มของข้อมูลที่มีความซ้ำซ้อนกันออกไปอแรกง่ายมาก ๆ ง่ายที่สุดก็คือ 1NF นะคะ ต่อมาครั้งที่ 2 อยู่ 2NF จะกำจัดการขึ้นต่อกันบางส่วนออกอันสุดท้าย 3NF นะคะ กำจัดการขึ้นต่อกันของแอตทริบิวต์ที่ไม่ใช่คีย์หลักเดี๋ยวจะมาดูทีละขั้นมันจะต้องเป็นอยบ้างคนแรกง่ายที่สุดง่ายมาก ๆ นะคะ ให้นักศึกษาจำกระบวนการหลัก ๆ จะมี 3 ข้อนะคะ ขั้นตอนการแรกเลยดูก่อนว่าคำซ้อนกันไหม ขั้นที่ 2 คือมันขึ้นต่อกันแค่บางส่วนหรือเปล่า ขั้นที่ 3 อันไหนไม่ใช่คีย์หลัก แต่มันไปส่งผลกระทบกับข้อมูลอื่นได้หรือเปล่า ดูอันดับที่ 1 ก่อน ขั้นที่ 1 ได้มากนะคะ ทุก ๆ คอลัมน์ Records จะต้องเป็นค่า Single Value คือมีค่าเดียวเท่านั้น จะใส่แบบนี้ไม่ได้ เพราะฉะนั้น ข้อมูลทุกแถวจะต้องไม่มีค่าที่ซ้ำกันอย่างนี้ นักศึกษาคนที่ 1 แน่นอนทั้ง 1 เทอมนี่ คุณลงทะเบียนประมาณ 6-7 วิชาใช่ไหมคะ ข้อมูลมันก็จะเป็นแบบนี้ถ้าเราไม่มีการทำ คราวนี้ขั้นตอนที่ 1เราจะข้อมูลที่ซ้ำซ้อนกันออกวิธีการง่ายมากค่ะ คือแจ้งข้อมูลออกเป็นอย่างละแถวที่ไม่ซ้ำกัน ดูตัวอย่างนะคะ วิธีการทำ 1nf ง่ายมากค่ะ ถ้าข้อมูลตัวไหนเป็นกลุ่มนะคะ คนที่ 1 วิชา ลงทะเบียนเรียน 3 วิชาใช่ไหมคะ คนที่ 2 มี 2 วิชา สามารถทำในรูปแบบ 1NF ก็คือเอามันกระจายออกมาค่ะ ย้ายข้อมูลพรุ่งนี้ออกมากระจายออกใช่ไหมคะ กระจายออกง่ายมาก ข้อมูลพวนี้ก็ทำซ้ำลงมาทำซ้ำลงมามาทำซ้ำลงมาถามว่า เขาทำไม ทำไม 001 มันซ้ำกันได้ล่ะ แต่รหัสวิชาเขาไม่ซ้ำกันเห็นไหมค่ะ เด็ก ๆ เลยง่ายมากค่ะ ข้อมูลทำไมเป็นก้อนอย่างนี้เรากระจายออกมาเป็นแยกออกมาเป็นบรรทัด บรรทัดเลย แค่นั้นเองอย่างน้อยในข้อสอบต้องทำ 1NF ให้ได้ มันง่ายที่สุดแล้วนะคะ ไม่ใช่ตัวนี้นะคะ ก็กระจายออกมา แล้วคราวนี้ถ้าเรากระจายข้อมูลเรียบร้อยแล้วนะคะ ก็จะมาดูว่าในตารางนี้ค่ะ มันมีตารางของพนักงานใช่ไหมคะ เขาจะมีคีย์หลัก 1 ตัวละ แต่ว่ามันจะมีตัวนี้ค่ะ ตัวที่ 1 ตัวที่ 2 ที่มีคุณสมบัติเป็นคีย์หลักได้ เราต้องแยกมันออกนะคะ กระบวนการนะคะ ดูก่อนว่าตารางวิธีนะคะ สิ่งที่ขึ้นตรงกับคีย์หลักตัวนี้นะคะ ก็จะเป็นตัวที่ 1 ตัวที่ 2 ตัวที่ 3 สังเกตเราว่าคีย์หลักมีตัวเดียว ข้อมูลมีเยอะมากนะคะ ออกมาได้อันแรกเลย รหัสโปรเจกต์นะคะ แล้วก็ชื่อโปรเจคนะคะ ใครเป็นผู้จัดการเงินเดือนเท่าไหร่ งบประมาณเท่าไร คือมันจะเชื่อมโยงกับข้อมูลที่เป็นคีย์หลักก็คือ Project Code วันนี้ ส่วนตัวนี้เป็นคีย์คู่แข่ง 2 ตัว 2 ตัวฉันสามารถทำหน้าที่เป็นคีย์หลักให้กับอย่างตัวนี้นะคะ มันจะเป็นคีย์หลักให้กับชื่อของพนักงาน อย่างตัวนี้ว่าจะเป็นคีย์หลักสำหรับชื่อแผนกนะคะ ถามว่ามันขึ้นตรงกับ ProjectCode ไหม ไม่นะคะ เพราะฉะนั้น การทำขั้นตอนต่อมานะคะ 2NF ขั้นตอนที่ 1เราจะต้องทำ 1NF มาเรียบร้อย แล้วซึ่งได้ทักมาแล้วก็ต้องมาตัดของการขึ้นต่อกันบางส่วนออก ก็คือการกำจัดบิวตี้ไม่ขึ้นคีย์หลักของตารางนั้น ๆ นั่นเอง จะออกนะคะ อย่างเช่นตัวนี้นะคะ การขึ้นต่อกันบางส่วน จะเห็นได้ว่ารหัสวิชา กับชื่อวิชา มันไม่ขึ้นตรงกับรหัสนักศึกษาใช่ไหมคะ อันนี้จำได้นะ รูปเดิม หารูปเดิม วิธีกำจัดปัญหา เราก็ดึงสิ่งที่มันเป็นปัญหาสิ่งที่มันไม่ขึ้นตรงกับคีย์หลักตัวนั้น ไปสร้างตารางใหม่ สร้างตารางเพิ่ม เอาสิ่งที่เป็นปัญหาออกมา ไปใส่ตารางใหม่ กำหนดคีย์หลักใหม่นะคะ ในตารางเดิมนะคะ เราก็เอาคีย์หลักของตารางใหม่ไปใส่แค่นั้นเองนะคะ วิธีการก็คือ เหมือนรูปนี้นะคะ สิ่งที่เป็นปัญหาที่จะยกตัวอย่าง คือรหัสวิชา ชื่อวิชา เพราะรหัสวิชามันไม่ได้ขึ้นตรงกับรหัสนักศึกษา เพราะฉะนั้น ไอ้สองตัวนี้คือสิ่งที่เป็นปัญหา วิธีการแก้ปัญหา คือเราสร้างตารางผลการเรียนใหม่ สร้างตารางวิชาใหม่ เห็นไหมคะ ตารางใหม่ เราจะตัดชื่อวิชาออกแต่ ต้องเหลือรหัสวิชาไว้เพื่อให้เชื่อมโยงว่ารหัสวิชานี้มันชื่อวิชาอะไร จากอีกตาราง 1 แค่นั้นเองนะคะ โอเคค่ะ อันนี้เป็นตัวอย่างของการปรับบรรทัดฐานในรูปแบบของ 2 NF เดี๋ยววันนี้จะให้ทำการบ้านเดี๋ยวค่อยย้อนกลับมาแล้วกันนะคะ สอนภาษาเดี๋ยวแก้แล้ว ต่อมาเมื่อกี้นะคะ ขั้นตอนสุดท้ายนะคะ 3NF นะคะ โดยความสัมพันธ์นะคะ ก่อนที่จะทำเป็นสามเณรได้จะต้องทำ 2NF มาก่อนหลักของการทำขั้นตอนที่ 3 คือต้องเอาความสัมพันธ์ที่ไม่ใช่คีย์หลักออกนะคะ เช่นไม่ใช่คีย์หลักแต่ไปมีผลกับคอลัมน์อื่น ไม่ได้นะคะ ไม่ได้ วิธีการแก้ปัญหาเช่นเดิมค่ะ สร้างตารางใหม่ขึ้นมา แก้ปัญหานั้น ๆ อย่างเช่นในตัวอย่างนะคะ รหัสพนักงานนะคะ ชื่อ สกุล รหัสแผนก ชื่อแผนก เงินเดือน จะเห็นได้ว่าในตารางนี้นี่ คีย์หลัก ก็คือรหัสพนักงาน แต่มันมีรหัสแผนกกับชื่อแผนกติดมาด้วย ซึ่งมันไม่ได้เกี่ยวกับรหัสพนักงานเลย วิธีการแก้ปัญหาก็คือเอารหัสแผนกชื่อแผนกไปสร้างตารางใหม่ แต่ต้องยังคงรหัสแผนกไว้ ในตารางเดิมนะคะ เพื่อให้มันเชื่อมโยงได้ว่าไอ้แผนก A001 นี่ คือแผนกอะไรนะคะ อันนี้คือการแก้ปัญหาไม่ใช่คีย์หลัก แต่ไปส่งผลกับคอลัมน์อื่น ๆ ในตารางนะคะ อันนี้คือ 3NF จริง ๆ แล้วอยากให้ลองทำในห้องมากกว่า แต่ด้วยสัปดาห์นี้มันมีข้อจำกัดนะ ก็ไม่เป็นไร นี้เป็นตัวอย่างนะคะ สรุปนะคะ วิธีการทำ Normalization หรือว่าการปรับบรรทัดฐานนะคะ ทุก ๆ ที่ทุก ๆ คอลัมน์ ในแต่ละแถวจะต้องมีค่าของข้อมูลเพียงค่าเดียวเท่านั้น เช่น เวลาเรากรอกเบอร์โทรศัพท์ เรามีโทรศัพท์ 3 เบอร์ก็จริง แต่เราจะกรอกได้แค่เบอร์เดียว ถ้าอยากใส่เบอร์ที่ 2 ที่ 3 ก็ต้องเพิ่มข้อมูลแถวใหม่ขึ้นมา ต่อมา 2NF นะคะ ก็ปัญหาก็คือถ้ามีข้อมูลนะคะ ขอข้อมูลทุกตัวในตารางนั้นจะต้องขึ้นกับคีย์หลักของตารางตัวเดียวเท่านั้นนะคะ ข้อที่ 3 ถ้าคอลัมน์ไหนที่ไม่ใช่คีย์หลักนะคะ จะมาส่งผลกับคอลัมน์อื่นในตารางไม่ได้นะคะ เพราะฉะนั้น ไปข้อ 1 นี้คือแค่กระต่ายตารางอันที่ 2 อันที่ 3 ถ้ามีปัญหา เราต้องสร้างตารางใหม่ การบ้านเอาอย่างนี้ดีกว่าอาจารย์จะให้ทำน่าจะส่งวันนี้เอาแค่ข้อเดียวนะคะ ข้อเดียวพอ เพราะว่าจริง ๆ อยากให้ทำในห้อง เดี๋ยวสัปดาห์หน้าค่อยทำในห้อง จะให้ลองทำดูก่อนว่าที่เรียนไปวันนี้เข้าใจไหม ถ้าทำเสร็จแล้วก็ค่อยเอามาส่งตู้ส่งงานอาจารย์ เอาเฉพาะข้อนี้นะ ข้อเดียว ข้อเดียวพอ วันนี้คนเดียวพอนะคะ ส่งในเวลานี้แหละให้ลองทำดูว่าเข้าใจไหมข้อนี้ทำอย่างนี้ ทำอย่างไรได้มาก ๆ เลยการเว้นช่องว่างให้แล้วเติมมา2NF คุณเห็นไหมว่ามันมีรหัสวิชานี่ ชื่อวิชาเนี่ต้องทำยังไงกับมันแยกมันออกมาซิแยกอย่างไร เอาข้าวเหนียวก่อนนะคะ แล้วลองส่งมาให้อาจารย์ดูก่อนว่าเข้าใจมากน้อยขนาดไหนจริง ๆ อยากให้เรียนในห้องมากกว่าแต่วันนี้ก็เอามานี้ก่อนแล้วกันให้ทุกคนหายดีกลับมา อาทิตย์หน้าค่อยเดินดูในห้องดีกว่า วันนี้ก็ประมาณนี้นะคะ เดี๋ยวเวลาที่เหลือให้ทำข้อนี้แล้วมาส่ง วันนี้เลยยิ่งดีนะคะ เวลาที่เหลือทำใส่กระดาษมาส่งอาจารย์แล้วกันนะ ก็ประมาณนี้ค่ะ เวลาที่เหลือทำให้เสร็จภายในวันนี้นะคะ ข้อเดียวเองนะคะ ข้อเดียว ใครสงสัยไหมคะ ปุ๋ยสงสัยไหม ปุ๋ยเปิดไมค์ได้หรือเปล่า //ไม่มีค่ะ อาจารย์เดี๋ยวถ้เดี๋ยวให้อุบลไปส่งหรือยังไงคะเพราะว่าบนขึ้นไม่ ๆ ส่วนมากอยู่ในการอยู่หอนี่ล่ะตอนนี้เหลืออยู่ประมาณ ใส่ได้ ก็เอามา //Ok Thank You วันนี้ก็ประมาณนี้ค่ะ ขอบคุณทุกคนมากนะคะ ที่ยังตั้งใจเรียนอยู่แล้วก็งานอย่าลืมส่งวันนี้นะคะ อยู่ DSS ก็ทำให้เสร็จแล้วก็ฝากเพื่อนมาส่งรวมกันมาส่งก็ได้นะคะ ถ้าใครอยู่หอก็จะมาทำอยู่DSS ก็ได้หรือว่าทำเสร็จแล้วมาส่งที่อาการก็ได้โอเคค่ะ วันนี้ก็ประมาณนี้ค่ะ ขอบคุณล่ามด้วยนะคะ ค่ะ ขอบคุณค่ะ วันนี้ครบนะ OK