(อาจารย์เกวลี) เดี๋ยวเริ่มเลยก็ได้ค่ะ โอเค น่าจะประมาณนี้นะคะ วันนี้จะเป็นบทที่ 5 เกี่ยวกับกระบวนการปรับบรรทัดฐานนะคะ ภาษาอังกฤษก็จะเป็น Normalization เนื้อหาวันนี้ก็จะมีความหมายแล้วก็จุดประสงค์ของการทำ Normalization หรือว่าการทำบรรทัดฐานนะคะ แล้วก็จะเกี่ยวกับฟังก์ชันการขึ้นต่อกัน แล้วก็กระบวนการในการทำ Normalization ด้วยนะคะ มี 3 ข้อวันนี้ โดยการปรับบรรทัดฐานนะคะ หรือว่า Normalization นี่ มันจะเป็นทฤษฎีที่คนที่จะต้องออกแบบฐานข้อมูลนี่ เขาจะต้องมาแปลงข้อมูล จากข้อมูลนี่อาจจะเป็นรูปข้อมูลที่ซับซ้อนนะคะ ให้มันง่าย เข้าใจก็ง่าย นำไปใช้งานก็ง่าย แล้วก็ต้องเป็นระบบที่หลังจากออกแบบแล้ว แล้วนำไปใช้งานจริงนี่ ต้องเกิดปัญหาน้อยที่สุดนะคะ โดยกระบวนการทำงานในการปรับบรรทัดฐานนี่ มันจะมีอยู่ 3 ระดับนะคะ จริง ๆ เราก็จะเรียกสั้น ๆ ระดับแรกเราเรียกว่า 1NF นะคะ 2NF 3NF นะคะ ในระดับปริญญาตรีนี่ ถึง 3NF ได้ ก็ถือว่าเก่งมาแล้วนะคะ แต่ถ้าเป็นระดับที่สูงขึ้นไปอีกก็จะถึง 5NF เลยนะคะ อันนี้เป็นแผนภาพกระบวนการทำงานนะคะ ก่อนที่เราจะมาทำกระบวนการปรับบรรทัดฐานได้นี่ มันก้จะต้องวิเคราะห์ความต้องการของผู้ใช้งานก่อนว่า เข้าต้องการระบบจัดการฐานข้อมูลแบบไหน มีความต้องการใช้ตารางกี่ตารางในฐานข้อมูลนะคะ หลังจากนั้น ก็จะมาวาดรูปเหมือนที่เราเรียนอาทิตย์ที่แล้วนะคะ มาวาดเป็นแผนภาพ เพื่อให้เข้าใจว่า สิ่งที่เรากำลังจะออกแบบ หรือสิ่งที่เรากำลังจะทำฐานข้อมูลนี่ มันตรงตามความต้องการหรือเปล่านะคะ แต่รูปแบบของรูปที่เราวาดอาทิตย์ที่แล้วนี่ มันจะยังเป็นรูปแบบที่ยังไม่เป็นบรรทัดฐาน หรือว่ายังไม่ได้มีการจัดระเบียบความคิดที่ตัดข้อมูลที่ซ้ำซ้อนกันออกไป หรืออาจจะมีคีย์หลักที่มันทับซ้อนกันนะคะ เราก็เลยจะต้องเอาข้อมูลจากที่เราวาดอาทิตย์ที่แล้วนี่ มาเข้าสู่กระบวนการปรับบรรทัดฐานก่อนนะคะ ซึ่งอย่างที่บอก เราทำแค่ถึง 3NF ได้ก็ถือว่าเก่งมากแล้วนะคะ แต่อย่างน้อยต้องถึง 3 นะคะ ไอ้บอยคอตกับถึง 4 นี่ ไม่ทำก็ละไว้ได้นะคะ แต่อย่างน้อยต้องถึง 3 นะคะ โดยวัตถุประสงค์ของการปรับบรรทัดฐานนะคะ แน่นอน ลดความซ้ำซ้อนกันของข้อมูล ก็ถือถ้าข้อมูลมันซ้ำกันนี่ เราก็ต้องตัดออกไป เพราะถ้ามันยิ่งซ้ำกันมากเท่าไร เนื้อหาและก็พื้นที่ในการเก็บข้อมูลนี่มันก็จะเยอะนะคะ มันก็จะทำให้สิ้นเปลืองงบประมาณด้วยเหมือนกัน รวมถึงลดปัญหาความไม่ถูกต้องของข้อมูลนะคะ ข้อมูลนี่ นอกจากจะไม่เกิดความซ้ำซ้อนกันแล้วนี่ มันยังอาจจะเกิดจากสาเหตุอื่น คือ ถ้าเหมือนที่อาจารย์เคยยกตัวอย่าง ก็คือถ้าเราเก็บข้อมูลหลาย ๆ ที่นะคะ อย่างนักศึกษาเก็บข้อมูลที่คณะด้วยเก็บที่มหาวิทยาลัยด้วย เก็บที่สาขาด้วยนี่ บางทีถ้าวันหนึ่งคุณอาจจะเปลี่ยนแปลงเบอร์โทรศัพท์ที่บ้าน เราก็ต้องไปตามเปลี่ยนทุกที่เลยนะคะ ซึ่งเสียเวลา แล้วคราวนี้ก็จะเป็นที่เถียงกันว่า สรุปแล้วเบอร์ไหนถูก เบอร์ไหนผิดนะคะ โดยวัตถุประสงค์ของการปรับบรรทัดฐานนี่ ก็คือข้อมูลจะถูกเก็บอยู่แหล่งเดียวนะคะ เก็บอยู่ที่เดียว แต่สามารถเรียนใช้งานได้หลาย ๆ ที่ พร้อม ๆ กันได้นะคะ แต่ถ้ามันมีการเปลี่ยนแปลงข้อมูล หรือมีการลบหรือมีการเพิ่มข้อมูลนี่ เพื่อให้ข้อมูลเป็นปัจจุบันที่สุด เราจึงเก็บข้อมูลไว้ที่เดียว มีแก้ไขก็ที่เดียวนะคะ เพราะฉะนั้น ข้อมูลก็จะเป็นข้อมูลที่ถูกต้อง แล้วก็เป็นปัจจุบันด้วย แล้วก็อย่างที่ให้เหตุผลเมื่อกี้นี้นะคะ การเก็บข้อมูลที่เดียวนี่ มันก็จะลดความผิดพลาดที่เกิดจากการเปลี่ยนแปลงข้อมูล ปรับปรุงข้อมูลนะคะ เหมือนที่บอกก็คือ ถ้าเปลี่ยนเบอร์โทรศัพท์หรือเปลี่ยนบ้านเลขที่ ก็เปลี่ยนแปลงที่เดียว เราสามารถเรียกใช้ข้อมูลได้ทุกที่พร้อม ๆ กัน ถ้าต้องการข้อมูลนะคะ ความซ้ำซ้อนกันของข้อมูลนี่ บางทีมันอาจจะเกิดความผิดพลาดของการปรับปรุงของข้อมูลนะคะ แนวคิดที่สำคัญของการออกแบบฐานข้อมูลนี่ ก็คือการออกแบบข้อมูลที่ซ้ำซ้อนกันน้อยที่สุดนะคะ เพื่อประหยัดเนื้อที่ในการเก็บข้อมูลแล้วก็ลดปัญหาที่จะเกิดขึ้น ถ้าข้อมูลมันซ้ำซ้อนมากเกินไป หรือปริมาณข้อมูลมีเยอะเกินไปนะคะ อย่างเช่นตัวอย่างนะคะ ตารางด้านบน ตารางสีเทาข้างบนนะคะ จะเป็นตัวอย่างการออกแบบฐานข้อมูลที่ดี เดี๋ยวจะมาให้ดูว่าทำไมมันถึงดีกว่า ในตารางข้อมูลนี่มันจะมีตารางของพนักงานและก็ตารางสาขานะคะ จะเห็นได้ว่า ตารางพนักงานนี่ จะมีส่วนหนึ่งที่เป็นข้อมูลของรหัสสาขาห้อยไว้อยู่ ถามว่าทำไมไม่เอาข้อมูลสาขามาไว้ในตารางพนักงานทีเดียวเลยล่ะ ทำไมต้องแยกออกนะคะ อย่างถ้านักศึกษาดูคนแรกนะคะ พนักงานคนแรก รหัสสาขา B005 ก็คือสาขาเชียงใหม่ ถ้าสมมติว่าพนักงานคนที่ 1 ลาออก ก็จะมีการลบข้อมูลเกิดขึ้นใช่ไหมคะ มีการลบข้อมูล ลบคนนี้ออก ขีดฆ่าทิ้ง เดี๋ยวนะคะ ขีดฆ่าทิ้ง สิ่งไหนที่หายไปบ้าง แน่นอนสาขาเชียงใหม่จะหายไปด้วยนะคะ ถ้าสมมติเราอยู่ด้วยกัน แต่ถ้าสมมติพนักงานคนนี้ลาออก สาขาเชียงใหม่ยังอยู่ไหม ยังอยู่นะคะ ซึ่งแตกต่างจากด้านล่างนะคะ ด้านล่าง เห็นไหมคะว่า ถ้าสมมติว่าอาจารย์ลบทิ้งหมดเลย ลบทิ้งหมดนี่ กากบาททิ้ง สาขาเชียงใหม่หายไปด้วย อันนี้คือการออกแบบที่ไม่ดีนะคะ เหมือนลบคนข้างล่าง คนนี้ออก สาขาพิษณุโลกก็หายไปด้วย แต่ถ้าเป็นตารางด้านบนนะคะ ถ้าคนนี้ลาออก สาขายังอยู่ไหม ยังอยู่เหมือนเดิมนะคะ อันนี้คือการออกแบบฐานข้อมูลที่ดี ถ้าข้อมูลตัวไหนที่มันมีผลกระทบต่อกัน เราจะต้องแยกตารางออกนะคะ ตัวอย่างนะคะ ถ้าการออกแบบที่ดีนี่ เราจะลดปัญหาความซ้ำซ้อนกันของข้อมูลออกได้นะคะ อย่างเช่นตรงนี้ อันนี้เป็นตารางที่ออกแบบไม่ดีนะคะ เห็นไหมคะว่ามันจะมีรหัสสาขาแล้วก็ที่อยู่ อยู่ในตารางเดียวกัน ถ้าสมมติว่าอาจารย์เพิ่มเข้ามาใหม่อีก 1 คนนะคะ เป็น EM10 ตรงนี้นะคะ ถ้าต้องการเพิ่มพนักงานสาขาเชียงใหม่ อาจารย์ก็ต้องมากรอกข้อมูลตรงนี้อีกว่าเชียงใหม่นะ นู่นนี่นั่นโน่นนะคะ แต่ถ้าเป็นการออกแบบฐานข้อมูลที่ดีนี่ เราแค่ใส่รหัสสาขานะคะ ไม่จำเป็นจะต้องพิมพ์ที่อยู่ทุกครั้งก็ได้นะคะ เหมือนเวลาคุณไปธนาคารใช่ไหมคะ คุณก็แค่ยื่นบัตรประชาชน พนักงานธนาคารก็จะกรอกเลขบัตรประชาชนคุณลงไปนะคะ หรืออาจจะเอาชิปการ์ดของคุณนี่ เสียบเข้าไปในเครื่อง ถามว่าตอนนี้เราได้กรอกข้อมูลไหม ไม่ต้องนะคะ ขอแค่มีเลขบัตรประชาชน ข้อมูลทุกอย่างที่คุณมี เขาจะดึงออกมาจากระบบให้เลย เราไม่ต้องมาเสียเวลากรอกนะคะ เหมือนเมื่อก่อนนี่ต้องเขียนใส่กระดาษเลขบัตรประชาชนอะไร ชื่ออะไร นามสกุลอะไร ที่อยู่ที่ไหน เบอร์โทรศัพท์อะไร เดี๋ยวนี้ไม่ต้องเลย ขอแค่มีเลขบัตรประชาชนข้อมูลทุกอย่าง เราสามารถดึงขึ้นมาได้อยู่แล้วนะคะ อันนี้ก็เช่นเดียวกัน ถ้าการออกแบบไม่ดีนี่ เราต้องกรอกข้อมูลทุกช่อง ๆ เลยนี่ มันทำให้การ อาจจะคนเดียว ไม่เดือดร้อนค่ะ แต่ถ้าเป็นพนักงานใหม่ เป็นเหมือนโรงงานน่ะค่ะ ทีละ 1,000 คน ต้องนั่งกรอกเชียงใหม่เป็นพัน ๆ ครั้งนี่ เสียเวลามาก ๆ นะคะ อันนี้คือการออกแบบที่ไม่ดีนะคะ กับอีกอย่างหนึ่ง ถ้าสมมติว่าเมื่อกี้อาจารย์เพิ่มพนักงานแล้ว ถ้าอาจารย์อยากเพิ่มแค่สาขานะคะ อยากเพิ่มแค่สาขา ซึ่งในตารางนี้ คีย์หลัก จำได้ไหมคะ คีย์หลักจะเป็นคีย์ที่ขีดเส้นใต้ ซึ่งอาจารย์อยากเพิ่มสาขา สมมติอาจารย์จะเพิ่ม B100 สกลนคร สกลนครนะคะ ถามว่าเพิ่มได้ไหม อาจจะเป็นการตั้งสาขา แต่ยังไม่มีพนักงานหรอกนะคะ ถ้าจากตารางนี้นะคะ เราจะเพิ่มเฉพาะชื่อสาขาไม่ได้ เนื่องจากเรายังไม่มีรหัสพนักงาน เพราะรหัสพนักงานเป็นคีย์หลักนะคะ คีย์หลัก คือ คุณสมบัติมันคือ เป็นค่าว่างไม่ได้นะคะ อันนี้ก็ทำให้เราเพิ่มสาขาไม่ได้ เพราะเราไม่มีพนักงาน อันนี้ก็เป็นข้อผิดพลาดในการเพิ่มข้อมูล ถ้าเราออกแบบตารางแบบนี้นะคะ นี่ก็คือปัญหาที่เกิดขึ้นจากการออกแบบตารางไม่ดี กับปัญหาต่อมา เป็นปัญหาการลบข้อมูลอย่างที่อาจารย์บอกนะคะ ถ้าพนักงานคนนี้ลาออก สาขาเชียงใหม่หายไปด้วยนะคะ โดนลบไป กรณีความผิดพลาดจากการเปลี่ยนแปลงนะคะ เหมือน B03... B003 นี่ค่ะ เป็นกรุงเทพฯ ใช่ไหมคะ แล้วคราวนี้ข้อมูลมันอยู่ในตารางเดียวกัน ถ้านักศึกษาจะแก้ สมมติว่าเราย้ายจากกรุงเทพฯ ไปอยู่นนทบุรี สมมติมีพนักงาน 3,000 คน คุณต้องแก้กรุงเทพฯ 3,000 ครั้ง เป็นนนทบุรีนะคะ ถ้าพนักงานมีคน 2 คน ไม่ใช้ปัญหาค่ะ แต่ถ้าคุณเป็นโรงงานขนาดใหญ่ นั่งแก้ทีละ 3,000 คน ไม่ใช่เรื่องสนุกแน่ ๆ นะคะ อันนี้ก็เป็นปัญหานะคะ เพราะฉะนั้น เราควรแยกตารางพนักงานกับตารางสาขาออกจากกันนะคะ นี่เป็นเหตุผล อันนี้คือข้อมูลขนาดเล็กนะคะ เรายังเห็นปัญหาขนาดนี้ ถ้าสมมติว่า เป็นองค์กรขนาดใหญ่ เป็นบริษัท เป็นโรงงาน หรือระดับโรงเรียนมีนักเรียน 200-300 หรือ 2,000-3,000 คนก็ได้ นะคะ มันก็จะมีปัญหาเยอะมาก ถ้าสมมติว่าเราจัดการตารางไม่ดีนะคะ จากปัญหาที่เกิดขึ้นเมื่อกี้อย่างที่บอกค่ะ เราจะแก้ปัญหาโดยการแยกตารางออกเป็น 2 ตาราง แบบนี้นะคะ ฟังก์ชันการขึ้นต่อกันนะคะ อันนี้เดี๋ยว จะเป็นเกี่ยวกับตารางหนึ่งมีผลกับอีกตารางหนึ่ง เราจะเรียกว่าเป็นฟังก์ชันที่มีการขึ้นต่อกัน เดี๋ยวดูตัวอย่างเลยแล้วกันนะคะ อย่างเช่น ตารางนี้นะคะ ดูจากรหัสพนักงานนะคะ เราจะเห็นได้ว่ารหัสพนักงาน จะส่งผลกับชื่อตำแหน่ง สัญลักษณ์ของการขึ้นต่อกันนะคะ อันไหนเป็นตัวหลักจะชี้ไปที่ตัวรองนะคะ ตามหัวลูกศรเลย ดูทิศทางตามหัวลูกศรนะคะ อันไหนเป็นตัวหลัก อันไหนเป็นตัวรองนะคะ อย่างเช่น ตัวนี้ถามว่าตำแหน่งมาชี้ที่รหัสพนักงานได้ไหมนะคะ ถามว่าไม่ได้นะคะ เพราะการขึ้นต่อกันจะต้องเป็นลักษณะ 1 ต่อ 1 เท่านั้น นะคะ เป็น 1 ต่อกลุ่มไม่ได้ ชนิดของการขึ้นต่อกันนะคะ จะมีอยู่ 4 ชนิดนะคะ ชนิดแรกเป็นการขึ้นต่อกันโดยสมบูรณ์นะคะ ซึ่งอาจจะเป็นเกี่ยวกับตารางนะคะ จะมีคอลัมน์ 1 คอลัมน์ หรือมากกว่า 1 คอลัมน์มาประกอบกันนะคะ โดยในคอลัมน์นั้น ๆ นี่ จะบรรจุค่าที่ระบุ ความพิเศษของแถวแถวหนึ่งได้อย่างชัดเจนนะคะ ก็คือ Attribute Attribute หนึ่งนี่ จะเป็นค่าเฉพาะที่บอกได้ว่า Record ข้อมูลแถว ๆ นั้นนี่ มันมีลักษณะพิเศษเฉพาะตัวอย่างไรนะคะ โดยในทุกความสัมพันธ์นี่จะต้องระบุค่าคีย์หลักไว้ด้วยนะคะ ซึ่งคีย์หลักนี่คือต้องเป็นค่าเอกลักษณ์ ไม่ซ้ำกันอยู่แล้วนะคะ อย่างเช่น การขึ้นต่อกันอย่างสมบูรณ์ อันแรกนะคะ Attribute ที่... ก็คือคอลัมน์ที่ไม่ใช่คีย์หลัก คีย์หลัก จำได้ใช่ไหมคะ คีย์หลักจะเป็นคอลัมน์ที่มีขีดเส้นใต้นะคะ คอลัมน์ที่ไม่ใช่คีย์หลักจะขึ้นตรงต่อคอลัมน์ที่เป็นคีย์หลักคอลัมน์เดียวเท่านั้นนะคะ เช่น เลขบัตรประชาชนตัวนี้ จะขึ้นจะเป็นเจ้าของชื่อนี้เท่านั้นนะคะ เพราะฉะนั้น การขึ้นต่อกันโดยสมบูรณ์จะเป็นลักษณะแบบ 1 ต่อ 1 นะคะ เลขบัตรประชาชน 1 เลข จะต้องเป็นของคนคนเดียวเท่านั้นนะคะ ไม่ใช่ว่าเลขบัตรประชาชนนี้ใช้ 10 คน เป็นไปไม่ได้นะคะ ตัวอย่างนะคะ ตารางที่มีคอลัมน์หลายตัวนะคะ ขึ้นอยู่กับคีย์หลักตัวเดียว เช่น คน 1 คนนี่ ก็จะมีข้อมูล ชื่อ นามสกุล วันเดือนปีเกิด วันที่ทำบัตรใช่ไหมคะ แต่ว่าเขาจะต้องขึ้นตรงกับเลขบัตรประชาชนเดียวเท่านั้น ถามว่า 3 คนนี้ อาจจะเกิดวันเดียวกันก็ได้ค่ะ แต่เลขบัตรประชาชนเขาจะไม่เหมือนกัน หรือเขาอาจจะมาทำบัตรวันเดียวกันนะคะ แต่เลขบัตรประชาชนเขาจะไม่ซ้ำกันนะคะ คืออะไรซ้ำกันได้ทุกอย่างค่ะ ยกเว้นหมายเลขบัตรประชาชน แต่บางตารางนะคะ ก็อาจจะเป็นการรวมตัวกันของคีย์หลัก มากกว่า 1 คีย์หลักนะคะ มารวมกัน เช่น นักศึกษาคนนี้นะคะ รหัสนักศึกษานี้ ลงทะเบียนวิชานี้นะคะ ได้เกรดอะไรนะคะ อันนี้ก็เป็นความสัมพันธ์ที่เกิดขึ้นได้เหมือนกัน ถามว่ารหัสนักศึกษาซ้ำกันได้ไหม ไม่ซ้ำนะคะ รหัสวิชาซ้ำกันได้ไหม ไม่ซ้ำนะคะ เหมือนชื่อวิชาอาจารย์ ก็รหัสหนึ่งนะคะ ชื่ออาจารย์คนอื่นก็รหัสวิชาอีกอันหนึ่ง อันนี้จะไม่ซ้ำกันอยู่แล้วนะคะ ต่อมาขึ้นต่อกันบางส่วนนะคะ มันก็จะเป็นอาศัยความสัมพันธ์ที่เกิดขึ้นจากคีย์ผสมนะคะ อาจจะเป็น ขึ้นตรงกับตารางอื่น หรือ 2 ตารางมารวมกันนะคะ อาจจะไม่ใช่คีย์หลักก็ได้ แต่มันมีความหมายกับอีกคอลัมน์หนึ่งนะคะ เดี๋ยวจะยกตัวอย่างเลยดีกว่านะคะ อย่างเช่น เมื่อตารางที่อาจารย์ให้ดูเมื่อกี้นะคะ ก็จะมีรหัสนักศึกษา รหัสวิชา มีเกรด แล้วก็มีการบอกด้วยว่ารหัสวิชานี้เป็นชื่อวิชาอะไรนะคะ มันจะเป็นการเกิดขึ้น เมื่อคีย์หลักประกอบกันด้วย คอลัมน์หรือว่า Attribute หลาย ๆ Attribute รวมกันนะคะ โดยบางส่วนของคีย์หลัก สามารถไประบุค่า Attribute อื่นที่ไม่ใช่คีย์หลักได้นะคะ อย่างเช่น ในความสัมพันธ์นี้ คีย์หลักจะมี 2 ตัวนะคะ มีรหัสนักศึกษากับรหัสวิชานะคะ ถามว่าถ้ามีแต่รหัสนักศึกษา เกรดนะคะ รหัสวิชา แล้วเราจะรู้ไหมว่าชื่อวิชาที่เราเรียนไปนี่ ชื่อวิชาอะไรนะคะ เหมือนบางคนรู้รหัสวิชา แต่จำชื่อวิชาไม่ได้ก็มีนะคะ เพราะฉะนั้น รหัสวิชานี่มันเลยสามารถไปส่งผลกับชื่อวิชาได้เหมือนกัน เพราะเป็นตัวระบุว่าไอ้รหัสวิชานี้ ชื่อวิชาอะไรนะคะ ก็คือคีย์หลักในตารางนี้มี 2 อัน แต่มีคีย์หลัก 1 ตัวนี่ ไปมีผลกับอีก Attribute หนึ่งได้นะคะ อันนี้คือความขึ้นต่อกันบางส่วน นะคะ อย่างเช่นตัวนี้ก็จะเป็นของจริง ถ้าสมมติว่าอาจาย์ตัดรหัสนักศึกษาออก มีแค่รหัสวิชา มีเกรด มีชื่อวิชาการเขียนโปรแกรม แล้วถาม รู้ไหมคะว่าเกรด A นี้ของใคร ไม่รู้นะคะ หรือว่า เดี๋ยวลบอันนี้ออกก่อนนะ หรือว่าอาจารย์ลบรหัสวิชาออก เหลือแต่นักศึกษา เหลือเกรด เหลือชื่อวิชา แล้วถามว่า แล้วรหัสวิชาอะไรล่ะที่เราได้เกรด A เราก็ไม่ทราบอีกเหมือนกันนะคะ อันนี้ก็คือเป็นการขึ้นต่อกันบางส่วนนะคะ ดูตัวอย่างนะคะ ต่อมา เป็นการขึ้นต่อกันแบบส่งต่อนะคะ ก็จะเป็นความสัมพันธ์ที่เกิดขึ้นก็ต่อเมื่อ มี Attribute หรือว่าคอลัมน์อื่น ๆ ที่ไม่ใช่คีย์หลัก แต่ไปสามารถขึ้น สามารถระบุค่าของ Attribute อื่นใน Record ได้นะคะ ซึ่งเป็นการออกแบบที่ไม่เหมาะสมนะคะ เพราะส่วนใหญ่แล้วในตารางนี่ ถ้าเราจะระบุค่าอื่นให้กับคอลัมน์อื่นได้ ควรจะต้องเป็นคีย์หลักเท่านั้นนะคะ ดูตัวอย่างนะคะ เช่น ตารางนี้ เขาบอกว่าสิ่งที่เกิดขึ้น คือ Attribute ก็คือคอลัมน์ที่ไม่ใช่คีย์หลัก หรือ Primary Key นะคะ ก็คือไม่ใช่คอลัมน์ที่มีเส้นขีดนี่ มันไประบุค่าอื่น ๆ ในตารางได้ เช่น ตารางนี้ คีย์หลักก็คือเลขที่ประจำตัวนะคะ โดยเลขประจำตัวนี่ จะไปมีผลกับชื่อ นามสกุล ที่อยู่ ตำแหน่ง ใช่ไหมคะ แต่คราวนี้ รถประจำตำแหน่ง มันไม่ถูกระบุโดยเลขประจำตัว มันถูกระบุโดยรหัสตำแหน่ง เหมือนถ้าเป็นผู้จัดการนี่ แทนที่ผู้จัดการนะคะจะรู้เลยว่ารถประจำตำแหน่งคืออะไร แต่เขาไปเช็กที่รหัสตำแหน่ง แทนที่จะเช็กกับเลขประจำตัว อันนี้ คือการออกแบบที่ไม่ดี เพราะฉะนั้น ถ้าสมมติว่าจะให้รถประจำตำแหน่ง วิธีการแก้ปัญหาก็คือเราควรจะแยกตารางนี้ ออกไปสร้างตารางใหม่เลยค่ะ มันไม่ควรจะมาขึ้นกับตารางที่มีคีย์หลัก แต่ไม่สามารถระบุค่าข้อมูลตรงนี้ได้นี่ มันไม่ควรทำนะคะ กับต่อมา เป็นการขึ้นต่อกันเชิงกลุ่มนะคะ ก็จะเป็นความสัมพันธ์ระหว่างคอลัมน์ หรือว่า Attribute นี่แบบขึ้นต่อกันแบบสมบูรณ์นะคะ ก็ไปสามารถไประบุค่าอื่นได้นะคะ โดยที่อย่างเช่นตัวอย่างนะคะ ในตารางนี้นะคะ จะมีรหัสหลักสูตร สามารถระบุรหัสวิชาได้หลายวิชา เช่น จริง ๆ ในรหัสนักศึกษาจะได้เห็นได้ว่ามีเลข 122 ในรหัสนักศึกษานี่ มี 122 คืออะไร 122 ก็คือหลักสูตรที่เราเรียนอยู่นะคะ ซึ่งในหลักสูตรที่เราเรียนนี่ มันมีวิชามากกว่า 20 วิชานะคะ นั่นก็คือในรหัสหลักสูตรนี่ มันสามารถระบุรหัสวิชาได้หลากหลายรหัสวิชามาก ๆ นะคะ อันนี้ก็คือการขึ้นต่อกันแบบมีค่ามากกว่า 1 นะคะ รหัสหลักสูตร สามารถระบุรหัสวิชาได้หลายค่านั่นเองนะคะ แล้วรหัสหลักสูตร ก็สามารถระบุค่ารหัสนักศึกษาได้หลายคนเช่นเดียวกัน เหมือนตอนนี้ หลักสูตรที่เราเรียนนี่ มีนักศึกษาเกือบ 100 คน แต่รหัสหลักสูตรเดียวนะ นะคะ นี่คือความสัมพันธ์แบบสามารถระบุค่าได้มากกว่า 1 นั่นเอง แบบหลายค่านะคะ เพราะฉะนั้น วิธีการแก้ปัญหาของสิ่งที่เกิดขึ้นนะคะ เราเลยจะต้องมีการ... กระบวนการปรับบรรทัดฐาน หรือว่ากระบวนการปรับปรุงโครงสร้างของข้อมูลนะคะ ที่มีความซ้ำซ้อนกัน ให้อยู่ในรูปแบบที่เป็นบรรทัดฐาน ก็คือ เป็นรูปแบบที่พร้อมที่จะเอาไปพัฒนาเป็นฐานข้อมูลได้นะคะ โดยหลักการนะคะ อย่างที่บอก มี 5 ระดับ แต่ในระดับที่ 3 นี่ ก็ถือว่าเพียงพอ สำหรับการออกแบบฐานข้อมูลในปัจจุบันแล้วนะคะ โดยคีย์หลักของการทำงานนะคะ ขั้นที่ 1 นะคะ กำจัดกลุ่มของข้อมูลมีความซ้ำซ้อนกันออกไป ข้อแรกง่ายมาก ๆ ง่ายที่สุด ก็คือ 1NF นะคะ ต่อมาขั้นที่ 2 หรือ 2 NF นะคะ จะกำจัดการขึ้นต่อกันบางส่วนออกนะคะ ขั้นสุดท้าย 3NF นะคะ กำจัดการขึ้นต่อกันของ Attribute ที่ไม่ใช่คีย์หลักนะคะ เดี๋ยวจะมาดูทีละขั้น ว่ามันจะต้องเป็นอย่างไรบ้างนะคะ ข้อแรกง่ายที่สุด ง่ายมาก ๆ นะคะ ให้นักศึกษาจำกระบวนการหลัก ๆ จะมีอยู่ 3 ข้อนี้ค่ะ ขั้นตอนอันแรกเลย ดูก่อนว่า ข้อมูลมันซ้ำซ้อนกันไหมนะคะ ขั้นที่ 2 ก็คือ มันขึ้นต่อกันแค่บางส่วนหรือเปล่านะคะ ขั้นที่ 3 ค่าอันไหนไม่ใช่คีย์หลัก แต่มันไปส่งผลกระทบกับข้อมูลอื่นได้หรือเปล่านะคะ ดูขั้นตอนที่ 1 ก่อนนะคะ ขั้นตอนที่ 1 ง่ายมากนะคะ ทุก ๆ คอลัมน์นะคะ หรือ Attribute ในแต่ละ Record จะต้องเป็นค่า Single Value คือมีค่าเดียวเท่านั้นนะคะ จะใส่แบบนี้ไม่ได้ เพราะฉะนั้น ข้อมูลทุกแถวจะต้องมีค่าที่ไม่ซ้ำกัน อย่างตัวนี้ นักศึกษาคนที่ 1 แน่นอนนักศึกษา 1 เทอมนี่ คุณลงทะเบียนประมาณ 6-7 วิชาใช่ไหมคะ ข้อมูลมันก็จะเป็นแบบนี้ ถ้าเราไม่มีการทำ Normalization แต่คราวนี้ ขั้นตอนที่ 1 เราจะตัดข้อมูลที่ซ้ำซ้อนกันออก วิธีการง่ายมากค่ะ คือแยกข้อมูลออกเป็นอย่างละแถวที่ไม่ซ้ำกัน ดูตัวอย่างนะคะ วิธีการทำ 1 NF ง่ายมากค่ะ ถ้าข้อมูลคนไหนเป็นกลุ่มนี่ค่ะ คนที่ 1 ลงวิชา... ลงทะเบียนเรียน 3 วิชาใช่ไหมคะ คนที่ 2 มี 2 วิชา สามารถทำในรูปแบบ 1NF ก็คือเอามันกระจายออกมาค่ะ กระจายข้อมูลพวกนี้ออกมา กระจายออกเห็นไหมคะ กระจายออก 1NF ง่ายมากนะคะ ข้อมูลพวกนี้ก็ทำซ้ำลงมา ทำซ้ำลงมา ทำซ้ำลงมานะคะ ทำซ้ำลงมา ถามว่าอาจารย์คะ ทำไม มัน... แล้วทำไม 001 มันซ้ำกันได้ล่ะ นู่นนี่นั่นโน่น แต่รหัสวิชาเขาไม่ซ้ำกันเห็นไหมคะ 1NF นี่ง่ายมากค่ะ ข้อมูลถ้ามันเป็นก้อนอย่างนี้ เรากระจายออกมาเป็นแยกออกมาเป็นบรรทัด ๆ เลย แค่นั้นเอง อย่างน้อยในข้อสอบ ต้องทำ 1NF ให้ได้ เพราะมันง่ายที่สุดแล้วนะคะ อย่างเช่นตัวนี้นะคะ ก็กระจายออกมา แล้วคราวนี้ถ้าเรากระจายข้อมูลเรียบร้อยแล้วนะคะ ก็จะมาดูว่าอย่างในตารางนี้น่ะค่ะ เป็นตารางเป็นของพนักงานใช่ไหมคะ เขาจะมีคีย์หลัก 1 ตัวแล้ว แต่ว่ามันยังมีตัวนี้ค่ะ ตัวที่ 1 ตัวที่ 2 ที่มีคุณสมบัติเป็นคีย์หลักได้ เราต้องแยกมันออกนะคะ กระบวนการนะคะ ดูก่อนว่า นี่ตารางเมื่อกี้นี้นะคะ สิ่งที่ขึ้นตรงกับคีย์หลักตัวนี้นะคะ ก็จะเป็นตัวที่ 1 ตัวที่ 2 ตัวที่ 3 สังเกตแล้วว่าคีย์หลักมีตัวเดียว แต่ข้อมูลมีเยอะมากนะคะ เราแยกออกมาได้อันแรกเลย ก็จะมีรหัสโพรเจกต์นะคะ แล้วก็ชื่อโพรเจกต์ ใครเป็นผู้จัดการ เงินเดือนเท่าไร ไม่ใช่สิ งบประมาณเท่าไรนะคะ อันนี้ คือมันจะเชื่อมโยงกับข้อมูลที่เป็นคีย์หลัก ก็คือ ProjectCode ตัวนี้นะคะ ส่วนตัวนี้ เป็นคีย์คู่แข่ง 2 ตัวนะคะ 2 ตัวนี่มันสามารถทำหน้าที่เป็นคีย์หลักให้กับอย่างตัวนี้นะคะ มันจะเป็นคีย์หลักให้กับชื่อของพนักงาน อย่างตัวนี้ ก็จะเป็นคีย์หลักสำหรับชื่อแผนกนะคะ ถามว่ามันขึ้นตรงกับ ProjectCode ไหม ไม่นะคะ เพราะฉะนั้น การทำขั้นตอนต่อมานะคะ 2NF ขั้นตอนที่ 1 เราจะต้องทำ 1NF มาเรียบร้อยแล้ว ซึ่งง่ายมาก ๆ นะคะ แล้วก็ต้องมาตัดการขึ้นต่อกันบางส่วนออกนะคะ ก็คือการกำจัด Attribute ที่ไม่ขึ้นกับคีย์หลักของตารางนั้น ๆ นั่นเอง กำจัดออกนะคะ อย่างเช่นตัวนี้นะคะ การขึ้นต่อกันบางส่วน จะเห็นได้ว่า รหัสวิชากับชื่อวิชา มันไม่ขึ้นตรงกับรหัสนักศึกษาใช่ไหมคะ อันนี้จำได้นะ รูปเดิมนะคะ รูปเดิม วิธีกำจัดปัญหา เราก็ดึงสิ่งที่มันเป็นปัญหาค่ะ สิ่งที่มันไม่ขึ้นตรงกับคีย์หลักตัวนั้นไปสร้างตารางใหม่ สร้างตารางเพิ่มนะคะ เอาสิ่งที่เป็นปัญหาออกมา ไปใส่ตารางใหม่ กำหนดคีย์หลักใหม่นะคะ ในตารางเดิมนะคะ เราก็เอาคีย์หลักของตารางใหม่ไปใส่ แค่นั้นเองนะคะ วิธีการก็คือ เหมือนรูปนี้นะคะ สิ่งที่เป็นปัญหาที่อาจารย์ยกตัวอย่าง ก็คือรหัสวิชา กับชื่อวิชานะคะ เพราะรหัสวิชามันไม่ได้ขึ้นตรงกับรหัสนักศึกษา นะคะ เพราะฉะนั้น ไอ้ 2 ตัวนี้คือสิ่งที่เป็นปัญหานะคะ วิธีการแก้ปัญหาคือเราสร้างตารางผลการเรียนใหม่ สร้างตารางวิชาใหม่ นี่เห็นไหมคะ ในตารางใหม่เราจะตัดชื่อวิชาออก แต่ต้องเหลือรหัสวิชาไว้ เพื่อให้ไปเชื่อมโยงว่ารหัสวิชานี้ มันชื่อวิชาอะไร จากอีกตารางหนึ่งแค่นั้นเองนะคะ โอเคค่ะ อันนี้เป็นตัวอย่างของการปรับบรรทัดฐานในรูปแบบของ 2NF นะคะ แต่เดี๋ยวอันนี้จะให้ทำเป็นการบ้าน เดี๋ยวค่อยย้อนกลับมาแล้วกันนะคะ เดี๋ยวค่อยย้อนมาสั่ง อันนี้เป็น 1NF นะคะ อันนี้ก็แก้แล้ว ตารางเมื่อกี้นะคะ ต่อมา ขั้นตอนสุดท้ายนะคะ 3NF นะคะ โดยความสัมพันธ์นะคะ ก่อนที่จะทำเป็น 3NF ได้จะต้องทำ 2NF มาก่อน หลักของการทำขั้นตอนที่ 3 คือ ต้องเอาความสัมพันธ์ที่ไม่ใช่คีย์หลักออกนะคะ เช่น ไม่ใช่คีย์หลักแต่ไปมีผลกับคอลัมน์อื่นไม่ได้นะคะ ไม่ได้ วิธีการแก้ปัญหา เช่นเดิมค่ะ สร้างตารางใหม่ขึ้นมาแก้ปัญหานั้น ๆ นะคะ อย่างเช่น ในตัวอย่างนะคะ รหัสพนักงานนะคะ ชื่อ สกุล รหัสแผนก ชื่อแผนก เงินเดือน จะเห็นได้ว่าในตารางนี้นี่ คีย์หลักก็คือรหัสพนักงานนะคะ แต่มันมีรหัสแผนกกับชื่อแผนกติดมาด้วย ซึ่งมันไม่ได้เกี่ยวกับรหัสพนักงานเลยนะคะ วิธีการแก้ปัญหา ก็คือเอารหัสแผนกกับชื่อแผนก ไปสร้างตารางใหม่ แต่ต้องยังคงรหัสแผนกไว้ในตารางเดิมนะคะ เพื่อให้มันเชื่อมโยงได้ว่าไอ้แผนก A001 นี่คือแผนกอะไร นะคะ อันนี้คือการแก้ปัญหา ไม่ใช่คีย์หลักแต่ไปส่งผลกับคอมลัมน์อื่นในตารางนะคะ อันนี้คือ 3NF จริง ๆ แล้ว อยากให้ลองทำในห้องมากกว่า แต่ด้วยสัปดาห์นี้มันมีข้อกำจัดนะ ก็ไม่เป็นไรนะคะ อันนี้เป็นตัวอย่างนะคะ สรุปนะคะ วิธีการทำ Normalization หรือว่าการปรับบรรทัดฐานนะคะ 1NF ก็คือทุก ๆ Attribute นะคะ ก็คือทุก ๆ คอลัมน์ ในแต่ละแถว จะต้องมีค่าของข้อมูลเพียงค่าเดียวเท่านั้นนะคะ อย่างเช่น เหมือนเวลาเรากรอกเบอร์โทรศัพท์ เราจะไม่... เรามีโทรศัพท์ 3 เบอร์ก็จริง แต่เราจะกรอกได้เบอร์เดียวนะคะ ถ้าอยากใส่เบอร์ที่ 2 ที่ 3 ก็ต้องเพิ่มข้อมูลแถวใหม่ขึ้นมานะคะ ต่อมา 2NF นะคะ ก็ปัญหาก็คือ ถ้ามีข้อมูลนะคะ ข้อมูลทุกตัวในตารางนั้นจะต้องขึ้นกับคีย์หลัก ของตารางตัวเดียวเท่านั้นนะคะ ข้อที่ 3 ถ้าคอลัมน์ไหนที่ไม่ใช่คีย์หลักนะคะ จะมาส่งผลกับคอลัมน์อื่นในตารางไม่ได้นะคะ เพราะฉะนั้น ไอ้ตารางข้อ 1 นี้คือแค่กระจายตาราง อันที่ 2 อันที่ 3 ถ้ามีปัญหาปึ๊บ เราต้องสร้างตารางใหม่ นะคะ การบ้านเอาอย่างนี้ดีกว่านะคะ อาจารย์จะให้ทำ น่าจะส่งวันนี้ เอาแค่ข้อเดียวนะคะ ข้อเดียวพอ เพราะว่าจริง ๆ อยากให้ทำในห้อง เดี๋ยวสัปดาห์หน้าค่อยทำในห้องนะคะ แต่อันนี้จะให้ลองทำดูก่อนว่าที่เรียนไปวันนี้เข้าใจไหมนะคะ ถ้าทำเสร็จแล้วก็ค่อยเอามาส่งที่ตู้ส่งงานอาจารย์ เอาเฉพาะข้อนี้นะข้อเดียว ข้อเดียวพอ วันนี้ข้อเดียวพอนะคะ ส่งในเวลานี่แหละนะคะ ให้ลองทำดูว่าเข้าใจไหม ข้อนี้ทำ 1NF ทำ 1NF ทำอย่างไร ง่ายมาก ๆ เลยนะคะ นี่อาจารย์เว้นช่องว่างให้แล้ว เติมมานะคะ 2NF คุณเห็นไหมว่า นี่ มันมีรหัสวิชานี่ ชื่อวิชานี่ ต้องทำอย่างไรกับมันนะคะ แยกมันออกมาสิ แยกอย่างไรนะคะ เอาข้อเดียวก่อนนะคะ แล้วลอง ส่งมาให้อาจารย์ดูเข้าใจมากน้อยขนาดไหนนะคะ จริง ๆ อยากให้เรียนในห้องมากกว่า แต่วันนี้ก็เอาประมาณนี้ก่อนแล้วกันนะคะ ให้ทุกคนหายดีกลับมา อาทิตย์หน้าค่อยเดินดูในห้องดีกว่านะคะ วันนี้ก็จะประมาณนี้นะคะ เดี๋ยวเวลาที่เหลือให้ทำข้อนี้แล้วมาส่งวันนี้เลยยิ่งดีนะคะ เวลาที่เหลือทำใส่กระดาษมาส่งอาจารย์แล้วกันนะ ก็ประมาณนี้ค่ะ เวลาที่เหลือทำให้เสร็จภายในวันนี้นะคะ ข้อเดียวเองนะคะ ข้อเดียว มีใครสงสัยไหมคะ ปุ๋ยสงสัยไหม ปุ๋ยเปิดไมค์ได้เหลือเปล่า (นักศึกษาหญิง) ไม่มีค่ะ อาจารย์ เดี๋ยวถ้าอย่างไร เดี๋ยวให้อุบลไปส่งหรืออย่างไรคะ เพราะว่าอุบลกลับหอแล้วน่ะค่ะ (อาจารย์เกวลี) อ๋อ ไม่ ๆ ส่วนมากอยู่ไหนกัน อยู่หอหรืออยู่ DSS (นักศึกษาหญิง) ตอนนี้เหลืออยู่ DSS ประมาณ 4 คนค่ะ (อาจารย์เกวลี) ก็รวม ๆ เท่าไรได้ก็เอามา (นักศึกษาหญิง) ค่ะ ๆ ๆ (อาจารย์เกวลี) ก็ให้เด็กทำ DSS นั่นแหละ โอเค Thank you. ค่ะ วันนี้ก็ประมาณนี้ค่ะ ขอบคุณทุกคนมากนะคะ ที่ยังตั้งใจเรียนกันอยู่ แล้วก็งานอย่าลืมส่งวันนี้นะคะ ใครอยู่ DSS ก็ทำให้เสร็จ แล้วก็ฝากเพื่อนมาส่ง รวมกันมาส่งก็ได้นะคะ ถ้าใครอยู่หอก็จะมาทำอยู่ DSS ก็ได้ หรือว่าทำเสร็จแล้วมาส่งที่โต๊ะอาจารย์ก็ได้นะคะ โอเคค่ะ วันนี้ก็ประมาณนี้ค่ะ ขอบคุณล่ามด้วยนะคะ ค่ะ ขอบคุณค่ะ ปุ๋ยวันนี้ครบนะ ปุ๋ยไปแล้ว โอเค [สิ้นสุดการถอดความ]