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