(อาจารย์เกวลี) เดี๋ยวเริ่มเลยก็ได้ค่ะ โอเค น่าจะประมาณนี้นะคะ วันนี้จะเป็นบทที่ 5 เกี่ยวกับกระบวนการปรับบรรทัดฐาน ภาษาอังกฤษก็จะเป็นnormaliเนื้อหาวันนี้ก็จะมีจุดมุ่งหมายของการทำ Nomanlizationจะเกี่ยวกับฟังก์ชันการขึ้นต่อกัน แล้วก็หลักการขึ้น normalด้วยนะคะ มีอยู่ 3 ข้อวันนี้โดยการปรับมาตรฐานหรือ Noมันจะเป็นทฤษฎีที่คนออกแบบฐานข้อมูลมาแปลงข้อมูลจากรูปที่ซับซ้อนนะคะ ให้มันง่าย เข้าใจก้งาน นำไปใช้งานก็ง่าย แล้วต้องเป็นระบบที่หลังจากออกแบบแล้ว แล้วนำไปใช้งานจริงต้องเกิดปัญหาน้อยที่สึเโดยกระบวนการทำงานนะคะ ในการปรับบรรทัดฐานนี่มันจะมี 3 ระดับนะคะ จริง ๆ เราก็จะเรียกสะ้น ๆ ระดับแรกจะเรียกว่นะคะ 2NF 3NF นะคะ ในระดับปริญญาตรีนี่ถึง 3NF ได้ก็ถือว่าเก่งมากแล้วแต่ถ้าเป็นระดับที่สูงขึ้นไปอีก ก็จะได้ถึง 5NFนะคะ อันนี้เป็นแผนภาพกระบวนการทำงานนะคะ ก่อนเราจะมาทำแผนภาพปรับบรรทัดฐานได้นี่ มันก็ต้องวิเคราะห์การใช้งานของผู้ใช้งานก่อนเขาต้องการระบบจัดการฐานข้อมูลแบบไหน ต้องการใช้ตารางกี่ตารางในฐานข้อมูลนะคะ หลังจากนั้นก็จะมาวาดรูปเหมือนที่เราเรียนอาทิตย์ที่แล้วนะคะ มาวาดเป็นแผนถาพ ให้เข้าใจว่าสิ่งที่เรากำลังจะออกแบบหรือสิ่งที่เรากำลังจะทำฐานข้อมูลนี่ ตรงตามความต้องการหรือเปล่านะคะ แต่รูปแบบของรูปที่เราวาดอาทิตย์ที่แล้วนี่ จะยังเป็นรูปแบบที่ที่เป็นบรรทัดฐานหรือว่ายังไม่ได้มีการจัดระเบียบความคิดที่มันซับซ้อนคีย์หลักที่มันทับซ้อนกันนะคะ เราก็เลยจะต้องเอาข้อมูลจากที่เราวาดอาทิตย์ที่แล้วนี่มาเข้าสู่กระบวนการปรับบรรทัดฐานก่อน ซึี่งอย่างที่บอกเราทำแค่ถึง 3 NF นี่ก็ถือว่าเก่งมากแล้วแต่อย่างน้อยต้องถึง 3 นะคะ ไอ้บอยด์ คอดด์กไม่ทำก็ละไว้ได้นะคะ แต่อย่างน้อยต้องถึง 3 นะคะ โดยวัตถุประสงค์ของการปรับบรรทัดฐานนะคะ แน่นอนลดความซ้ำซ้อนกันของข้อมูลก็ถือถ้าข้อมูลมันซ้ำกันนี่เราต้องตัดออกไป เพราะถ้าซ้ำกันมันยิ่งซ้พกันมากเท่าไร เนือ้หา และพื้นที่ในการเก็บข้อมูลมันเยอะ แล้วก็สิ้นเปลืองงบประมาณด้วยเหมือนกันรวมถึงลดปัญหาความไม่ถูกต้องของข้อมูลนะคะ ข้อมูลนี่นอกจากจะไม่เกิดความซ้ำซ้อนกันแล้วนี่ มันยังเกิดจากสาเหตุอื่นคือ ถ้าเหมือนที่อาจารย์เคยยกตัวอย่าง ก็คือถ้าเราเก็บข้อมูลหลาย ๆ ที่อย่างนักศึกษาเก็บข้อมูลที่คณะด้วย ที่มหาวิทลัยเก็บที่มหาวิทยาลัยด้วย เก็บที่สาขาด้วย วันหนึ่งคุณอาจจะเปลี่ยนแปลงเบอร์โทรศัพท์ที่บ้านเราก็ต้องไปตามเปลี่ยนทุกที่เลยนะคะ ซึ่งเสียเวลาแล้วคราวนี้ก็จะเป็นที่เถียงกันว่าเบอร์ไหนถูก เบอร์ไหนผิดนะคะ โดยวัตถุประสงค์ของการปรับบรรทัดฐานนี่ ข้อมูลอาจจะเก็บที่แหล่งเนะคะ เก็บอยู่ที่เดียว แต่สามารถเรียนใช้งานหลาย ๆ ที่ พร้อม ๆ กันได้นะคะ แต่ถ้ามันมีการเปลี่ยนแปลงข้อมูล มีการลบหรือการเพิ่มเป็นปัจจุบันที่สุด เราจึงเก็บข้อมูลไว้ที่เดียวมีแก้ไขก็ที่เดียวนะคะ เพราะฉะนั้น ข้อมูลถูกต้องก็เป็นปัจจุบันด้วยแล้วก็อย่างที่ให้เหตุผลเมื่อกี้นี้นะคะ การเก็บข้อมูลที่เดียวนี่ มันก็จะลดการผิดพลาด การเปลี่ยนแปลงข้อมูล ปรับปรุงข้อมูล อย่างที่บอก ก็คือเปลี่ยนเบอร์โทรศัพท์หรือว่าเปลี่ยนบ้านเลขที่ ก็เปลี่ยนแปลงที่เดียวเราสามารถเรียกใช้ข้อมูลได้ทุกที่นะคะ ความซ้ำซ้อนกันของข้อมูลนี่ผิดพลาดของการปรับปรุงของข้อมูลนะคะ แนวคิดของการออกแบบฐานข้อมูลนี่ ก็คือการออกแบบข้อมูลที่ซ้ำซ้อนกันน้อยที่สุดนะคะ เพื่อประหยัดพื้นที่มนก่ารแล้วก็ลดปัญหาที่เกิดขึ้น ถ้าข้อมูลมันซ้ำซอนมากเกินไปหรือปริมาณข้อมูลมีเยอะเกินไปนะคะ อย่างเช่นตัวอย่างนะคะ ตารางด้านบน ตารางสีเทาด้านบน จะเป็นการออกแบบฐานข้อมูลที่ดีเดี๋ยวจะมาให้ดูว่าทำไมมันถึงดีกว่าในตารางข้อมูลนี่มันจะมีตารางของพนักงานและตารางสาขานะคะ จะเห็นได้ว่าตารางพนักงานนี่ จะมีส่วนหนึ่งที่เป็นรหัสสาขาห้อยไว้อยู่ ถามว่าทำไมไม่เอาข้อมูลสาขามาไว้ในตารางพนักงานทีเดียวเลยล่ะ ทำไมต้องแยกออกนะคะ อย่างถ้านักศึกษาดูคนแรกนะคะ ดูคนแรก รหัสสาขาB005ก็คือสาขาเชียงใหม่ถ้าสมมติว่าพนักงานคนที่ 1 ลาออกก็จะมีการลบข้อมูลเกิดขึ้นใช่ไหมคะ มีการลบข้อมูล ลบคนนี้ออกขีดฆ่าทิ้ง เดี๋ยวนะคะ ขีดฆ่าทิ้ง สิ่งไหนที่หายไปบ้างแน่นอนสาขาเชียงใหม่จะหายไปด้วย สมมตินะคะ ถ้าสมมติเราอยู่ด้วยกัน ถ้าสมมติพนักงานคนนี้ลาออกสาขาเชียงใหม่ยังอยู่ไหม ยังอยู่นะคะ ซึ่งแตกต่างจากด้านล่างนะคะ ด้านล่าง เห็นไหมคะ ว่าถ้าสมมติว่าอาจารย์ลบทิ้งหมดเลยลบทิ้งหมดนี่กากบาททิ้งสาขาเชียงใหม่หายไปด้วยอันนี้คือการออกแบบที่ไม่ดีนะคะ เหมือนว่าคนข้างล่าง คนนี้ออกสาขาพิษณุโลกก็หายไปด้วยแต่ถ้าเป็นตารางด้านบนนะคะ ถ้าคนนี้ลาออก สาขายังอยู่ไหม ยังอยู่เหมือนเดิมนะคะ อันนี้คือการออกแบบฐานข้อมูลที่ดี ถ้าข้อมูลตัวไหนที่มันมีผลกระทบต่อกันเราจะต้องแยกตารางออกนะคะ ตัวอย่างนะคะ ถ้าการออกแบบที่ดีจะลดปัญหาความซ้ำซ้อนกันของข้อมูลออกได้นะคะ อย่างเช่นตรงนี้ อันนี้เป็นตารางที่ออกแบบไม่ดีนะคะ เห็นไหมคะ ว่ามันจะมีรหัสสาขา แล้วก็ที่อยู่ อยู่ในตารางเดียวกันถ้าสมมติว่าอาจารย์เพิ่มเข้ามาใหม่อีก 1 คนนะคะ เป็น EM 10 ตรงนี้นะคะ ถ้าอาจารย์ต้องการเพิ่มพนักงานสาขาเชียงใหม่ อาจารย์ก็ต้องมากรอกข้อมูลตรงนี้อีกว่าเชียงใหม่นะ โน่นนี่นั่นโน่นนะคะ แต่ถ้าเป็นการออกแบบฐานข้อมูลที่ดีนี่เราแค่ใส่รหัสสาขานะคะ ไม่จำเป็นจะต้องพิมพ์ที่อยู่ทุกครั้งก็ได้นะคะ เหมือนเวลาคุรไปธนาคารใช่ไหมคะ คึณก็แค่ยื่นบตรัพนักงานธนาคารก็จะกรอกเลขบัตรประชาชนคุณลงไปนะคะ หรืออาจจะเอาชิปการ์ดของคุณเสียบเข้าไปในเครื่อง ถามว่าตอนนี้เราได้กรอกข้อมูลไหม ไม่ต้องขอแค่มีเลขบัตรประชาชน ข้อมูลทุกอย่างที่คุณมีเขาจะดึงออกมาจากระบบให้เลย เราไม่ต้องเสียเวลากรอกนะคะ เหมือนเมื่อก่อนนี่ต้องเขียนใส่กระดาษเลขบัตรประชาชนอะไรที่อยู่ที่ไหน เบอร์โทรศัพท์อะไร เด๋ยวนี้ไม่้องเลย ขอแค่มข้อมูลทุกอย่างเราสามารถดึงขึ้นมาได้อยู่แล้วนะคะ อันนี้ก็เช่นเดียวกันถ้ากรอกข้อมูลแบบไม่ดีนี่เราต้องกรอกข้อมูลทุกช่องทุกช่องเลยนี่คนเดียว ไม่เดือดร้อนค่ะ แต่ถ้าเป็พนักงานใหม่เป็นเหมือนโรงงานน่ะค่ะ ทีละ 1,000 คน ต้องนั่งกรอกเชียงใหม่เป็นพัน ๆ ครั้งนี่ เสียเวลามาก ๆ นะคะ อันนี้คือการออกแบบที่ไม่ดีนะคะ กับอีกอย่างหนึ่ง ถ้าสมมติว่าเมื่อกี้อาจารย์เพิ่มพนักงานแล้ว ถ้าอาจารย์อยากเพิ่มแค่สาขานะคะ อยากเพิ่มแค่สาขาซึ่งในตารางนี้ คีย์หลัก จำได้ไหมคะ จะเป็นคีย์ที่ขีดเส้นใต้ซึ่งอาจารย์อยากเพิ่มสาขา สมมติอาจารย์เพิ่มB100 สกลนครสกลนครนะคะ เพิ่มได้ไหม อาจจะเป็นการตั้งสาขา แต่ยังไม่มีพนักงานหรอกนะคะ ถ้าจากตารางนี้นะคะ เราจะเพิ่มเฉพาะชื่อสาขาไม่ได้ เนื่องจากเรายังไม่มีรหัสพนักงาน เพราะรหัสพนักงานเป็นคีย์หลักคีย์หลัก คือ คุณสมบัติมัน คือ เป็นค่าว่างไม่ได้นะคะ อันนี้จะทำให้เราเพิ่มสาขาไม่ได้ เพราะเราไม่มีพนักงาน อันนี้ก็เป็นข้อผิดพลาดในการเพิ่มข้อมูลถ้าเราออกแบบตารางแบบนี้นะคะ นี่ก็คือปัญญาที่เกิดขึ้นจากการออกแบบไม่ดีกับปัญหาต่อมา เป็นปัญหาการลบข้อมูลอย่างที่อาจารย์บอกคนนี้ลาออก สาขาเชียงใหม่หายไปด้วยนะคะ โดนลบไป กรณีความผิดพลาดจากการเปลี่ยนแปลงนะคะ เหมือน B003 นี่ค่ะ เป็นกรุงเทพฯใช่ไหมคะ แล้วคราวนี้ข้อมูลมันอยู่ในตารางเดียวกัน ถ้านักศึกษาจะแก้ สมมติว่าเราย้ายจากรุงเทพฯ ไปอยู่นนทบุรีสมมติมีพนักงาน 3,000 คนคุณต้องแก้กรุงเทพฯ 3000 ครั้งเป็นนนทบุรีนะคะ ถ้าพนักงานมี คน 2 คน ไม่ใช้ปัญหาค่ะ แต่ถ้าเป็นโรงงานขนาดใหญ่ นั่งแก้ทีละ 3,000 คน ไม่ใช่เรื่องสนุกแน่ ๆ นะคะ แน่ ๆ นะคะ อันนี้ก็เป็นปัญหานะคะ เพราะฉะนั้นเราควรแยกตารางพนักงานกับตารางสาขาออกจากกันนะคะ นี่คือเหตุผลข้อมูลขนาดเล็กนะคะ เรายังเห็นปัญหาขนาดนี้ สมมติถ้าเป็นองค์กรขนาดใหญ่ เป็นบริษัท เป็นโรงงาน หรือระดับโรงเรียนมีนักเรียน 2-3 ร้อย หรือ 2-3 พันคนก็ได้นะคะ มันก็จะมีปัญหาเยอะมาก ถ้าเกิดเราจัดตารางไม่ดีนะคะ จากปัญหาที่เกิดขึ้นเมื่อกี้อย่างที่บอกค่ะ เราจะแก้ปัญหาโดยการแยกหตารางเป็น 2 ตรชารางแบบนี้นะคะ การขึ้นต่อกัน เดี๋ยวจะเป็นเกี่ยวกับตารางหนึ่งมีผลกับอีกตารางหนึ่ง เราเรียกฟังก์ชันที่มีการขึ้นต่อกันเดี๋ยวดูตัวอย่างเลยแล้วกันนะคะ อย่างเช่น ตารางนี้นะคะ ดูจากรหัสพนักงานนะคะ เราจะเห็นได้ว่ารหัสพนักงานจะส่งผลกับชื่อตำแหน่งสัญลักษณ์ของการขึ้นต่อกันนะคะ อันไหนเป็นตัวหลัจะชี้ไปที่ตัวรองตามหัวลูกศรเลยดูทิศทางตามหัวลูกศรนะคะ อันไหนเป็นตัวหลักอันไหนเป็นตัวรองนะคะ อย่างเช่น ตัวนี้ถามว่าตำแหน่งมาชี้ที่รหัสพนักงานได้ไหม นะคะ ถามว่าไม่ได้นะคะ เพราะการขึ้นต่อกันจะต้องเป็นลักษณะ 1 ต่อ 1เท่านั้น นะคะ เป็น1 ต่อกลุ่ม ไม่ได้ชนิดของการขึ้นต่อกันนะคะ จะมีอยู่ 4 ชนิดนะคะ ชนิดแรกเป็นการขึ้นต่อกันโดยสมบูรณ์นะคะ ซึ่งอาจจะเป็นเกี่ยวกับตารางนะคะ จะมีคอลัมน์ 1 คอลัมน์หรือมากกว่า 1 คอมลัมน์มาประกอบกัน โดยใน 1 ค่านั้น ๆ จะบรรจุค่าที่ระบุความพิเศษความพิเศษของแถวแถวหนึ่งได้อย่างชัดเจนนะคะ ก็คือ Attribute Attribute 1 นี่Record แถว ๆ นั้นนี่ จะมีลักษณะพิเศษอย่างไรนะคะ โดยในทุกความสัมพันธ์นี่จะต้องระบุค่าคีย์หลักไว้ด้วย ซึ่งคียืหลักนี่คือเป็นค่าเอกลักษณ์ ไม่ซ้กกันอยนะคะ อย่างเช่นการขึ้นต่อกันโดยสมบูรณ์อันแรกนะคะ Attribute ที่...จำได้ใช่ไหมคะ คีย์หลักจที่มีขีดเส้นใต้นะคะ คอลัมน์ที่ไม่ใช่คีย์หลักจะขึ้นตรงต่อคอลัมน์ที่เป็นคีย์หลักคอลัมน์เดียวเท่านั้นเช่น เลขบัตรประชาชนตัวนี้จะขึ้น จะเป็นเจ้าของชื่อนี้เท่านั้นนะคะ เพราะฉะนั้นการขึ้นต่อกันโดยสมบูรณ์ จะเป็นแบบ 1 ต่อ 1 นะคะ เลขบัตรประชาชน 1 เลขจะต้องเป็นของคน ๆ เดียวเท่านั้นไม่ใช่ว่าเลขบัตรประชาชนนี้ใช้ 10 คน เป็นไปไม่ได้นะคะ ตัวอย่างนะคะ ตารางที่มีคอลัมน์หลายตัวนะคะ ขึ้นอยู่กับคีย์หลักตัวเดียว เช่น คน 1 คนนี่ข้อมูล ชื่อ นามสกุล วันเกิด ปีเกิด วันที่ทำบัตร ใช่ไหมคะ แต่ว่าเขาจะต้องขึ้นตรงกับเลขบัตรประชาชนเดียวเท่านั้น ถามว่า 3 คนนี้ อาจจะเกิดวันเดียวกันก็ได้ค่ะ ก็ได้ค่ะ แต่เลขบัตรประชาชนเขาไม่เหมือนกันหรือเขาอาจจะมาทำบัตรวันเดียวกันแต่เลขบัตรประชาชนเขาจะไม่ซ้ำกันนะคะ คืออะไร ซ้ำกันได้ทุกอย่างค่ะ ยกเว้นหมายเลขบัตรประชาชนแต่บางตารางนะคะ ก็อาจจะเป็นการรวมตัวกันของคีย์หลักมากกว่า 1 คีย์หลักนะคะ มารวมกันเช่น นักศึกษาคนนี้นะคะ รหัสนักศึกษานี้ลงทะเบียนวิชานี้นะคะ ได้เกรดอะไรนะคะ อันนี้ก็เป็นความสัมพันธ์ที่เกิดขึ้นได้เหมือนกัน ถามว่ารหัสนัซ้ำกันได้ไหม ไม่ซ้ำนะคะ รหัสวิชาซ้ำกันได้ไหม ไม่ซ้ำนะคะ เหมือนชื่อวิชาอาจารย์ก็รหัสหนึ่งชื่ออาจารย์คนอื่น ก็รหัสวิชาอีกอันหนึ่ง อันนี้ไม่ซ้ำกันอยู่แล้วต่อมาขึ้นต่อกันบางส่วน มันก็จะเป็นอาศัยความสัมพันธ์ที่เกิดขึ้นจากคีย์ผสมนะคะ อาจจะเป็นตารางอื่นอาจจะไม่ใช่คีย์หลักก็ได้แต่มันมีความหมายกับอีกคอลัมน์หนึ่งนะคะ เดี๋ยวยกตัวอย่างเลยดีกว่านะคะ อย่างเช่น เมื่อตารางที่อาจารย์ให้ดูเมื่อกี้นะคะ มีรหัสนักศึกษาวิชา มีเกรดแล้วก็มีการบอกด้วยว่ารหัววิชานี้เป็นชื่อวิชาอะไรนะคะ มันจะเป็นการเกิดขึ้น เมื่อคีย์หลักประกอบกันด้วยคอลัมน์หลาย Attribute รวมกันโดยบางส่วนของคีย์หลักสามารถไประบุค่า Attribute อื่นที่ไม่ใช่คีย์หลักได้นะคะ อย่างเช่นในความสัมพันธ์นี้ คีย์หลักจะมี 2 ตัว มีรหัสนักศึกษากับรหัสวิชานะคะ ถามว่าถ้ามีแต่รหัสนักศึกษา เกรดนะคะ รหัสวิชา แล้วเราจะรู้ไหมว่าชื่อวิชาที่เราเรียนไปนี่ ชื่อวิชาอะไรนะคะ เหมือนบางคนรู้รหัสวิชา แต่จำชื่อวิชาไม่ได้ก็มีเพราะฉะนั้น รหัสวิชานี่ ก็สามารถไปส่งผลกับชื่อวิชาเหมือนกันเพราะเป็นตัวระบุว่ารหัสวิชานี้ เป็นชื่อวิชาอะไรนะคะ ก็คือคีย์หลักในตารางนี้มี 2 อัน แต่มีคีย์หลัก 1 ตัวนี้ แต่ไปมีผลกับอีก Attribute หนึ่งได้นะคะ อันนี้คือการขึ้นต่อกันบางส่วนนะคะ อย่างเช่นตัวนี้ก็จะเป็นของจริง ถ้าสมมติว่าอาจาย์ตัดรหออก มีแค่รหัสวิชา มีเกรด มีชื่อวิชาดารเขียนโปปรแกรมแล้วถาม รู้ไหมคะ ว่าเกรด A นี้ของใครไม่รู้นะคะ หรือว่า เดี๋ยวลบอันนี้ออกก่อนนะหรือว่าอาจารย์ลบรหัสวิชาออก เหลือแต่นักศึกษาเหลือเกรด เหลือชื่อวิชา แล้วถามว่าแล้วรหัสวิชาอะไรล่ะที่เราได้เกรด A เราก็ไม่ทราบอีกเหมือนกันนะคะ อันนี้คือการขึ้นต่อกันบางส่วนนะคะ ตัวอย่างนะคะ ต่อมา เป็นการขึ้นต่อกันแบบส่งต่อนะคะ ก็จะเป็นความสัมพันธ์ที่เกิดขึ้นก็ต่อเมื่อ มี Attribute อื่น ๆ ที่ไม่ใช่คีย์หลัก แต่ไปสามารถขึ้น สามารถระบุค่าของ Attribute ใน Record ได้นะคะ ซึ่งเป็นการออกแบบไม่เหมาะสม นะคะ เพราะส่วนใหญ่แล้วในตารางนี่ ถ้าจะระบุค่าอื่นให้คอลัมนือื่นได้ ก็ควรจะต้องเป็นคีย์หลักเท่านั้นนะคะ ดูตัวอย่างนะคะ เช่น ตารางนี้เขาบอกว่าสิ่งที่เกิดขึ้น คือAttribute ก็คือคอลัมน์ที่ไม่ใช่คีย์หลัก หรือ Primary Keyนะคะ ก็คือไม่คอลัมน์ที่มีเส้นขีดนี่ มันไประบุค่าในคอมได้เช่น ตารางนี่คีย์หลักก็คือเลขที่ประจำตัวนะคะ โดยเลขประจำตัวนี้จะไปมีผลกับชื่อ นามสกุล ที่อยู่ ตำแหน่งใช่ไหมคะ แต่คราวนี้ รถประจำตำแหน่งมันไม่ถูกระบุโดยเลขประจำตัวมันถูกระบุโดยรหัสตำแหน่งเหมือนถ้าเป็นผู้จัดการนี่จะรู้เลยว่ารถประจำตำแหน่งคืออะไร แต่เขาไปเช็กเลขแทนที่จะเช็กกับเลขประจำตัว อันนี้คือการออกแบบที่ไม่ดีเพราะฉะนั้น ถ้าจะให้รถประจำตำแหน่งวิธีการแก้ปัญหา ก็คือเราควรจะแยกตารางนี้ ออกไปสร้างตารางใหม่เลยค่ะ มันไม่ควรจะไปขึ้นกับตารางที่มีคีย์หลักแต่ไม่สามารถระบุค่าข้อมูลตรงนี้ได้นี่นะคะ กับต่อมาเป็นการขึ้นต่อกันเชิงกลุ่มนะคะ ก็จะเป็นความสัมพันธ์ระหว่างคอลัมน์ หรือ Attribute นี่ คือ ขึ้นต่อกันโดยสมบูรณ์นะคะ ก็ไปสามารถไประบุค่าอื่นได้โดยที่อย่างเช่นตัวอย่างนะคะ ในตารางนี้นะคะ จะมีรหัสหลักสูตร สามารถระบุรหัสวิชาได้หลายวิชา เช่นในรหัสนักศึกษาจะได้เห็นได้ว่ามีเลข122เป็นรหัสนักศึกษา 122 คืออะไร ก็คือหลักสูตรที่เราเรียนอยู่นะคะ ซึ่งในหลักสูตรที่เราเรียนนี่ มันมีวิชามากกว่า 20 วิชานะคะ นั่นก็คือในรหัสหลักสูตรนี่มันสามารถระบุหรัสวิชาได้หลากหลายนะคะ อันนี้ก็คือการขึ้นต่อกันแบบมีค่ามากกว่า 1นะคะ รหัสหลักสูตร สามารถระบุรหัสวิชาได้หลายค่านั่นเองนะคะ แล้วรหัสหลักสูตร ก็สามารถระบุค่ารหัสนักศึกษษได้หลายคนเช่นเดียวกันเหมือนตอนนี้หลักสูตรที่เราเรียนนี่มีนักศึกษามากกว่า 100 คนแต่รหัสหลักสูตรเดียวนะนะคะ นี่คือความสัมพันธ์แบบระบุค่าได้มากกว่า 1 นั่นเองแบบหลายค่านะคะ เพราะฉะนั้นวิธีการแก้ปัญหาของสิ่งที่เกิดขึ้นนะคะ เราเลยจะต้องมีการ กระบวนการปรับบรรทัดฐานโครงสร้างของ ที่มีความซ้ำซ้อนกันให้อยู่ในรูปแบบที่เป็นบรรทัดฐาน เป็นรูปแบบที่พร้อมที่จะเอาไปพัฒนาเป็นฐานข้อมูลได้นะคะ โดยหลักการนะคะ อย่างที่บอก มี 5 ระดับแต่ในระดับที่ 3 นี่ ก็เพียงพอสำหรับการออกแบบฐานข้อมูลในปัจจุบันแล้วนะคะ โดยคีย์หลักของการทำงานนะคะ ขั้นที่ 1 นะคะ กำจัดกลุ่มของข้อมูลมีความซ้ำซ้อนกันออกไปข้อแรกง่ายมาก ๆ ง่ายที่สุด ก็คือ 1NF นะคะ ต่้อมา ข้อที่ 2 หรือ 2 NF นะคะ จะกำจัดการขึ้นต่อกันบางส่วนออกนะคะ ขั้นสุดท้าย3NF นะคะ กำจัดการขึ้นต่อกันของ Attributeที่ไม่ใช่คีย์หลักนะคะ เดี๋ยวจะมาดูทีละขั้น ว่ามันจะต้องเป็นอย่างไรบ้างนะคะ ข้อแรกง่ายที่สุด ง่ายมาก ๆ นะคะ ให้นักศึกษาจำกระบวนการหลัก ๆ ก็จะมี 3 ข้อนะคะ ดูก่อน ว่าข้อมูลมันซ้ำซ้อนกันไหม ขั้นที่ 2 ก็ดูมันขึ้นต่อกันแค่บางส่วนหรือเปล่านะคะ ขั้นที่ 3ค่าอันไหนไม่ใช่คีย์หลัก แต่มันไปส่งผลกระทบกับข้อมูลอื่นได้หรือเปล่านะคะ ดูขั้นตอนที่ 1 ก่อนนะคะ ขั้นต้อนที่ 1 ง่ายมากนะคะ ทุก ๆ คอลัมน์หรือ Attribute ในแต่ละ Record จะต้องเป็นค่า Single Valueมีค่าเดียวเท่านั้นนะคะ จะใส่แบบนี้ไม่ได้ เพราะฉะนั้น ข้อมูลทุกแถวจะต้องมีค่าที่ไม่ซ้ำกันอย่างตัวนี้ นักศึกษาคนที่ 11 เทอมนี้คุณลงทะเบียนประมาณ 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 ไหมไม่นะคะ เพราะฉะนั้น การทำขั้นตอนต่อมานะคะ 2 NF ขั้นตอนที่ 1เราจะต้องทำ 1NF มาเรียบร้อยแล้ว ง่ายมากนะคะ แล้วก็ต้องมาตัดของการขึ้นบางส่วนออกนะคะ ก็คือการกำจัด Attribute ที่ไม่ขึ้นกับคีย์หลักของตารางนั้น ๆ นั่งเองกำจัดออกนะคะ อย่างเช่นตัวนี้นะคะ การขึ้นต่อกันบางส่วน จะเห็นได้ว่ารหัสวิชากับชื่อวิชามันไม่ขึ้นตรงกับรหัสนักศึกษาใช่ไหมคะ จำได้ไหมคะ รูปเดิมนะคะ รูปเดิมวิธีกำจัดปัญหาเราก็ดึงสิ่งที่มันเป็นปัญหาค่ะ สิ่งที่มันไม่ขึ้นตรงกับคีย์หลักนั้นตารางใหม่ สร้างตารางเพิ่มนะคะ เอาสิ่งที่เป็นปัญหาออกมาไปใส่ตารางใหม่กำหนดคีย์หลักใหม่นะคะ ในตารางเดิมนะคะ เราก็เอาคีย์หลักของตารางใหม่ไปใส่แค่นั้นเองนะคะ วิธีการ ก็คือเหมือนรูปนี้นะคะ สิ่งที่เป็นปัญหาที่อาจารย์ยกตัวอย่างกับชื่อวิชานะคะ เพราะรหัสวิชามันไม่ได้ขึ้นตรงกับรหัสนักศึกษานะคะ เพราะฉะนั้น ไอ้ 2 ตัวนี้คือสิ่งที่เป็นปัญหานะคะ วิธีแก้ปัญหาคือเราสร้างตารางผลการเรียนใหม่ สร้างตารางวิชาใหม่เห็นไหมคะ ในตารางใหม่เราจะตัดชื่อวิชาออกแต่ต้องเหลือรหัสวิชาไว้ เพื่อให้ไปเชื่อมโยงว่ารหัสวิชานี้ มันชื่อวิชาอะไร จากอีกตารางหนึ่งแค่นั้นเองนะคะ โอเคค่ะ อันนี้เป็นตัวอย่างของการปรับบรรทัดฐาน ในรูปแบบของ 2NF นะคะ แต่เดี๋ยว 2อันนี้จะให้ทำเป็นการบ้าน เดี๋ยวค่อยย้อนกลับมาแล้วกันนะคะ เดี๋ยวค่อยย้อนมาสั่งอันนี้เป็น 1NF นะคะ อันนี้ก็แก้แล้ว ตารางเมื่อกี้นะคะ ต่อมาขั้นตอนสุดท้ายนะคะ 3NFนะคะ โดยความสัมพันธ์นะคะ ก่อนที่จะเป็น 3NF ได้จะต้องเป็น 2NFหลักของการทำขั้นตอนที่ 3 คือต้องเอาความสัมพันธ์ที่ไม่ใช่คีย์หลักออกนะคะ เช่น ไม่ใช่คีย์หลักแต่ไปมีผลกับคอลัมนือื่นไม่ได้นะคะ ไม่ได้ วิธีการแก้ปัญหา เช่นเดิมค่ะ สร้างตารางใหม่ขึ้นมาแก้ปัญหานั้น ๆ นะคะ อย่างเช่นในตัวอย่างนะคะ หัสพนักงานนะคะ ชื่อ สกุล รหัสแผนก เงินเดือนจะเห็นได้ว่าในตารางนี้ คีย์หลักก็คือรหัสพนักงานนะคะ แต่มันมีรหัสแผนกกับชื่อแผนกติดมาด้วย ซึ่งมันไม่ได้เกี่ยวกับรหัสพนักงานเลยนะคะ วิธีการแก้ปัญหาก็คือ เอารหัสแผนกกับชื่อแผนกไปสร้างตารางใหม่แต่ต้องยังคงรหัสแผนกไว้ในตารางงานเดิมนะคะ เพื่อให้มันเชื่อมโยงได้ ไอ้แผนกA001 นี่คือแผนกอะไรนะคะ อันนี้คือการแก้ปัญหา ไม่ใช่คีย์หลักแต่ไปส่งผลกับคอมลัมน์อื่นในตารางนะคะ อันนี้คือ 3 NF จริง ๆ แล้วอยากให้ลองทำในห้องมากกว่า แต่ด้วยสัปดาห์นี้มันมีข้อกำจัดนะ ก็ไม่เป็นไรนะคะ อันนี้เป็นตัวอย่างนะคะ สรุปนะคะ วิธีการทำ Normalization หรือการปรับบรรทัดฐานนะคะ ก็คือ ทุก ๆ Attribute นะคะ ก็คือทุก ๆ คอลัมน์ในแต่ละแถวจะต้องมีค่าของข้อมูลเพียงค่าเดียวเท่านั้นนะคะ อย่างเช่นเหมือนเวลาเรากรอกเบอรโทรศัพท์เรามีโทรศัพท์ 3 เบอร์ก็จริง แต่เราจะกรอกได้เบอร์เดียวนะคะ ถ้าอยากใส่เบอร์ที่ 2 ที่ 3 ก็ต้องเพิ่มข้อมูลแถวใหม่ขึ้นมานะคะ ต่อมา2NF นะคะ ก็ปัญหา ก็คือถ้ามีข้อมูลนะคะ ข้อมูลในทุกตัวในตารางนั้นจะต้องขึ้นกคีย์หลักของตารางตัวเดียวเท่านั้นนะคะ ข้อที่ 3 ถ้าข้อที่ 3 ถ้าคอลัมน์ไหนที่ไม่ใช่คีย์หลักนะคะ จะมาส่งผลกับคอลัมนือื่นในตารางไม่ได้นะคะ เพราะฉะนั้น ไอ้ตาราง ข้อ 1 ก็คือแค่กระจายตาราง อันที่ 2 อันที่ 3 ถ้ามีปัญญาปุ๊บเราต้องสร้างตารางใหม่นะคะ การบ้าน เอาอย่างนี้ดีกว่านะคะ อาจารย์จะให้ทำน่าจะส่งวันนี้เอาแค่ข้อเดียวนะคะ ข้อเดียว เพราะว่าจริง ๆ อยากให้ทำในห้อง เดี๋ยวสัปดาห์หน้าให้ทำในห้องที่เรียนไปวันนี้เข้าใจไหมนะคะ ถ้าทำเสร็จแล้วก็ค่อยเอามาส่งที่ตู้ส่งงานอาจารย์ เอาเฉพาะข้อนี้นะข้อเดียวข้อเดียวพอ วันนี้ข้อเดียวพอนะคะ ส่งในเวลานี่ล่ะให้ลองทำดูว่าเข้าใจไหม ข้อนี้ให้ทำ1NF ทำ 1NF ทำอย่างไร ง่ายมาก ๆ เลยนะคะ อาจารย์เว้นช่องว่างให้แล้วเติมมานะคะ 2 NF คุณเห็นไหมว่า นี่มันมีรหัสวิชานี่ชื่อวิชานี่ต้องทำอย่างไรกับมันนะคะ แยกมันออกมาสิแยกอย่างไรนะคะ เอาก้อนเดียวก่อน แล้วลองส่งมาให้อาจารย์ดูเข้าใจมากน้อยขนาดไหนนะคะ จริง ๆ อยากให้เรียนในห้องมากกว่า แต่วันนี้ก็เอาประมาณนี้ก่อนแล้วกันนะคะ ให้ทุกคนหายดีกลับมา อาทิตย์หน้าค่อยเดินดูในห้องดีกว่านะคะ วันนี้ก็จะประมาณนี้นะคะ เดี๋ยวเวลาที่เหลือให้ทำข้อนี้แล้วมาส่งวันนี้เลยยิ่งดีนะคะ เวลาที่เหลือทำใส่กระดาษมาส่งอาจารย์แล้วกันนะ ก็ประมาณนี้ค่ะ เวลาที่เหลือทำให้เสร็จภายในวันนี้นะคะ ข้อเดียวเองนะคะ ข้อเดียวมีใครสงสัยไหมคะ ปุ๋ยสงสัยไหม ปุ๋ยเปิดไมค์ได้เหลือเปล่า// ไม่มีค่ะ อาจารย์ เดี๋ยวถ้าอย่างไร เดี๋ยวให้อุบลไปส่ง อุบลกลับหอแล้วน่ะค่ะ (อาจารย์เกวลี) อ๋อ ส่วนมากอยู่ไหนกันอยู่หอหรืออยู่ DSSตอนนี้เหลืออยู่ DSS ประมาณ 4 คนค่ะ (อาจารย์เกวลี)ก็รวม ๆ เท่าไรได้ก็เอามา (นักศึกษาหญิง) ค่ะ ๆ ๆ (อาจารย์เกวลี) ก็ให้เด็กทำนั่นแหละโอเค Thk you(อาจารย์เกวลี) ค่ะ วันนี้ก็ประมาณนี้ค่ะ ขอบคุณทุกคนมากนะคะ ที่ตั้งใจเรียนกันอยู่ ถ้าใครทำเสร็จก็ทำให้เสร็จแล้วฝากเพื่อนมากส่ง รวมกันมาส่งก็ได้นะคะ ถ้าใครอยู่หอก็มาส่งที่ DSS ก็ได้มาส่งที่โต๊ะอาจารย์ก็ได้นะคะ โอเคค่ะ วันนี้ก็ประมาณนี้ค่ะ ขอบคุณล่ามได้นะคะค่ะ ขอบคุณค่ะ