(อาจารย์เกวลี) เดี๋ยวเริ่มเลยก็ได้ค่ะ โอเค น่าจะประมาณนี้นะคะ วันนี้จะเป็นบทที่ 5 เกี่ยวกับกระบวนการปรับบรรทัดฐาน นะคะ ภาษาอังกฤษก็จะเป็นnormalization เนื้อหาวันนี้ ก็จะมีความหมาย แล้วกของการทำ Nomanlizationจะเกี่ยวกับฟังก์ชันการขึ้นต่อกัน แล้วก็หลักการขึ้น normaliด้วยนะคะ มีอยู่ 3 ข้อวันนี้ โดยการxiหรือ Noมันจะเป็นทฤษฎีที่คนออกแบบฐานข้อมูลนีมาแปลงข้อมูลจากรูปที่ซับซ้อนนะคะ ให้มันง่าย เข้าใจก็ง่าย นำไปใช้งานก็ง่าย แล้วต้องเป็นระบบที่หลังจากออกแบบแล้ว แล้วนำไปใช้งานจริงนี่ ต้องเกิดปัญหาน้อยที่สึุดโดยกระบวนการทำงานนะคะ ในการปรับบรรทัดฐานนี่ มันจะมี 3 ระดับ นะคะ จริง ๆ เราก็จะเรียกสั้น ๆ ระดับแรกจะเรียกว่า 1NFนะคะ 2NF 3NF นะคะ ในระดับปริญญาตรีนี่ ถึง 3NF ได้ ก็ถือว่าเก่งมากแล้ว นะคะ แต่ถ้าเป็นระดับที่สูงขึ้นไปอีก ก็จะได้ถึง 5NF เลยนะคะ อันนี้เป็นแผนภาพกระบวนการทำงานนะคะ ก่อนเราจะมาทำแผนภาพปรับบรรทัดฐานได้นี่ มันก็ต้องวิเคราะห์ความต้องการใช้งานของผู้ใช้งานก่อนว่า เขาต้องการระบบจัดการฐานข้อมูลแบบไหน มีความต้องการใช้ตารางกี่ตารางในฐานข้อมูลนะคะ หลังจากนั้นก็จะมาวาดรูป เหมือนที่เราเรียนอาทิตย์ที่แล้วนะคะ มาวาดเป็นแผนภาพ เพื่อให้เข้าใจว่า สิ่งที่เรากำลังจะออกแบบ หรือสิ่งที่เรากำลังจะทำฐานข้อมูลนี่ มันตรงตามความต้องการหรือเปล่านะคะ แต่รูปแบบของรูปที่เราวาดอาทิตย์ที่แล้วนี่ มันจะยังเป็นรูปแบบที่ยังไม่เป็นบรรทัดฐาน หรือว่ายังไม่ได้มีการจัดระเบียบความคิดที่มันซับซ้อนออกไป หรืออาจจะมีคีย์หลักที่มันทับซ้อนกันนะคะ เราก็เลยจะต้องเอาข้อมูลจากที่เราวาดอาทิตย์ที่แล้วนี่ มาเข้าสู่กระบวนการปรับบรรทัดฐานก่อน นะคะ ซึี่งอย่างที่บอก เราทำแค่ถึง 3 NF นี่ ก็ถือว่าเก่งมากแล้วนะคะ แต่อย่างน้อยต้องถึง 3 นะคะ ไอ้บอยด์คอดด์ กับ 4NF ไม่ทำก็ละไว้ได้นะคะ แต่อย่างน้อยต้องถึง 3 นะคะ โดยวัตถุประสงค์ของการปรับบรรทัดฐานนะคะ แน่นอน ลดความซ้ำซ้อนกันของข้อมูล ก็คือถ้าข้อมูลมันซ้ำกันนี่เราต้องตัดออกไป เพราะถ้ามันยิ่งซ้ำกันมันยิ่งซ้ำกันมากเท่าไร เนืหา และพื้นที่ในการเก็บข้อมูลมันเยอะ แล้วก็สิ้นเปลืองงบประมาณด้วยเหมือนกันรวมถึงลดปัญหาความไม่ถูกต้องของข้อมูลนะคะ ข้อมูลนี่ นอกจากจะไม่เกิดความซ้ำซ้อนกันแล้วนี่ มันยังเกิดจากสาเหตุอื่น คือ ถ้าเหมือนที่อาจารย์เคยยกตัวอย่าง ก็คือถ้าเราเก็บข้อมูลหลาย ๆ ที่ นะคะ อย่างนักศึกษาเก็บข้อมูลที่คณะด้วย เก็บที่มหาวิทลัย เก็บที่สาขาด้วย บาทีถ้าวันหนึ่งคุณอาจจะเปลี่ยนแปลงเบอร์โทรศัพท์ที่บ้าน เราก็ต้องไปตามเปลี่ยนทุกที่เลยนะคะ ซึ่งเสียเวลา แล้วคราวนี้ ก็จะเป็นที่เถียงกันว่า สรุปแล้วเบอร์ไหนถูก เบอร์ไหนผิดนะคะ โดยวัตถุประสงค์ของการปรับบรรทัดฐานนี่ ก็คือข้อมูลอาจจะเก็บอยู่แหล่งเดียวนะคะ ที่แหล่งเที่เดียว แต่สามารถเรียนใช้งานหลาย ๆ ที่ พร้อม ๆ กันได้นะคะ แต่ถ้ามันมีการเปลี่ยนแปลงข้อมูล มีการลบหรือการเพิ่มเป็น เพื่อให้ข้อมูลเป็นปัจจุบันที่สุด เราจึงเก็บข้อมูลไว้ที่เดียว มีแก้ไขก็ที่เดียวนะคะ เพราะฉะนั้น ข้อมูลถูกต้องก็เป็นปัจจุบันด้วย แล้วก็อย่างที่ให้เหตุผลเมื่อกี้นี้นะคะ การเก็บข้อมูลที่เดียวนี่ มันก็จะลดการผิดพลาด ที่เปิดจากการเปลี่ยนแปลงข้อมูล ปรับปรุงข้อมูล นะคะ เหมิือนที่บอก ก็คือเปลี่ยนเบอร์โทรศัพท์ หรือว่าเปลี่ยนบ้านเลขที่ ก็เปลี่ยนแปลงที่เดียว เราสามารถเรียกใช้ข้อมูลได้ทุกที่นะคะ ถ้าต้องการข้อมูลนะคะ ความซ้ำซ้อนกันของข้อมูลนี่ มันอาจจะเกิดผิดพลาดของการปรับปรุงของข้อมูลนะคะ แนวคิดของการออกแบบฐานข้อมูลนี่ ก็คือการออกแบบข้อมูลที่ซ้ำซ้อนกันน้อยที่สุดนะคะ เพื่อประหยัดเนื้อที่ใน่าร แล้วก็ลดปัญหาที่เกิดขึ้น ถ้าข้อมูลมันซ้ำซอนมากเกินไปหรือปริมาณข้อมูลมีเยอะเกินไปนะคะ อย่างเช่น ตัวอย่างนะคะ ตารางด้านบน ตารางสีเทาข้างบนนะคะ จะเป็นการออกแบบฐานข้อมูลที่ดี เดี๋ยวจะมาให้ดูว่าทำไมมันถึงดีกว่า ในตารางข้อมูลนี่ มันจะมีตารางของพนักงาน และก็ตารางสาขานะคะ จะเห็นได้ว่าตารางพนักงานนี่ จะมีส่วนหนึ่งที่ข้อมูลของรหัสสาขาห้อยไว้อยู่ ถามว่าทำไมไม่เอาข้อมูลสาขามาไว้ในตารางพนักงานทีเดียวเลยล่ะ ทำไมต้องแยกออกนะคะ อย่าง ถ้านักศึกษาดูคนแรกนะคะ พนักงานคนแรก รหัสสาขาB005 ก็คือสาขาเชียงใหม่ ถ้าสมมติว่าพนักงานคนที่ 1 ลาออก ก็จะมีการลบข้อมูลเกิดขึ้นใช่ไหมคะ มีการลบข้อมูล ลบคนนี้ออก ขีดฆ่าทิ้ง เดี๋ยวนะคะ ขีดฆ่าทิ้ง สิ่งไหนที่หายไปบ้าง แน่นอน สาขาเชียงใหม่จะหายไปด้วย สมมตินะคะ ถ้าสมมติเราอยู่ด้วยกัน แต่ถ้าสมมติพนักงานคนนี้ลาออก สาขาเชียงใหม่ยังอยู่ไหม ยังอยู่นะคะ ซึ่งแตกต่างจากด้านล่างนะคะ ด้านล่าง เห็นไหมคะ ว่าถ้าสมมติว่าอาจารย์ลบทิ้งหมดเลย ลบทิ้งหมดนี่ กากบาททิ้ง สาขาเชียงใหม่หายไปด้วย อันนี้คือการออกแบบที่ไม่ดีนะคะ เหมือนลบคนข้างล่าง คนนี้ออก สาขาพิษณุโลกก็หายไปด้วย แต่ถ้าเป็นตารางด้านบนนะคะ ถ้าคนนี้ลาออก สาขายังอยู่ไหม ยังอยู่เหมือนเดิมนะคะ อันนี้คือการออกแบบฐานข้อมูลที่ดี ถ้าข้อมูลตัวไหนที่มันมีผลกระทบต่อกัน เราจะต้องแยกตารางออกนะคะ ตัวอย่างนะคะ ถ้าการออกแบบที่ดีนี่ เราจะลดปัญหาความซ้ำซ้อนกันของข้อมูลออกได้นะคะ อย่างเช่นตรงนี้ อันนี้เป็นตารางที่ออกแบบที่ไม่ดีนะคะ เห็นไหมคะ ว่ามันจะมีรหัสสาขา แล้วก็ที่อยู่ ถ้าสมมติว่าอาจารย์เพิ่มเข้ามาใหม่อีก 1 คนนะคะ เป็น EM10 ตรงนี้นะคะ ถ้าต้องการเพิ่มพนักงานสาขาเชียงใหม่ อาจารย์ก็ต้องมากรอกข้อมูลตรงนี้อีก ว่าเชียงใหม่นะ โน่นนี่นั่นโน่นนะคะ แต่ถ้าเป็นการออกแบบฐานข้อมูลที่ดีนี่ เราแค่ใส่รหัสสาขานะคะ ไม่จำเป็นจะต้องพิมพ์ที่อยู่ทุกครั้งก็ได้นะคะ เหมือนเวลาคุณไปธนาคารใช่ไหมคะ คุณก็แค่ยื่นบัตรประชาชน พนักงานธนาคารก็จะกรอกเลขบัตรประชาชนคุณลงไปนะคะ หรืออาจจะเอาชิปการ์ดของคุณเสียบเข้าไปในเครื่อง ถามว่าตอนนี้เราได้กรอกข้อมูลไหม ไม่ต้อง นะคะ ขอแค่มีเลขบัตรประชาชน ข้อมูลทุกอย่างที่คุณมี เขาจะดึงออกมาจากระบบให้เลย เราไม่ต้องมาเสียเวลากรอกนะคะ เหมือนเมื่อก่อนนี่ ต้องเขียนใส่กระดาษ เลขบัตรประชาชนอะไร ชื่ออะไร นามสกุลอะไร ที่อยู่ที่ไหน เบอร์โทรศัพท์อะไร เดี๋ยวนี้ไม่ต้องเลย ขอแค่มข้อมูลทุกอย่างเราสามารถดึงขึ้นมาได้อยู่แล้วนะคะ อันนี้ก็เช่นเดียวกันถ้ากรอกข้อมูลแบบไม่ดีนี่ เราต้องกรอกข้อมูลทุกช่องทุกช่องเลยนี่ คนเดียว ไม่เดือดร้อนค่ะ แต่ถ้าเป็พนักงานใหม่ เป็นเหมือนโรงงานน่ะค่ะ ทีละ 1,000 คน ต้องนั่งกรอก เชียงใหม่เป็นพัน ๆ ครั้งนี่ เสียเวลามาก ๆ นะคะ อันนี้คือการออกแบบที่ไม่ดีนะคะ กับอีกอย่างหนึ่ง ถ้าสมมติว่าเมื่อกี้อาจารย์เพิ่มพนักงานแล้ว ถ้าอาจารย์อยากเพิ่มแค่สาขา นะคะ อยากเพิ่มแค่สาขา ซึ่งในตารางนี้ คีย์หลัก จำได้ไหมคะ คีย์หลักจะเป็นคีย์ที่ขีดเส้นใต้ ซึ่งอาจารย์อยากเพิ่มสาขา สมมติอาจารย์จะเพิ่ม B100 สกลนคร สกลนครนะคะ ถามว่าเพิ่มได้ไหม อาจจะเป็นการตั้งสาขา แต่ยังไม่มีพนักงานหรอกนะคะ ถ้าจากตารางนี้นะคะ เราจะเพิ่มเฉพาะชื่อสาขาไม่ได้ เนื่องจากเรายังไม่มีรหัสพนักงาน เพราะรหัสพนักงานเป็นคีย์หลักนะคะ คีย์หลัก คือ คุณสมบัติมัน คือ เป็นค่าว่างไม่ได้นะคะ อันนี้ก็ทำให้เราเพิ่มสาขาไม่ได้ เพราะเราไม่มีพนักงาน อันนี้ก็เป็นข้อผิดพลาดในการเพิ่มข้อมูล ถ้าเราออกแบบตารางแบบนี้นะคะ นี่ก็คือปัญญาที่เกิดขึ้นจากการออกแบบตารางไม่ดี กับปัญหาต่อมา เป็นปัญหาการลบข้อมูล อย่างที่อาจารย์บอก นะคะ ถ้าพนักงานคนนี้ลาออก สาขาเชียงใหม่หายไปด้วยนะคะ โดนลบไป กรณีความผิดพลาดจากการเปลี่ยนแปลงนะคะ เหมือน B003 นี่ค่ะ เป็นกรุงเทพฯ ใช่ไหมคะ แล้วคราวนี้ข้อมูลมันอยู่ในตารางเดียวกัน ถ้านักศึกษาจะแก้ สมมติว่าเราย้ายจากรุงเทพฯ ไปอยู่นนทบุรี สมมติมีพนักงาน 3,000 คน คุณต้องแก้กรุงเทพฯ 3,000 ครั้ง เป็นนนทบุรีนะคะ ถ้าพนักงานมี คน 2 คน ไม่ใช้ปัญหาค่ะ แต่ถ้าคุณเป็นโรงงานขนาดใหญ่ นั่งแก้ทีละ 3,000 คน ไม่ใช่เรื่องสนุกแน่ ๆ นะคะ อันนี้ก็เป็นปัญหานะคะ เพราะฉะนั้น เราควรแยกตารางพนักงานกับตารางสาขาออกจากกันนะคะ นี่เป็นเหตุผล อันนี้คือข้อมูลขนาดเล็กนะคะ เรายังเห็นปัญหาขนาดนี้ สมมติถ้าเป็นองค์กรขนาดใหญ่ เป็นบริษัท เป็นโรงงาน หรือระดับโรงเรียน มีนักเรียน 2-3 ร้อย หรือ 2-3 พันคนก็ได้นะคะ มันก็จะมีปัญหาเยอะมาก ถ้าสมมติว่าเราจัดตารางไม่ดีนะคะ จากปัญหาที่เกิดขึ้นเมื่อกี้นะคะ ก็อย่างที่บอกค่ะ เราจะแก้ปัญหาโดยการแยกตารางออกเป็น 2 ตารางแบบนี้นะคะ ฟังก์ชันการขึ้นต่อกัน เดี๋ยวจะเป็นเกี่ยวกับตารางหนึ่งมีผลกับอีกตารางหนึ่ง การขึ้นต่อกัน เดี๋ยวดูตัวอย่างเลยแล้วกันนะคะ อย่างเช่น ตารางนี้นะคะ ดูจากรหัสพนักงานนะคะ เราจะเห็นได้ว่ารหัสพนักงานจะส่งผลกับชื่อตำแหน่ง สัญลักษณ์ของการขึ้นต่อกันนะคะ อันไหนเป็นตัวหลักจะชี้ไปที่ตัวรองนะคะ ตามหัวลูกศรเลย ดูทิศทางตามหัวลูกศรนะคะ อันไหนเป็นตัวหลัก อันไหนเป็นตัวรองนะคะ อย่างเช่น ตัวนี้ ถามว่าตำแหน่งมาชี้ที่รหัสพนักงานได้ไหม นะคะ ถามว่า ไม่ได้นะคะ เพราะการขึ้นต่อกันจะต้องเป็นลักษณะ 1 ต่อ 1 เท่านั้น นะคะ เป็น 1 ต่อ กลุ่ม ไม่ได้ ชนิดของการขึ้นต่อกันนะคะ จะมีอยู่ 4 ชนิดนะคะ ชนิดแรก เป็นการขึ้นต่อกันโดยสมบูรณ์นะคะ ซึ่งอาจจะเป็นเกี่ยวกับตารางนะคะ จะมีคอลัมน์ 1 คอลัมน์ หรือมากกว่า 1 คอมลัมน์ มาประกอบกันนะคะ โดยในคอลัมน์นั้น ๆ นี่จะบรรจุค่าที่ระบุความพิเศษความพิเศษของแถวแถวหนึ่งได้อย่างชัดเจนนะคะ ก็คือ Attribute Attribute 1 นี่ 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 มันซ้ำกันได้ล่ะ โน่นนี่นั่นโน่น แต่รหัสวิชาเขาไม่ซ้ำกันเห็นไหมคะ 1 NF นี่ ง่ายมากค่ะ ข้อมูลถ้ามันเป็นก้อนแบบนี้ เรากระจายมันออกเป็นบรรทัด ๆ เลย แค่นั้นเอง อย่างน้อยในข้อสอบ ต้องทำ 1NF ให้ได้ เพราะมันง่ายที่สุดแล้วนะคะ อย่างเช่น ตัวนี้นะคะ ก็กระจายออกมา แล้วคราวนี้ ถ้าเรากระจายข้อมูลเรียบร้อยแล้วนะคะ ก็จะมาดูว่า อย่างในตารางนี้น่ะค่ะ มันมีตารางเป็นของพนักงานใช่ไหมคะ เขาจะมีคีย์หลัก 1 ตัวแล้ว แต่ว่ามันยังมีตัวนี้ค่ะ ตัวที่ 1 ตัวที่ 2 ที่มีคุณสมบัติเป็นคีย์หลักได้ เราต้องแยกมันออกนะคะ กระบวนการนะคะ ดูก่อนว่า นี่ ตารางเมื่อกี้นะคะ สิ่งที่ขึ้นตรงกับคีย์หลักตัวนี้นะคะ ก็จะเป็นตัวที่ 1 ตัวที่ 2ตัวที่ 3 สังเกตแล้วว่าคีย์หลักมีตัวเดียว แต่ข้อมูลมีเยอะมากนะคะ เราแยกออกมาได้อันแรกเลย ก็จะมีรหัสโพรเจกต์นะคะ แล้วก็ชื่อโพรเจกต์ ใครเป็นผู้จัดการ เงินเดือนเท่าไร งบประมาณเท่าไรนะคะ อันนี้คือมันจะเชื่อมโยงกับข้อมูลที่เป็นคีย์หลัก ก็คือโพรเจกต์โค้ด ตัวนี้นะคะ ส่วนตัวนี้ เป็นคีย์คู่แข่ง 2 ตัว นะคะ 2 ตัวนี่ มันสามารถทำหน้าที่เป็นคีย์หลักให้กับอย่างตัวนี้นะคะ มันจะเป็นคีย์หลักให้กับชื่อของพนักงาน อย่างตัวนี้ ก็จะเป็นคีย์หลักสำหรับชื่อแผนกนะคะ ถามว่ามันขึ้นตรงกับ Project Code ไหม ไม่นะคะ เพราะฉะนั้น การทำขั้นตอนต่อมานะคะ 2NF ขั้นตอนที่ 1 เราจะต้องทำ 1NF มาเรียบร้อยแล้ว ซึ่งง่ายมากนะคะ แล้วก็ต้องมาตัดของการขึ้นบางส่วนออกนะคะ ก็คือการกำจัด Attribute ที่ไม่ขึ้นกับคีย์หลักของตารางนั้น ๆ นั่นเอง กำจัดออกนะคะ อย่างเช่น ตัวนี้นะคะ การขึ้นต่อกันบางส่วน จะเห็นได้ว่ารหัสวิชากับชื่อวิชามันไม่ขึ้นตรงกับรหัสนักศึกษาใช่ไหมคะ อันนี้จำได้นะ รูปเดิมนะคะ รูปเดิม วิธีกำจัดปัญหา เราก็ดึงสิ่งที่มันเป็นปัญหาค่ะ สิ่งที่มันไม่ขึ้นตรงกับคีย์หลักตัวนั้น ไปสร้างตารางใหม่ สร้างตารางเพิ่มนะคะ เอาสิ่งที่เป็นปัญหาออกมา ไปใส่ตารางใหม่ กำหนดคีย์หลักใหม่นะคะ ในตารางเดิมนะคะ เราก็เอาคีย์หลักของตารางใหม่ไปใส่ แค่นั้นเองนะคะ วิธีการ ก็คือเหมือนรูปนี้นะคะ สิ่งที่เป็นปัญหาที่อาจารย์ยกตัวอย่าง คือ รหัสวิชากับชื่อวิชานะคะ เพราะรหัสวิชามันไม่ได้ขึ้นตรงกับรหัสนักศึกษานะคะ เพราะฉะนั้น ไอ้ 2 ตัวนี้ คือ สิ่งที่เป็นปัญหานะคะ วิธีการแก้ปัญหา คือ เราสร้างตารางผลการเรียนใหม่ สร้างตารางวิชาใหม่ นี่ เห็นไหมคะ ในตารางใหม่ เราจะตัดชื่อวิชาออก แต่ต้องเหลือรหัสวิชาไว้ เพื่อให้ไปเชื่อมโยงว่ารหัสวิชานี้ มันชื่อวิชาอะไร จากอีกตารางหนึ่ง แค่นั้นเองนะคะ โอเคค่ะ อันนี้เป็นตัวอย่างของการปรับบรรทัดฐาน ในรูปแบบของ 2NF นะคะ แต่เดี๋ยวอันนี้ จะให้ทำเป็นการบ้าน เดี๋ยวค่อยย้อนกลับมาแล้วกันนะคะ เดี๋ยวค่อยย้อนมาสั่ง อันนี้เป็น 1NF นะคะ อันนี้ก็แก้แล้ว ตารางเมื่อกี้นะคะ ต่อมา ขั้นตอนสุดท้ายนะคะ 3NF นะคะ โดยความสัมพันธ์นะคะ ก่อนที่จะทำเป็น 3NF ได้ จะต้องทำเป็น 2NF มาก่อน หลักของการทำขั้นตอนที่ 3 คือ ต้องเอาความสัมพันธ์ที่ไม่ใช่คีย์หลักออกนะคะ เช่น ไม่ใช่คีย์หลักแต่ไปมีผลกับคอลัมน์อื่น ไม่ได้นะคะ ไม่ได้ วิธีการแก้ปัญหา เช่นเดิมค่ะ สร้างตารางใหม่ขึ้นมาแก้ปัญหานั้น ๆ นะคะ อย่างเช่น ในตัวอย่างนะคะ รหัสพนักงานนะคะ ชื่อ สกุล รหัสแผนก ชื่อแผนก เงินเดือน จะเห็นได้ว่าในตารางนี้ คีย์หลัก คือ รหัสพนักงานนะคะ แต่มันมีรหัสแผนก กับชื่อแผนกติดมาด้วย ซึ่งมันไม่ได้เกี่ยวกับรหัสพนักงานเลยนะคะ วิธีการแก้ปัญหา ก็คือเอารหัสแผนกกับชื่อแผนกไปสร้างตารางใหม่ แต่ต้องยังคงรหัสแผนกไว้ในตารางเดิมนะคะ เพื่อให้มันเชื่อมโยงได้ว่า ไอ้รหัส A001 นี่คือแผนกอะไรนะคะ อันนี้คือการแก้ปัญหา ไม่ใช่คีย์หลัก แต่ไปส่งผลกับคอมลัมน์อื่นในตารางนะคะ อันนี้คือ 3 NF จริง ๆ แล้วอยากให้ลองทำในห้องมากกว่า แต่ด้วยสัปดาห์นี้มันมีข้อกำจัดนะ ก็ไม่เป็นไรนะคะ อันนี้เป็นตัวอย่างนะคะ สรุปนะคะ วิธีการทำ Normalization หรือว่าการปรับบรรทัดฐานนะคะ 1 NF ก็คือ ทุก ๆ Attribute นะคะ ก็คือทุก ๆ คอลัมน์ในแต่ละแถว จะต้องมีค่าของข้อมูลเพียงค่าเดียวเท่านั้นนะคะ อย่างเช่น เหมือนเวลาเรากรอกเบอรโทรศัพท์ เรามีโทรศัพท์ 3 เบอร์ก็จริง แต่เราจะกรอกได้แค่เบอร์เดียวนะคะ ถ้าอยากใส่เบอร์ที่ 2 ที่ 3 ก็ต้องเพิ่มข้อมูลแถวใหม่ขึ้นมานะคะ ต่อมา 2NF นะคะ ก็ ปัญหา ก็คือถ้ามีข้อมูลนะคะ ข้อมูลในทุกตัวในตารางนั้น จะต้องขึ้นกับคีย์หลักของตารางตัวเดียวเท่านั้นนะคะ ข้อที่ 3 ถ้า คอลัมน์ไหนที่ไม่ใช่คีย์หลักนะคะ จะมาส่งผลกับคอลัมน์อื่นในตารางไม่ได้นะคะ เพราะฉะนั้น ไอ้ตาราง ข้อ 1 นี่ คือ แค่กระจายตาราง อันที่ 2 อันที่ 3 ถ้ามีปัญญาปุ๊บเราต้องสร้างตารางใหม่นะคะ การบ้าน เอาอย่างนี้ดีกว่านะคะ อาจารย์จะให้ทำ น่าจะส่งวันนี้ เอาแค่ข้อเดียวนะคะ ข้อเดียวพอ เพราะว่าจริง ๆ อยากให้ทำในห้อง เดี๋ยวสัปดาห์หน้าให้ทำในห้องนะค ะ แต่อันนี้จะให้ลองทำดูก่อน ว่าที่เรียนไปวันนี้เข้าใจไหมนะคะ ถ้าทำเสร็จแล้วก็ค่อยเอามาส่งที่ตู้ส่งงานอาจารย์ เอาเฉพาะข้อนี้นะ ข้อเดียว ข้อเดียวพอ วันนี้ข้อเดียวพอนะคะ ส่งในเวลานี่ล่ะ ให้ลองทำดูว่าเข้าใจไหม ข้อนี้ทำ 1NF ทำ 1NF ทำอย่างไร ง่ายมาก ๆ เลยนะคะ นี่ อาจารย์เว้นช่องว่างให้แล้ว เติมมานะคะ 2 NF คุณเห็นไหมว่า นี่ มันมีรหัสวิชานี่ ชื่อวิชานี่ ต้องทำอย่างไรกับมันนะคะ แยกมันออกมาสิ แยกอย่างไรนะคะ เอาข้อเดียวก่อน แล้วลองส่งมาให้อาจารย์ดูก่อน ว่าเข้าใจมากน้อยขนาดไหนนะคะ จริง ๆ อยากให้เรียนในห้องมากกว่า แต่วันนี้ก็เอาประมาณนี้ก่อนแล้วกันนะคะ ให้ทุกคนหายดี กลับมา อาทิตย์หน้าค่อยเดินดูในห้องดีกว่านะคะ วันนี้ก็จะประมาณนี้นะคะ เดี๋ยวเวลาที่เหลือให้ทำข้อนี้แล้วมาส่งวันนี้เลย ยิ่งดีนะคะ เวลาที่เหลือทำใส่กระดาษมาส่งอาจารย์แล้วกันนะ ก็ประมาณนี้ค่ะ เวลาที่เหลือทำให้เสร็จภายในวันนี้นะคะ ข้อเดียวเองนะคะ ข้อเดียว มีใครสงสัยไหมคะ ปุ๋ยสงสัยไหม ปุ๋ยเปิดไมค์ได้เหลือเปล่า // ไม่มีค่ะ อาจารย์ เดี๋ยวถ้าอย่างไร เดี๋ยวให้อุบลไปส่ง หรืออย่างไรคะ อุบลกลับหอแล้วน่ะค่ะ (อาจารย์เกวลี) อ๋อ ส่วนมากอยู่ไหนกันอยู่หอหรืออยู่ DSS // ตอนนี้เหลืออยู่ DSS ประมาณ 4 คนค่ะ (อาจารย์เกวลี)ก็รวม ๆ เท่าไรได้ก็เอามา (นักศึกษาหญิง) ค่ะ ๆ ๆ ๆ (อาจารย์เกวลี) ก็ให้เด็กทำนั่นแหละ โอเค Thank you (อาจารย์เกวลี) ค่ะ วันนี้ก็ประมาณนี้ค่ะ ขอบคุณทุกคนมากนะคะ ที่ยังตั้งใจเรียนกันอยู่ ถ้าใครทำเสร็จก็ทำให้เสร็จแล้วฝากเพื่อนมากส่ง รวมกันมาส่งก็ได้นะคะ ถ้าใครอยู่หอก็มาทำอยู่ที่ DSS ก็ได้ มาส่งที่โต๊ะอาจารย์ก็ได้นะคะ โอเคค่ะ วันนี้ก็ประมาณนี้ค่ะ ขอบคุณล่ามด้วยนะคะ ค่ะ ขอบคุณค่ะ ปุ๋ย วันนี้ครบนะ ปุ๋ยไปแล้ว โอเค