(อาจารย์เกวลี) เดี๋ยวเริ่มเลยก็ได้ค่ะ โอเคค่ะ ประมาณนี้
นะคะ
วันนี้จะเป็นบทที่ 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