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