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