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