เดี๋ยวเริ่มเลยก็ได้ค่ะ น่าจะประมาณนี้
นะคะ
วันนี้จะเป็นบทที่ 5
เกี่ยวกับ
กระบวนการ
การปรับบรรทัดฐาน
ภาษาอังกฤษก็จะเป็น
Normalization มันก็จะมีความหมายแล้วก็จุดประสงค์ ของการทำ
การปรับมาตรฐานนะคะ แล้วก็จะเกี่ยวกับ
ฟังก์ชันการขึ้นต่อการและกระบวนการในการทำ Normalization ด้วย
นะคะ
มี 3 ข้อวันนี้
โดยการปรับบรรทัดฐานนะคะ หรือว่านอนเมื่อไหร่แฟชั่นเนี่ยมันจะเป็นทฤษฎีที่
คนที่จะต้องออกแบบฐานข้อมูลเขาจะต้องมาแปลงข้อมูล
ข้อมูลอาจจะเป็นข้อมูลที่ซับซ้อน
นะคะ ให้มันง่าย
เข้าใจก็ง่าย
ใช้งานก็ง่าย แล้วก็ต้องเป็นระบบที่หลังจากออกแบบแล้วนำไปใช้งานจริงนี่ ต้องเกิดปัญหาน้อยที่สุด
นะคะ โดยกระบวนการทำงานนะคะ ในการปรับบรรทัดฐานนี่ มันจะมี 3 ระดับ
จริง ๆ เราก็จะเรียกสั้น ๆ ว่า
ระดับแรกเรียกว่า 1NF
2NF
3NF ในระดับปริญญาตรีเนี่
ถึง 3ms ได้
ก็ถือว่าเก่งมากแล้ว
นะคะ
ถ้าเป็นระดับที่สูงขึ้นไปอีกก็จะถึงได้ถึง 5 nf เลย
นะคะ
อันนี้เป็น
แผนภาพกระบวนการทำงานนะคะ ก่อนที่เราจะมาทำกระบวนการปรับบรรทัดฐานได้นี่ มันก็ต้องวิเคราะห์ความต้องการของผู้ใช้งานก่อน ว่าเขาต้อง
การระบุ
การฐานข้อมูลแบบไหน มีความต้องการใช้
ตารางกี่ตารางในฐานข้อมูลนะคะ
หลังจากนั้น
ก็จะวาดรูป
เหมือนที่เราที่โรงเรียนอาทิตย์ที่แล้ว
นะคะ ว่าเป็นแผนภาพเพื่อให้เข้าใจว่า
สิ่งที่เรากำลังจะออกแบบหรือสิ่งที่เรากำลังจะทำฐานข้อมูล
มันตรงตามความต้องการหรือเปล่านะคะ
แต่รูปแบบของรูปที่เราวันอาทิตย์ที่แล้วนี่ มันจะยังเป็นรูปแบบที่
ยังไม่เป็นบรรทัดฐานหรือว่ายังไม่มีการจัดระเบียบความคิด
ที่ตัดข้อมูลที่ซ้ำซ้อนกันออกไป หรืออาจจะมีคีย์หลักที่มัน
นะคะ เราก็เลยจะต้องเอาข้อมูลจากที่เราว่าอาทิตย์ที่แล้วเนี่
เข้าสู่กระบวนการปรับพื้นฐานก่อน
ซึ่งอย่างที่บอก
เราทำแค่ถึง 3NF รก็
เก่งมากแล้ว
อย่างน้อย 2-3 นะคะ
ชกับสีเนี่ยไม่ทำก็ก็ก็รักไว้ได้นะคะ แต่อย่างน้อยต้องถึง
วัตถุประสงค์ของการปรับฐานนะคะ
แน่นอนลดความซ้ำซ้อนของข้อมูล ก็คือถ้าข้อมูลมันซ้ำกันนี่ เราก็ต้องตัดออกไป
เพราะถ้าเป็นสิมากเท่าไหร่เนื้อหาแล้วก็พื้นที่ในการเก็บข้อมูลอย่างมันก็จะเยอะ
ก็ทำให้สิ้นเปลือง
ประมาณเหมือนกัน
รวมถึงลดปัญหาความไม่ถูกต้องของข้อมูล
ข้อมูลนี่ นอกจากที่จะไม่เกิดความซ้ำกันแล้วเนี่ย
วันจันทร์อาจจะเกิดจากสาเหตุคือ
ถ้าเหมือนที่ตัดกระจกทุกอย่างก็คือถ้าเราเก็บข้อมูลหลาย ๆ ที่
นักศึกษา
เก็บข้อมูลที่คณะด้วยเก็บที่มหาลัยด้วยเก็บที่สาขาด้วยนี่ บางทีถ้าวันหนึ่ง
คุณอาจจะเปลี่ยนแปลงเบอร์โทรศัพท์
ที่บ้าน
เราก็ต้องไปตามเปลี่ยนทุกที่เลย
นะคะ
ซึ่งเสียเวลาแล้วคราวนี้ก็จะเป็นที่เถียงกันว่าสรุปแล้วเบอร์ไหนถูก เบอร์ไหนผิด
นะคะ โดยวัตถุประสงค์ของการปรับบรรทัดฐานก็คือข้อมูลจะถูกเก็บอยู่แหล่ดียว
นะคะ เก็บไว้ที่เดียว
แต่สามารถเรียกใช้และใช้งานได้หลาย ๆ ที่พร้อมกันได้
แต่ถ้ามันมีการเปลี่ยนแปลงข้อมูลหรือมีการลบหรือการเพิ่มข้อมูล
เพื่อให้ข้อมูลเป็นปัจจุบันที่สุด
เราจะเก็บข้อมูลไว้ที่เดียว
แก้ไขก็ที่เดียว
เพราะฉะนั้น ข้อมูลก็จะเป็นข้อมูลที่ถูกต้อง แล้วก็
ปัจจุบันด้วย
แล้วก็
อย่างที่ใช้ในการเก็บข้อมูลที่เดียวนี่ มันก็จะลดความผิดพลาดที่เกิดจากการ
เปลี่ยนแปลงข้อมูลปรับปรุงข้อมูลนะคะ เหมือนที่บอกว่าคือ
ถ้าเปลี่ยนเบอร์โทรศัพท์ หรือเปลี่ยนบ้านเลขที่นะคะ ก็เปลี่ยนแปลงที่เดียว เราสามารถเรียกใช้ข้อมูลได้
ทุกที่พร้อมกันถ้าต้องการข้อมูลนะคะ
ความซ้ำซ้อนกันของข้อมูลมันอาจจะเกิดความผิดพลาดของการปรับปรุงข้อมูลนะคะ
แนวคิดที่สำคัญของการออกแบบฐานข้อมูล
นี่ ก็คือการออกแบบข้อมูลที่ซ้ำซ้อนกันน้อยที่สุด
เพื่อประหยัดเนื้อที่ในการเก็บข้อมูล แล้วก็ลดปัญหาที่จะเกิดขึ้น
ถ้าสมมุติว่าข้อมูลมันซ้ำซ้อนกันมากเกินไปหรือ
ปริมาณข้อมูลมันเยอะเกินไป
อย่างเช่นตัวอย่างนะคะ ตารางด้านบน ตารางสีเทาข้างบน
จะเป็นตัวอย่างการออกแบบ
ฐานข้อมูลที่ดี เดี๋ยวจะมาให้ดูว่าทำไมมันถึงดีกว่า ในตารางข้างบนนี่ มันจะมีตารางของพนักงาน แล้วก็ต่างสาขา
จะเห็นได้ว่า
ตาราง
พนักงาน
นี่ จะมีส่วนหนึ่งที่เป็นข้อมูลของรหัสสาขา
ห้อย
ไว้อยู่ ถามว่าทำไมไม่เอา
ข้อมูลสาขามาไว้ในตารางพนักงานทีเดียวเลยล่ะ
ทำไมต้องแยกออก
ถ้า
นักศึกษาดูคนแรกนะคะ
พนักงานคนแรกรหัสสาขา B005
ก็คือสาขา
เชียงใหม่
ถ้าสมมุติว่าพนักงานคนที่ 1 ลาออก
ก็จะมีการลบข้อมูลเกิดขึ้นใช่ไหมคะ
มีการลบข้อมูล
ลบ
คนนี้ออก ขีดฆ่าทิ้ง
ฆ่าทิ้ง
สิ่งไหนที่หายไปบ้าง
แน่นอนสาขาเชียงใหม่จะหายไปด้วย
ถ้าสมมุติเราอยู่ด้วยกัน
แต่ถ้าสมมุติพนักงานคนนี้ลาออก สาขาเชียงใหม่ยังอยู่ไหม
ยังอยู่
นะคะ
ซึ่งแตกต่างจากด้านล่าง
ด้านล่าง
เห็นไหม คำว่า
ถ้าสมมุติว่าจะลบทิ้งหมดเลย
กากบาททิ้ง
สาขาเชียงใหม่หายไปด้วย
อันนี้เป็นการออกแบบที่ไม่ดี
เหมือน
ลบคนข้างล่าง
คนนี้ออก
สาขาพิษณุโลก
ก็หายไปด้วย
แต่ถ้าเป็นตารางด้านบน
ถ้าคนนี้ลาออก
สาขายังอยู่ไหม
ยังอยู่เหมือนเดิม
อันนี้คือการออกแบบฐานข้อมูลที่ดี ถ้าข้อมูลตัวไหนที่มันมีผลกระทบต่อกันเราจะต้องแยกตารางออก
ตัวอย่าง
นะคะ ถ้าการออกแบบที่ดีนี่ เราจะลด
ปัญหาความซ้ำซ้อนของข้อมูล
ออกได้
นะคะ เช่นตัวนี้อันนี้เป็นตารางที่ออกแบบที่ไม่ดีนะคะ
เห็นไหมคะ ว่ามันจะมี
รหัสสาขา
แล้วก็ที่อยู่
อยู่ในตารางเดียวกัน
ถ้าสมมุติว่าอาจารย์เพิ่ม
เข้ามาใหม่อีก 1 คน
นะคะ
เป็น EM10
ตรงนี้นะะค ถ้าต้องการเพิ่มพนักงานสาขา
เชียงใหม่ก็ต้องมากรอกข้อมูลตรงนี้อีก
เชียงใหม่นะ
แต่ถ้า
การออกแบบฐานข้อมูลที่ดีนี่
เราแค่ใส่รหัสสาขา
ไม่จำเป็นจะต้องพิมพ์ที่อยู่ทุกครั้งก็ได้
เหมือนเวลาคุณไปธนาคารใช่ไหมคะ
คุณก็แค่ยื่นบัตรประชาชน
พนักงานธนาคารก็จะกรอกเลขบัตรประชาชนคุณลงไป
นะคะ หรืออาจจะเอาชิปการ์ดของคุณนี่ เสียบเข้าไปในเครื่อง ถามว่าตอนนี้เราได้กรอกข้อมูลไหม
ไม่ต้อง ขอแค่มีเลขบัตรประชาชนข้อมูลทุกอย่างที่คุณมี เขาจะดึงออกมาจากระบบให้เลยเราไม่ต้องมาเสียเวลาก่อน
เหมือนเมื่อก่อนนี่ ต้องเขียนใส่กระดาษและเลขบัตรประชาชนด้านรายชื่ออะไร นามสกุลอะไร ที่อยู่ที่ไหนเบอร์โทรศัพท์อะไรเดี๋ยวนี้ไม่ต้องเลยขอแค่มีเลขบัตรประชาชนข้อมูลทุกอย่างเราสามารถดึงขึ้นมาได้อยู่แล้ว
อันนี้ก็เช่นเดียวกัน
ถ้าการออกแบบไม่ดีนี่ เราต้องกรอกข้อมูลถูกต้องทุกช่องเลยนี่
มันทำให้
อาจจะคนเดียวไม่เดือดร้อนค่ะ
ถ้าเป็นพนักงานใหม่เป็นเหมือนโรงงานน่ะค่ะ ที่พนักงพันคน
นั่งกรอก
เชียงใหม่เป็นพันครั้งนี่ เเวลามาก ๆ
อันนี้คือการออกแบบที่ไม่ดี
นะคะ
กลับอีกอย่างหนึ่งถ้าสมมุติว่าเมื่อกี้อาจารย์เพิ่มพนักงานแล้ว
ถ้ามันอยากเพิ่มแค่สาขา
นะคะ อยากเพิ่มแค่สาขา ซึ่งในตารางนี้
คีย์หลัก จำได้ไหมคะ ที่รักจะเป็นคีย์ที่ขีดเส้นใต้
ซึ่งอาจารย์อยากเพิ่มสาขาสมุทรปราการจะเพิ่มบี
100
กลนคร
ละครนะคะ
ถามว่าเพิ่มได้ไหม อาจจะเป็นการตั้งสาขาแต่ยังไม่มีพนักงานหรอก
ถ้าจากตารางนี้
เราจะเพิ่มเฉพาะชื่อสาขาไม่ได้
เนื่องจากเรายังไม่มีรหัสพนักงาน เพราะรหัสพนักงานเป็นคีย์หลัก
คีย์หลัก
คือคุณสมบัติมันคือเป็นค่าว่างไม่ได้
ก็ทำให้เราเพิ่มสาขาไม่ได้
เพราะเราไม่มีพนักงาน
อันนี้ก็เป็น
ข้อผิดพลาดในการเพิ่มข้อมูล ถ้าเราออกแบบ
ตารางแบบนี้นะคะ
นี่ก็คือกัน
ปัญหาที่เกิดขึ้นจากการออกแบบตารางไม่
ดี กับปัญหาต่อมา
เป็นปัญหาการลบข้อมูลที่อาจารย์บอก
ถ้าพนักงานคนนี้
ออก
สาขาเชียงใหม่หายไปด้วย
ลบไป
กรณีความผิดพลาดจากการเปลี่ยนแปลง
เหมือน B003 นะคะ
เป็นกรุงเทพฯ ใช่ไหมคะ
แล้วคราวนี้ข้อมูลมันอยู่ในตารางเดียวกัน
ถ้านักศึกษาจะแก้สมมุติว่าเราย้ายจากกรุงเทพฯ ไปอยู่นนทบุรี
สมมุติมีพนักงาน 3ฅ000 คน
คุณต้องแก้กรุงเทพฯ 30 ครั้ง
นนทบุรี
พนักงานมีคนส่งคนไม่ใช่ปัญหาค่ะ แต่ถ้าคุณเป็นโรงงานขนาดใหญ่
นั่งแก้ทีละ 3,000 คน ไม่ใช่เรื่องสนุกแน่ ๆ
นี่ก็เป็นปัญหานะคะ เพราะฉะนั้น
เราควรแยกตารางพนักงานกับตารางสาขาออกจากกันนะคะ มีเป็นเหตุผล
นี่คือ
ขนาดข้อมูลขนาดเล็กนะคะ แล้วยังเห็นปัญหาขนาดนี้ ถ้าสมมุติว่า
องค์กรขนาดใหญ่ เป็นบริษัทเป็นโรงงานระดับโรงเรียน มีนักเรียนเป็น 2 302 3000 คนก็ได้นะคะ
ีปัญหาเยอะมากถ้าสมมุติว่าเราจัดการตารางไม่ดี
จากปัญหาที่เกิดขึ้นเมื่อกี้นะคะ อย่างที่บอกค่ะ เราจะแก้ปัญหาโดยการแยกตารางเป็น 2 ตารางแบบนี้นะคะ
ฟังก์ชันการขึ้นต่อกันนะคะ อันนี้เดี๋ยว
เป็นเกี่ยวกับตารางหนึ่งนะคะ มีผลดีต่อราง 1 เราจะเรียกว่าเป็นฟังก์ชันการขึ้นต่อกัน
เดี๋ยวดูตัวอย่างเลยละกัน
นะคะ อย่างเช่นตารางนี้นะคะ
ดูจากรหัสพนักงานนะคะ
เราจะเห็นได้ว่ารหัสพนักงาน
จะส่งผลกับชื่อ
ตำแหน่ง
สัญลักษณ์ของการขึ้นต่อกันนะคะ อันไหนเป็นตัวหลัก
จะชี้ไปที่ตัวรองนะคะ ตามหัวลูกศรเลย
ดูทิศทางตามหัวลูกศรนะคะ อันไหนเป็นตัวหลัก อันไหนเป็นตัวรอง
นะคะ
อย่างเช่น
ตัวนี้ถามว่าตำแหน่งมาชี้ที่รหัสพนักงานได้ไหมนะคะ ถามว่า
ไม่ได้
เพราะการขึ้นต่อการจะต้องเป็นลักษณะ 1 ต่อ 1 เท่านั้น
เป็น 1 ต่อกลุ่มไม่ได้
ชนิดของการขึ้นต่อกันนะคะ จะมีอยู่ 4 ชนิดนะคะ
ชนิดแรกเป็นการขึ้นต่อกันโดยสมบูรณ์
นะคะ
ซึ่งอาจจะเป็นเกี่ยวกับ
ตารางนะคะ จะมีคอลัมน์
1 คอลัมน์ หรือมากกว่า 1 คอลัมน์มาประกอบกัน
นะคะ โดยในคอลัมน์นั้นนี่
่าที่ระบุ
ค่าพิเศษ
ของแถว ๆ ได้อย่างชัดเจน
aprilia จะเป็นค่าเฉพาะที่บอกเลยว่า
คอร์ดข้อมูลแถวนั้นนี่มันมีลักษณะพิเศษเฉพาะตัวยังไง
ดยในทุกความสัมพันธ์นี่ จะต้องระบุค่าคีย์หลักไว้ด้วย
ค้คือต้องเป็นค่าเอกลักษณ์คือไม่ซ้ำกันอยู่แล้ว
นะคะ
่างเช่นการขึ้นต่อกันอย่างสมบูรณ์อันแรกนะคะ
ก็คือคอลัมน์ที่ไม่ใช่คีย์หลัก
คีย์หลัก จำได้ใช่ไหมคะ คีย์หลักจะเป็น
คอลัมน์ที่มีขีดเส้นใต้
คอลัมน์ที่ไม่ใช่คีย์หลัก จะขึ้นตรงต่อคอลัมน์ที่เป็นคีย์หลัก
คอลัมน์เดียวเท่านั้น
เช่นเลขบัตรประชาชน
จะขึ้น
จะเป็นเจ้าของชื่อนี้เท่านั้นนะคะ
เพราะฉะนั้น การขึ้นตัวกันอย่างสมบูรณ์จะเป็นลักษณะแบบ 1 ต่อ 1 นะคะ เลขบัตรประชาชน 1 เลข
ต้องเป็นของคนคนเดียวเท่านั้น
ไม่ใช่ว่าเลขประชาชนที่ใช้ 10 คน เป็นไปไม่ได้นะคะ
ตัวอย่างนะคะ
ตารางที่มี Column หลายตัว
นะคะ
ขึ้นอยู่กับคีย์หลักตัวเดียว เช่น
คนหนึ่งคนนี่
ก็จะมีข้อมูลชื่อ นามสกุล วัน เดือน ปีเกิด วันที่ทำบัตรใช่ไหมคะ
แต่ว่า
เขาจะต้องขึ้นตรงกับเลขบัตรประชาชนเดียวเท่านั้น ถามว่า 3คนนี้
อาจจะเกิดวันเดียวกันก็ได้ค่ะ
เลขบัตรประชาชนเขาจะไม่เหมือนกัน
หรือเขาอาจจะมาทำบัตรวันเดียวกัน
หมายเลขบัตรประชาชนเขาจะไม่ซ้ำกัน
คืออะไร ซ้ำกันได้ทุกอย่างค่ะ ยกเว้นหมายเลขบัตรประชาชน
แต่บางตารางนะคะ
ก็อาจจะเป็นการรวมตัวกันของ
คีย์หลัก มากกว่า 1 คีย์หลักนะคะ
มารวมกัน เช่น นักศึกษา
คนนี
ี้
ลงทะเบียนวิชานี้
ได้เกรดอะไร
อันนี้ก็เป็นความสัมพันธ์ที่เกิดขึ้นได้เหมือนกันค่ะ ว่าบัตรนักศึกษาซ้ำกันได้ไหม
รหัสวิชาซ้ำกันได้ไหม
เหมือนชื่อวิชา
อาจารย์รหัสหนึ่ง
เชื่อใจคนอื่นก็รหัสวิชาอีกอันนึง
นี้จะไม่ซ้ำกันอยู่แล้วนะคะ
ต่อมาจะเป็นการขึ้นต่อกันบางส่วน
มันก็จะเป็นอาศัยความสัมพันธ์ที่เกิดขึ้นจาก
คีย์ผสมนะคะ อาจจะเป็น
เส้นตรงจากตารางอื่นหรือส่งตารางมารวมกัน
อาจจะไม่ใช่คีย์หลักก็ได้ แต่มันมีความหมายกับ
คอลัมน์หนึ่ง
เดี๋ยวจะยกตัวอย่างเลยดีกว่า
อย่างเช่น
ว่าตารางเทียบไซซ์ให้ดูเมื่อกี้นะคะ ก็จะมีรหัสนักศึกษารหัสวิชามีเกรด
แล้วก็
มีการบอกด้วยว่ารหัสวิชานี้เป็นชื่อวิชาอะไร
นะคะ
มันจะเป็นการเกิดขึ้นเมื่อ
คีย์หลักประกอบกันด้วย
คอลัมน์หรือว่า Attribute รวมกัน
โดยบางส่วนของคีย์หลักสามารถไประบุค่าอย่างอื่น
ที่ไม่ใช่คีย์หลักได้
นะคะ อย่างเช่นในความสัมพันธ์นี้ คีย์หลักจะมี 2 ตัว
นะคะ มีรหัสนักศึกษา
กับรหัสวิชา
นะคะ ถามว่า
ถ้ามีแต่
รหัสนักศึกษา
เกรดนะคะ
รหัสวิชา
แล้วเราจะรู้ไหมว่าชื่อวิชาที่เราเรียนไปนี่
วิชาอะไร
นะคะ เหมือนบางคนรู้รหัสวิชาแต่จำชื่อวิชาไม่ได้ก็มี
เพราะฉะนั้น รหัสวิชานี่ มันเลยสามารถ
ไปส่งผลกับชื่อวิชาได้เหมือนกัน เพราะเป็นตัวระบุว่า
ไปหลายวิชานี่
ชื่อวิชาอะไร
ฃ ก็คือคีย์หลักในตารางนี้มี 2 อัน
แต่มีคีย์หลัก 1 ตัวนี่
ไปมีผลกับ
Attribute 1 ได้
นะคะ อันนี้คือความขึ้นต่อกันบางส่วน
อย่างเช่นตัวนี้ก็จะเป็นของจริง ถ้าสมมาอาจารย์ปัดรหัสนักศึกษาออก
มีแค่ 5 วิชา มีเกรดมีการ
วิชาเขียนโปรแกรม แล้วถาม
รู้ไหมคะ ว่าเกรด A ที่ของใคร
นะคะ หรือว่า
อย่าลบไปก่อนนะ
หรือว่า
การลบรหัสวิชาออก
เหลือแต่นักศึกษา เหลือเกรด
ชื่อวิชาแล้วถามว่า
รหัสวิชาอะไรล่ะ ที่เราได้เกรด A
เราก็ไม่ทราบอีกเหมือนกันนะคะ อันนี้ก็คือ
การขึ้นต่อกันบางส่วนนะคะ
ต่อมาเป็นการขึ้นต่อกันแบบส่งต่อ
ก็จะเป็นความสัมพันธ์ที่เกิดขึ้น ก็ต่อเมื่อมี Attribute หรือว่าคนอื่นที่ไม่ใช่คคีย์หลัก
แต่ไปสามารถ
ขึ้น
สามารถระบุค่าของ Attribute อื่นใน Record ได้
ซึ่งเป็นการออกแบบที่ไม่เหมาะสม
เพราะส่วนใหญ่แล้วในตารางนี่
ถ้าเราจะระบุค่าอื่นให้กับ
คอลัมน์อื่นได้ควรจะต้องเป็นคีย์หลักเท่านั้น
นะคะ ดูตัวอย่างนะคะ เช่นตารางนี้
เขาบอกว่าสิ่งที่เกิดขึ้นคือ Attribute คือคอลัมน์ที่ไม่ใช่คีย์หลักหรือ Primary Key นะคะ ก็คือไม่ใช่คอลัมน์ที่มีเส้นขีดมันไประบุค่าอื่น ๆ ในตารางได้เช่น
ตารางนี้ก็คือเลขประจำตัว
นะคะ โดยตัวเลขประจำตัวนี่
จะไปมีผลกับชื่อ นามสกุล ที่อยู่ ตำแหน่งใช่ไหมคะ
เขานี่
รถประจำตำแหน่ง
มันไม่ถูกระบุโดยเลขประจำตัว
มันถูกระบุโดยรหัสตำแหน่ง
เหมือนถ้าเป็นผู้จัดการนี่
แทนที่ผู้จัดการนะคะ จะรู้เลยว่ารถประจำตำแหน่งคืออะไร
แต่เขาไปเช็กที่รหัสตำแหน่ง
แผนที่จะเช็กกับเลขประจําตัว
การออกแบบที่ไม่ดี
เพราะฉะนั้น ถ้าสมมุติว่าจะให้รถประจำตำแหน่งวิธีการแก้ปัญหาก็คือ
เราควรจะแยก
ตารางนี้
ออกไปสร้างตารางใหม่เลยค่ะ
มันไม่ควรจะมาขึ้นกับตาราง
ที่มีกี่หลัก
แต่ไม่สามารถระบุค่าข้อมูลตรงนี้ได้นี่ มันไม่ควรทำ
นะคะ กับต่อมาเป็นการขึ้นต่อการเชิงกลุ่ม
นะคะ
น่าจะเป็นความสัมพันธ์ระหว่างคอลัมน์ Attribute
การขึ้นต่อกันแบบสมบูรณ์นะคะ ก็ไปสามารถระบุค่าอื่นได้
โดยที่
อย่างเช่นตัวอย่าง
ในตารางนี้นะคะ จะมีรหัสหลักสูตร
สามารถระบุรหัสวิชาได้หลายวิชา เช่น
จริง ๆ ในสถานศึกษาจะเห็นได้ว่ามีเลข
122
รหัสนักศึกษา
B122 คืออะไร 122 ก็คือหลักสูตรที่เราเรียนอยู่
ซึ่งในหลักสูตรที่โรงเรียนนี่ มันมีวิชา
มากกว่า 20 วิชา
นะคะ
นั่นก็คือรหัสหลักสูตรนี่ มันสามารถระบุรหัสวิชาได้หลากหลายรหัสวิชามาก ๆ
นะคะ อันนี้ก็คือการขึ้นต่อกัน แบบ
มีค่ามากกว่า 1
รหัสหลักสูตร
สามารถระบุรหัสวิชาได้หลายค่านั่นเอง
นะคะ แล้วรหัสหลักสูตร
ก็สามารถระบุค่ารหัสนักศึกษาได้หลายคนเช่นกัน
เหมือนตอนนี้ หลักสูตรที่เราเรียน
นี่ มีนักศึกษาเกือบ 100 คน
รหัสหลักสูตรเดียว
นะคะ
นี่คือความสัมพันธ์แบบสามารถระบุค่าได้มากกว่า 1 นั่นเอง แบบไหนค่า
เพราะฉะนั้น วิธีการแก้ปัญหาของสิ่งที่เกิดขึ้นนะคะ เราเลยจะต้องมีการ
กระบวนการปรับบรรทัดฐาน หรือว่ากระบวนการปรับปรุงโครงสร้างของฐานข้อมูลนะคะ ที่มีความซ้ำซ้อนกัน ให้อยู่ในรูปแบบที่เป็นบรรทัดฐาน ก็คือ
เป็นรูปแบบที่พร้อมที่จะเอาไปพัฒนาเป็นฐานข้อมูลได้
นะคะ โดยหลักการนะคะ
แบบที่บอกมี 5 ระดับ
แต่ระดับ
ที่ 3 นี่ ก็ถือว่าเพียงพอสำหรับการออกแบบฐานข้อมูลแล้วในปัจจุบันแล้ว
โดย
คีย์หลักของการทำงานนะคะ ท่านที่ 1 นะคะ
กำจัดกลุ่มของข้อมูลที่มีความซ้ำซ้อนกันออกไป
อแรกง่ายมาก ๆ
ง่ายที่สุดก็คือ 1NF นะคะ
ต่อมาครั้งที่ 2 อยู่ 2
NF จะกำจัด
การขึ้นต่อกันบางส่วนออก
อันสุดท้าย 3NF นะคะ
กำจัดการขึ้นต่อกันของแอตทริบิวต์ที่ไม่ใช่คีย์หลัก
เดี๋ยวจะมาดูทีละขั้น
มันจะต้องเป็นอยบ้าง
คนแรกง่ายที่สุดง่ายมาก ๆ นะคะ
ให้นักศึกษาจำกระบวนการหลัก ๆ จะมี 3 ข้อนะคะ
ขั้นตอนการแรกเลยดูก่อนว่า
คำซ้อนกันไหม
ขั้นที่ 2 คือมันขึ้นต่อกันแค่บางส่วนหรือเปล่า
ขั้นที่ 3 อันไหนไม่ใช่คีย์หลัก
แต่มันไปส่งผลกระทบกับข้อมูลอื่นได้หรือเปล่า
ดูอันดับที่ 1 ก่อน
ขั้นที่ 1 ได้มาก
นะคะ ทุก ๆ
คอลัมน์ Records
จะต้องเป็นค่า Single Value คือมีค่าเดียวเท่านั้น
จะใส่แบบนี้ไม่ได้
เพราะฉะนั้น ข้อมูลทุกแถวจะต้องไม่มีค่าที่ซ้ำกัน
อย่างนี้
นักศึกษาคนที่ 1
แน่นอนทั้ง
1 เทอมนี่ คุณลงทะเบียนประมาณ 6-7 วิชาใช่ไหมคะ
ข้อมูลมันก็จะเป็นแบบนี้
ถ้าเราไม่มีการทำ
คราวนี้
ขั้นตอนที่ 1
เราจะ
ข้อมูลที่ซ้ำซ้อนกันออกวิธีการง่ายมากค่ะ คือแจ้งข้อมูลออกเป็นอย่างละแถวที่ไม่ซ้ำกัน
ดูตัวอย่างนะคะ
วิธีการทำ 1nf ง่ายมากค่ะ ถ้าข้อมูลตัวไหนเป็นกลุ่มนะคะ
คนที่ 1 วิชา
ลงทะเบียนเรียน 3 วิชาใช่ไหมคะ คนที่ 2 มี 2 วิชา
สามารถทำในรูปแบบ 1NF ก็คือ
เอามันกระจายออกมาค่ะ
ย้ายข้อมูลพรุ่งนี้ออกมา
กระจายออกใช่ไหมคะ กระจายออก
ง่ายมาก
ข้อมูลพวนี้ก็ทำซ้ำลงมาทำซ้ำลงมา
มา
ทำซ้ำลงมา
ถามว่า เขาทำไม
ทำไม 001 มันซ้ำกันได้ล่ะ
แต่รหัสวิชาเขาไม่ซ้ำกันเห็นไหมค่ะ
เด็ก ๆ เลยง่ายมากค่ะ
ข้อมูลทำไมเป็นก้อนอย่างนี้เรากระจายออกมาเป็นแยกออกมาเป็นบรรทัด บรรทัดเลย แค่นั้นเอง
อย่างน้อยในข้อสอบ
ต้องทำ 1NF ให้ได้
มันง่ายที่สุดแล้ว
นะคะ
ไม่ใช่ตัวนี้นะคะ ก็กระจายออกมา
แล้วคราวนี้ถ้าเรากระจายข้อมูลเรียบร้อยแล้วนะคะ
ก็จะมาดูว่าในตารางนี้ค่ะ
มันมีตาราง
ของพนักงานใช่ไหมคะ
เขาจะมีคีย์หลัก 1 ตัวละ
แต่ว่า
มันจะมีตัวนี้ค่ะ
ตัวที่ 1 ตัวที่ 2 ที่มีคุณสมบัติ
เป็นคีย์หลักได้
เราต้องแยกมันออกนะ
คะ กระบวนการนะคะ
ดูก่อนว่า
ตารางวิธีนะคะ สิ่งที่ขึ้นตรงกับคีย์หลักตัวนี้นะคะ ก็จะเป็นตัวที่ 1 ตัวที่ 2 ตัวที่ 3
สังเกตเราว่าคีย์หลักมีตัวเดียว
ข้อมูลมีเยอะมาก
นะคะ ออกมาได้อันแรกเลย
รหัส
โปรเจกต์นะคะ แล้วก็ชื่อโปรเจคนะคะ ใครเป็นผู้จัดการเงินเดือนเท่าไหร่
งบประมาณเท่าไ
ร คือมันจะเชื่อมโยงกับ
ข้อมูลที่เป็นคีย์หลักก็คือ Project Code วันนี้
ส่วนตัวนี้เป็นคีย์คู่แข่ง
2 ตัว
ฉันสามารถทำหน้าที่เป็นคีย์หลักให้กับอย่างตัวนี้นะคะ
มันจะเป็นคีย์หลักให้กับชื่อของพนักงาน
อย่างตัวนี้
ว่าจะเป็นคีย์หลักสำหรับชื่อแผนก
นะคะ ถามว่า
มันขึ้นตรงกับ ProjectCode ไหม
ไม่
นะคะ
เพราะฉะนั้น การทำขั้นตอนต่อมานะคะ
2NF ขั้นตอนที่ 1
เราจะต้องทำ 1NF มาเรียบร้อย แล้วซึ่งได้ทักมา
แล้วก็ต้องมา
ตัดของการขึ้นต่อกันบางส่วนออก
ก็คือการ
กำจัด
บิวตี้ไม่ขึ้น
คีย์หลักของตารางนั้น ๆ นั่นเอง
จะออกนะคะ
อย่างเช่นตัวนี้นะคะ
การขึ้นต่อกันบางส่วน จะเห็นได้ว่า
รหัสวิชา กับชื่อวิชา
มันไม่ขึ้นตรงกับรหัสนักศึกษาใช่ไหมคะ อันนี้จำได้นะ รูปเดิม
หารูปเดิม
วิธีกำจัดปัญหา เราก็ดึงสิ่งที่มันเป็นปัญหาสิ่งที่มันไม่ขึ้นตรงกับคีย์หลักตัวนั้น
ไปสร้างตารางใหม่
สร้างตารางเพิ่ม
เอาสิ่งที่เป็นปัญหาออกมา ไปใส่ตารางใหม่ กำหนดคีย์หลักใหม่
นะคะ ในตารางเดิม
นะคะ
เราก็เอาคีย์หลักของตารางใหม่ไปใส่
แค่นั้นเอง
นะคะ วิธีการก็คือ
เหมือนรูปนี้นะคะ
สิ่งที่เป็นปัญหาที่จะยกตัวอย่าง คือรหัสวิชา
ชื่อวิชา
เพราะรหัสวิชามันไม่ได้ขึ้นตรงกับรหัสนักศึกษา
เพราะฉะนั้น ไอ้สองตัวนี้คือสิ่งที่เป็นปัญหา
วิธีการแก้ปัญหา คือเราสร้างตารางผลการเรียนใหม่
สร้างตารางวิชาใหม่
เห็นไหมคะ
ตารางใหม่ เราจะตัดชื่อวิชาออก
แต่ ต้องเหลือ
รหัสวิชาไว้เพื่อให้เชื่อมโยงว่ารหัสวิชานี้มันชื่อวิชาอะไร
จากอีกตาราง 1
แค่นั้นเองนะคะ
โอเคค่ะ
อันนี้เป็นตัวอย่างของการ
ปรับบรรทัดฐานในรูปแบบของ
2 NF เดี๋ยววันนี้
จะให้ทำการบ้านเดี๋ยวค่อยย้อนกลับมาแล้วกันนะคะ
สอนภาษา
เดี๋ยวแก้แล้ว
ต่อมาเมื่อกี้นะคะ
ขั้นตอนสุดท้ายนะคะ 3NF
นะคะ
โดยความสัมพันธ์นะคะ ก่อนที่จะทำเป็นสามเณรได้จะต้องทำ 2NF มาก่อน
หลักของการทำขั้นตอนที่ 3 คือ
ต้องเอาความสัมพันธ์ที่ไม่ใช่คีย์หลัก
ออกนะคะ
เช่นไม่ใช่คีย์หลักแต่ไปมีผลกับ
คอลัมน์อื่น ไม่ได้นะคะ ไม่ได้
วิธีการแก้ปัญหาเช่นเดิมค่ะ สร้างตารางใหม่ขึ้นมา
แก้ปัญหานั้น ๆ
อย่างเช่นในตัวอย่างนะคะ
รหัสพนักงานนะคะ
ชื่อ สกุล รหัสแผนก ชื่อแผนก เงินเดือน
จะเห็นได้ว่าในตารางนี้นี่ คีย์หลัก ก็คือรหัสพนักงาน
แต่มันมีรหัสแผนกกับชื่อแผนกติดมาด้วย
ซึ่งมันไม่ได้เกี่ยวกับรหัสพนักงานเลย
วิธีการแก้ปัญหาก็คือ
เอารหัสแผนก
ชื่อแผนก
ไปสร้างตารางใหม่
แต่ต้องยังคงรหัสแผนกไว้
ในตารางเดิมนะคะ
เพื่อให้มันเชื่อมโยงได้ว่าไอ้แผนก A001 นี่ คือแผนกอะไร
นะคะ อันนี้คือการแก้ปัญหาไม่ใช่คีย์หลัก แต่ไปส่งผลกับคอลัมน์อื่น ๆ ในตารางนะคะ
อันนี้คือ 3NF จริง ๆ แล้วอยากให้ลองทำในห้องมากกว่า แต่ด้วยสัปดาห์นี้มันมีข้อจำกัดนะ ก็ไม่เป็นไร
นี้เป็นตัวอย่างนะคะ
สรุปนะคะ วิธีการทำ Normalization หรือว่าการปรับบรรทัดฐานนะคะ
ทุก ๆ ที่ทุก ๆ คอลัมน์ ในแต่ละแถว
จะต้องมีค่าของข้อมูลเพียงค่าเดียวเท่านั้น
เช่น เวลาเรากรอกเบอร์โทรศัพท์
เรามีโทรศัพท์ 3 เบอร์ก็จริง แต่เราจะกรอกได้แค่เบอร์เดียว
ถ้าอยากใส่เบอร์ที่ 2 ที่ 3 ก็ต้องเพิ่มข้อมูลแถวใหม่ขึ้นมา
ต่อมา
2NF
นะคะ ก็
ปัญหาก็คือถ้ามีข้อมูลนะคะ ขอข้อมูลทุกตัวในตารางนั้นจะต้องขึ้นกับคีย์หลัก
ของตาราง
ตัวเดียวเท่านั้น
นะคะ
ข้อที่ 3 ถ้า
คอลัมน์ไหนที่ไม่ใช่คีย์หลัก
นะคะ จะมาส่งผลกับคอลัมน์อื่นในตารางไม่ได้
นะคะ เพราะฉะนั้น
ไปข้อ 1 นี้คือแค่กระต่ายตาราง
อันที่ 2 อันที่ 3 ถ้ามีปัญหา
เราต้องสร้างตารางใหม่
การบ้านเอาอย่างนี้ดีกว่า
อาจารย์จะให้ทำน่าจะส่งวันนี้
เอาแค่
ข้อเดียวนะคะ ข้อเดียวพอ เพราะว่าจริง ๆ อยากให้ทำในห้อง เดี๋ยวสัปดาห์หน้าค่อยทำในห้อง
จะให้ลองทำดูก่อนว่าที่เรียนไปวันนี้
เข้าใจไหม
ถ้าทำเสร็จแล้วก็ค่อยเอามาส่ง
ตู้ส่งงานอาจารย์ เอาเฉพาะข้อนี้นะ ข้อเดียว
ข้อเดียวพอ วันนี้คนเดียวพอนะคะ ส่งในเวลานี้แหละ
ให้ลองทำดูว่าเข้าใจไหมข้อนี้
ทำอย่างนี้ ทำอย่างไรได้มาก ๆ เลย
การเว้นช่องว่างให้แล้ว
เติมมา
2NF
คุณเห็นไหมว่า
มันมีรหัสวิชานี่
ชื่อวิชาเนี่
ต้องทำยังไงกับมัน
แยกมันออกมาซิแยก
อย่างไร เอาข้าวเหนียวก่อน
นะคะ แล้วลอง
ส่งมาให้อาจารย์ดูก่อนว่า
เข้าใจมากน้อยขนาดไหน
จริง ๆ
อยากให้เรียนในห้องมากกว่าแต่วันนี้ก็เอา
มานี้ก่อนแล้วกัน
ให้ทุกคนหายดีกลับมา อาทิตย์หน้าค่อย
เดินดูในห้องดีกว่า
วันนี้ก็
ประมาณนี้นะคะ เดี๋ยวเวลาที่เหลือให้ทำข้อนี้แล้วมาส่ง
วันนี้เลยยิ่งดี
นะคะ เวลาที่เหลือทำใส่กระดาษมาส่งอาจารย์
แล้วกันนะ
ก็ประมาณนี้ค่ะ เวลาที่เหลือทำให้เสร็จภายในวันนี้นะคะ
ข้อเดียวเองนะคะ ข้อเดียว
ใครสงสัยไหมคะ
ปุ๋ยสงสัยไหม
ปุ๋ยเปิดไมค์ได้หรือเปล่า
//ไม่มีค่ะ อาจารย์เดี๋ยวถ้เดี๋ยวให้อุบลไปส่งหรือยังไงคะเพราะว่าบนขึ้น
ไม่ ๆ ส่วนมากอยู่ในการอยู่หอนี่ล่ะ
ตอนนี้เหลืออยู่ประมาณ
ใส่ได้ ก็เอามา
//Ok Thank You
วันนี้ก็ประมาณนี้ค่ะ ขอบคุณทุกคนมากนะคะ
ที่ยังตั้งใจเรียนอยู่แล้วก็งานอย่าลืมส่งวันนี้นะคะ อยู่ DSS ก็
ทำให้เสร็จ
แล้วก็ฝากเพื่อนมาส่งรวมกันมาส่งก็ได้นะคะ ถ้าใครอยู่หอก็จะมาทำอยู่DSS ก็ได้หรือว่าทำเสร็จแล้วมาส่งที่
อาการก็ได้
โอเคค่ะ วันนี้ก็ประมาณนี้ค่ะ ขอบคุณล่ามด้วยนะคะ
ค่ะ ขอบคุณค่ะ
วันนี้ครบนะ
OK