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