บทที่ 3 การออกแบบฐานขอ้ มลู เพ่ือให้ได้ระบบฐานข้อมูลท่ีสามารถจัดเก็บข้อมูลที่จาเป็นต้องใช้งานตามความต้องการของ ผู้ใช้ ผู้ออกแบบฐานข้อมูลจาเป็นต้องศึกษารายละเอียดถึงขั้นตอนการออกแบบระบบฐานข้อมูลซง่ึ ใน บทน้ีได้กล่าวถึงข้ันตอนการออกแบบฐานข้อมูล ซ่ึงประกอบด้วย 4 ข้ันตอนดังน้ี ขั้นตอนการสารวจ และวิเคราะห์ความต้องการใช้งาน ขั้นตอนการออกแบบฐานข้อมูลในระดับแนวคิด (Conceptual Database Design) ที่นาเสนอผลการออกแบบฐานข้อมูลเป็นแผนภาพความสัมพันธ์ระหว่างข้อมูล (Entity Relationship Diagram หรอื E-R Diagram) ขนั้ ตอนการออกแบบฐานข้อมูลในระดับตรรกะ และสดุ ท้ายข้ันตอนการออกแบบฐานข้อมลู ในระดบั กายภาพ ข้นั ตอนการออกแบบฐานขอ้ มลู (Database Design) การออกแบบฐานข้อมูลเปน็ การวางแผนวา่ จะเกบ็ ขอ้ มูลอะไรบ้างท่ีจาเปน็ ต้องใชใ้ นฐานข้อมูล โดยพิจารณาตามความต้องการของผู้ใช้ระบบ ซ่ึงจะนาเสนอในรูปของแบบจาลองข้อมูลที่ช่วยให้ มองเห็นความสัมพันธ์ระหว่างข้อมูลทั้งหมด จากนั้นทาการปรับปรุงแบบจาลองข้อมูลให้ความ เหมาะสม ก่อนนาไปใช้กาหนดโครงสร้างทางกายภาพของฐานข้อมูลต่อไป ซึ่งมีรายละเอียดดังน้ี (พนิดา พานิชกุล และณัฐพงษ์ วารีประเสริฐ, 2552: 104-105; มณีโชติ สมานไทย, 2546: 59-64; บญุ สืบ โพธศ์ิ ร,ี สุระชยั พมิ พส์ าลี และไพบลู ย์ พวงวงศต์ ระกลู , 2546: 32-34) 1. การสารวจและวิเคราะห์ความต้องการใช้งาน (Requirements Analysis) เป็นการ สารวจหรือวเิ คราะหห์ าว่าผ้ใู ช้ต้องการจัดเก็บข้อมูลอะไรบ้างลงในฐานขอ้ มลู เพือ่ นาข้อมูลทไ่ี ด้ไปใช้ใน ข้ันตอนถัดไป 2. การออกแบบฐานขอ้ มลู ในระดบั แนวคดิ (Conceptual Design) เป็นข้นั ตอนการศึกษา คุณสมบัติและกาหนดความสัมพันธร์ ะหว่างข้อมูลตามความตอ้ งการของผ้ใู ช้งาน น้ันคือออกแบบเป็น โครงสรา้ งของฐานขอ้ มูลท่ีคิดไว้ จากนนั้ ถ่ายทอดออกมาในรูปแบบของแผนภาพความสัมพันธร์ ะหว่าง ข้อมลู (E-R Diagram) หรอื แผนภาพอี-อาร์ ทง่ี า่ ยในการทาความเข้าใจ 3. การออกแบบฐานข้อมูลในระดับตรรกะ (Logical Design) เป็นการนาความสัมพันธ์ ของข้อมูลท่ีแสดงด้วยแผนภาพความสัมพันธ์ระหว่างข้อมูลมาแปลงเป็นรีเลชันหรือตารางตาม แบบจาลองฐานข้อมูลเชิงสัมพันธ์ แต่รเี ลชนั ท่ไี ด้ยังไม่เหมาะสาหรับจัดเก็บข้อมลู จริง เนื่องจากอาจจะ เกิดความซ้าซ้อนของข้อมูลได้ ดังน้ันจะต้องปรับโครงสร้างข้อมูลให้อยู่ในรูปแบบบรรทัดฐาน (Normalization) ซึ่งจะทาให้ได้รีเลชันจานวนมากขึ้นกว่าเดิม แต่สามารถกาจัดความซ้าซ้อนของ ข้อมูล ส่งผลใหส้ ามารถนาไปสร้างตารางในฐานขอ้ มูลเพื่อจัดเก็บข้อมูลได้จริงต่อไป
44 4. การออกแบบฐานข้อมลู ในระดบั กายภาพ (Physical Design) เปน็ การสร้างรเี ลชันหรอื ตารางในฐานข้อมลู เพ่อื เกบ็ ข้อมูล โดยดาเนนิ การผ่านซอฟตแ์ วร์ในการบรหิ ารจัดการฐานข้อมลู เช่น Oracle, MySQL และ SQL Server เปน็ ตน้ รวมทงั้ เป็นการสร้างโครงสร้างการจัดเก็บต่าง ๆ ใน ฮารด์ ดสิ ก์ การสร้างดัชนีเพือ่ ชว่ ยเพิม่ ประสทิ ธิภาพในการเรียกดขู ้อมูล การกาหนดสิทธใิ หผ้ ู้ใชใ้ นการ เข้าใช้งานข้อมลู ซ่ึงผู้ใช้แตล่ ะคนจะมสี ทิ ธิในการเขา้ ถึงขอ้ มลู ท่ีแตกต่างกันตามความเหมาะสมหรือ หน้าทข่ี องผูใ้ ช้แตล่ ะคน เชน่ สิทธิในการเรียกดู การเพิ่ม การแก้ไข และการลบข้อมูล เป็นต้น การออกแบบฐานข้อมูลในระดับแนวคิด ข้ันตอนการออกแบบฐานข้อมูลในระดับแนวคิดจะระบุความต้องการข้อมูลที่จาเป็นต้องใช้ ภายในระบบท่ีจะพฒั นาฐานข้อมูล ผู้ออกแบบฐานข้อมูลจะต้องนาความต้องการเหลา่ น้นั มาสร้างเป็น แผนภาพความสัมพันธ์ระหว่างข้อมูล (Entity Relationship Diagram) ซึ่งแผนภาพน้ีจะนาเสนอ รายละเอียดของข้อมูลท่ีต้องการจัดเก็บของระบบในรูปแบบกราฟิกท่ีทาความเข้าใจได้ไม่ยากนัก เพื่อให้เกิดความเข้าใจตรงกันระหว่างผู้ใช้งานข้อมูลกับผู้ออกแบบฐานข้อมูล สาหรับหัวข้อนี้จะ นาเสนอรายละเอยี ดของแผนภาพความสัมพันธร์ ะหวา่ งข้อมูล เพ่ือใหผ้ อู้ อกแบบนาไปใช้เป็นเครื่องมือ ในการออกแบบฐานข้อมูลต่อไป (สุจิตรา อดุลย์เกษม, 2553: 95-123; โอภาส เอ่ืยมสิริวงศ์, 2551: 156-188; วเิ ชยี ร เปรมชัยสวสั ด์ิ, 2556: 245-267) 1. ความหมายของแผนภาพความสมั พันธร์ ะหว่างข้อมูล แผนภาพความสมั พันธร์ ะหว่างข้อมูลหรือแผนภาพอีอาร์ (Entity Relationship Diagram หรือ E-R Diagram) ถูกพัฒนาข้ึนในปี ค.ศ. 1976 โดย ปีเตอร์ เชน (Peter Chen) ซ่ึงเป็นแผนภาพที่ นามาใช้ในการนาเสนอรายละเอียดและความสัมพันธ์ระหว่างข้อมูลต่าง ๆ ท่ีต้องจัดเก็บลงใน ฐานข้อมูล ที่นาเสนอในรูปแบบแผนภาพท่ีช่วยให้ง่ายในการทาความเข้าใจ และใช้ในการสื่อสารกับ บุคคลต่างๆ ที่เกี่ยวข้องกับการออกแบบฐานข้อมูล เช่น นักวิเคราะห์ระบบ นักออกแบบฐานข้อมูล และนกั เขียนโปรแกรม เป็นตน้ ซึ่งทาใหฐ้ านขอ้ มูลที่ได้มีความถกู ต้อง และสอดคล้องกบั ความต้องการ ของผู้ใช้งาน 2. ส่วนประกอบของแผนภาพความสมั พนั ธร์ ะหวา่ งข้อมลู ในการสร้างแผนภาพอีอาร์มีส่วนประกอบสาคัญ 3 ส่วนคือ เอนทิตี้ (Entity) แอตตริบิวต์ (Attribute) และความสัมพันธ์ (Relationship) ซ่ึงส่วนประกอบเหล่านี้จะใช้สัญลักษณ์แทน ความหมายตามรปู แบบดงั้ เดิมของ Peter Chen Model ทป่ี ัจจบุ ันยงั นยิ มใชง้ านอยู่ จึงจาเป็นจะต้อง ทาความเข้าใจในส่วนประกอบของการสรา้ งแผนภาพอีอาร์ดังนี้ 2.1 เอนทติ ี้ (Entity) หมายถงึ วัตถหุ รือสิ่งทเ่ี ราสนใจจะจัดเกบ็ รายละเอียดของวัตถนุ ้ันไว้ ในฐานข้อมูล วัตถุน้ันอาจจะเป็นบุคคล สัตว์ สิ่งของหรือวัตถุ เหตุการณ์ และสถานท่ี เป็นต้น ซึ่ง เอนทิต้ีที่เราสนใจอาจสามารถจับต้องได้ หรือเป็นนามธรรมท่ีจับต้องไม่ได้ ตัวอย่างเช่น กรณีอยู่ใน
45 สถาบันการศึกษามีตัวอย่างเอนทิต้ีดังน้ี อาจารย์ นักเรียน/นักศึกษา คณะ รายวิชา การลงทะเบียน เรียน หนังสือ สมาชิกห้องสมุด ส่วนในบริษัทห้างร้านเช่น พนักงาน/ลูกจ้าง สินค้า การซื้อขายสินค้า และลูกค้า เป็นต้น สาหรับการต้ังชื่อให้กับเอนทิต้ีจะใช้คานาม ส่วนสัญลักษณ์ใช้รูปส่ีเหล่ียมผืนผ้า แทนเอนทิตี้ สามารถแบ่งเอนทิต้อี อกเปน็ 2 ประเภทดงั นี้ 2.1.1 เอนทิต้ีปกติ (Regular Entity หรือ Strong Entity) คือเอนทิต้ีท่ีเราสนใจ จัดเก็บไว้ในฐานข้อมูล ซ่ึงเอนทิตี้น้ีเกิดได้ขึ้นเอง และการเกิดจะเป็นอิสระหรือไม่ได้ข้ึนอยู่กับเอนทิต้ี อ่ืน ตัวอย่างดงั แสดงดังภาพท่ี 3.1 อาจารย์ นกั ศึกษา ภาพที่ 3.1 ตัวอย่างของเอนทิตป้ี กติ (Regular Entity) ประกอบด้วยเอนทติ ้ีอาจารย์ และนักศกึ ษา 2.1.2 เอนทิต้ีอ่อนแอ (Weak Entity) คือ เอนทิต้ีที่การเกิดหรือการคงอยู่จะขึ้นอยู่ กับเอนทิต้ีอ่ืนที่มีความสัมพันธ์กัน ไม่สามารถเกิดขึ้นได้เอง และถ้าเอนทิต้ีที่สัมพันธ์อยู่น้ันถูกลบไปจะ ทาให้เอนทิตี้ประเภทน้ีถูกลบไปด้วย เช่น เอนทิต้ีการยืมหนังสือในห้องสมุด ซ่ึงเอนทิต้ีนี้จะเกิดจาก เอนทิตี้หนังสือกับเอนทิตี้สมาชิกห้องสมุด เป็นต้น สัญลักษณ์ท่ีใช้แทนเป็นรูปส่ีเหล่ียมผืนผ้าสองรูป ซอ้ นกันดังภาพท่ี 3.2 เอนทติ ีก้ ารยมื หนังสอื ทกี่ ารเกดิ จะข้นึ อยกู่ ับเอนทิต้ีหนงั สือกับสมาชกิ หอ้ งสมุด การยมื หนังสือ ภาพที่ 3.2 ตวั อย่างของเอนทิตีอ้ อ่ นแอ (Weak Entity) คือเอนทิตี้การยมื หนังสือ 2.2 แอตตริบิวต์ (Attribute) หมายถึง คุณสมบัติต่างๆ ของเอนทิตี้ หรือรายละเอียดของ เอนทิตท้ี เ่ี ราต้องการจัดเก็บไว้ในฐานข้อมลู เช่น เอนทิตน้ี กั ศกึ ษา มคี ุณสมบัตหิ รอื แอตตริบวิ ต์ต่างๆ ท่ี ต้องการจดั เกบ็ ในฐานข้อมูลดงั นี้ รหัสนักศึกษา คานาหน้าชอ่ื ช่อื นามสกลุ วันเดอื นปีเกิด เพศ และที่ อยู่ เป็นต้น สาหรับการตั้งช่ือให้กับแอตตริบิวต์จะใช้คานาม ใช้วงรีแทนสัญลักษณ์ของแอตตริบิวต์ดัง ภาพท่ี 3.3 คานาหน้าชอื่ ช่ือ รหัสนักศึกษา นามสกลุ นกั ศึกษา ภาพท่ี 3.3 การใช้สญั ลักษณแ์ ทนแอตตรบิ วิ ตร์ หสั นักศึกษา คานาหน้าชอ่ื ชอื่ นามสกลุ
46 จากภาพท่ี 3.3 แอตตริบิวต์รหัสนักศึกษาจะขีดเส้นใต้ กล่าวคือแอนทิต้ีนักศึกษามีแอตตริ บิวต์รหสั นกั ศกึ ษาเปน็ คยี ห์ ลกั (Primary Key) แอตตรบิ วิ ตส์ ามารถแบง่ ออกได้ 5 ประเภทดังน้ี 2.2.1 ซิมเพิลแอตตริบิวต์ (Simple Attribute หรือ Atomic Attribute) คือ แอตตริบิวต์ท่ีค่าข้อมูลไม่สามารถแบ่งเป็นแอตตริบิวต์ย่อยลงไปได้อีก กล่าวคือถ้าแบ่งย่อยแล้วไม่ สามารถสื่อหรือมคี วามหมายได้ เชน่ แอตตรบิ วิ ตเ์ พศ เงินเดอื น และราคาขาย เป็นตน้ 2.2.2 คอมโพสิตแอตตริบิวต์ (Composite Attribute) คือแอตตริบิวต์ท่ีค่าข้อมูล สามารถแบ่งเป็นแอตตริบิวต์ย่อยแยกเก็บข้อมูลน้ันได้ เช่น แอตตริบิวต์ที่อยู่ ซ่ึงภายในประกอบด้วย บ้านเลขท่ี หมู่บ้าน ตาบล อาเภอ และจังหวัด ซ่ึงเราสามารถแบ่งออกเป็นแอตตริบิวต์ย่อยได้และ สามารถยงั คงส่ือความหมายได้ เป็นต้น 2.2.3 มัลติแวลูแอตตริบิวต์ (Multi Valued Attribute) คือแอตตริบิวต์ที่ค่าข้อมูล เป็นหลายค่าข้อมูล เช่น แอตตริบิวต์วุฒิการศึกษาของอาจารย์ในสถาบันการศึกษาสามารถมีได้หลาย ค่าข้อมูล เช่น ปริญญาตรี ปริญญาโท และปริญญาเอก เป็นต้น ซึ่งการจัดเก็บข้อมูลประเภทนี้ใน ฐานข้อมูลจะต้องปรับให้เป็นซิมเพิลแอตตริบิวต์ก่อน โดยสามารถสร้างเป็นเอนทิต้ีใหม่แยกเก็บ ตา่ งหาก สัญลกั ษณท์ ใี่ ช้แทนจะเป็นวงรีสองรูปซ้อนกนั ดงั ภาพที่ 3.4 รหสั อาจารย์ ช่อื นามสกลุ อาจารย์ วฒุ ิการศกึ ษา ภาพท่ี 3.4 แอตตริบวิ ตม์ ลั ตแิ วลู วฒุ กิ ารศึกษา 2.2.4 ซิงเกิลแวลูแอตตริบวิต์ (Single Valued Attribute) คือแอตตริบิวต์ที่มีค่า ข้อมูลได้เพียงค่าเดียว เช่น นักศึกษามีค่าข้อมูลของแอตตริบิวต์รหัสนักศึกษาเพียงค่าเดียว มีค่าวัน เดือนปีเกิดค่าเดียว และมีค่าของเพศได้ค่าเดียว เป็นต้น แต่มีบางกรณีที่ค่าข้อมูลที่จัดเก็บในซิลเกิล แวลูแอตตริบิวต์อาจเป็นแอตตริบิวต์ท่ีสามารถแบ่งย่อยได้ เช่น ค่าข้อมูลของแอตตริบิวต์รหัสวิชา st50305 ซ่ึง รหัส 2 ตัวแรกหมายถึงสาขาวิชาที่เปิดสอน โดยเป็นค่าข้อมูลเดียวก็จริงแต่สามารถ แบ่งเป็นแอตตริบิวต์ย่อยได้แต่ไม่นิยมนาไปใช้จริง เนื่องจากมีความยุ่งยากในการบริหารจัดการขอ้ มลู เป็นต้น 2.2.5 ดิไรฟ์แอตตริบิวต์ (Derived Attribute) คือแอตตริบิวต์ท่ีค่าข้อมูลได้จากการ คานวณจากแอตตริบิวต์อื่นที่มีอยู่แล้ว จึงไม่จาเป็นต้องจัดเก็บแอตตริบิวต์ประเภทน้ีไว้ในฐานข้อมูล ซ่ึงค่าข้อมูลมีการเปลี่ยนแปลงและไม่เป็นปัจจุบัน เช่น แอตตริบิวต์อายุ ซึ่งสามารถคานวณได้จาก แอตตรบิ วิ ต์วันเดือนปเี กดิ เป็นตน้ สญั ลักษณ์ท่ใี ช้แทนจะเป็นวงรีเส้นขอบประ ดังภาพที่ 3.5
47 รหัสอาจารย์ ชื่อ นามสกุล อายุ อาจารย์ วุฒิการศึกษา ภาพท่ี 3.5 ดิไรฟ์แอตตรบิ วิ ต์ อายุ ดังน้ันแอตตริบิวต์ของแต่ละตารางในฐานข้อมูลจะต้องเป็นซิมเพิลแอตตริบิวต์ เพ่ือ ประสิทธิภาพในการเพิ่ม แก้ไข และลบข้อมูล รวมทั้งความยืดหยุ่นในการนาข้อมูลแต่ละแอตตริบิวต์ ไปใชใ้ นการออกรายงานตามความต้องการทห่ี ลากหลายของผูใ้ ช้งาน นอกจากน้ีทุกเอนทติ ี้ในแผนภาพ อีอาร์จะตอ้ งมกี ารเลอื กหรือกาหนดแอตตรบิ ิวต์คียห์ ลักเสมอ 2.3 ความสัมพันธ์ (Relationship) หมายถึง ความสัมพันธ์ระหว่างเอนทิต้ี หรือเป็นการ อธิบายว่าแต่ละเอนทิตี้มีความสัมพันธ์ของข้อมูลกันอย่างไร โดยจะต้องกาหนดช่ือของแต่ละ ความสัมพันธ์ ส่วนการตั้งช่ือจะใช้คากริยาเพ่ือแสดงถึงการกระทา หรือถูกกระทา เช่น ให้คาปรึกษา สอน ลงทะเบยี น และยมื คืนหนังสือ เป็นต้น สญั ลักษณ์ที่ใช้แทนจะเป็นสี่เหลีย่ มข้าวหลามตดั ดงั ภาพ ท่ี 3.6 รายละเอยี ดของความสัมพันธม์ ดี ังน้ี อาจารย์ สอน รายวชิ า ภาพที่ 3.6 ความสมั พันธร์ ะหว่างเอนทติ ี้อาจารย์กบั รายวชิ า โดยอาจารย์สอนรายวิชานน่ั เอง 2.3.1 ดีกรีของความสัมพันธ์ (Relationship Degree) หมายถึง จานวนเอนทิต้ีที่มี ส่วนร่วมหรือสัมพันธ์กันในแต่ละความสัมพันธ์ ในการสร้างแผนภาพอีอาร์จะมีดีกรีของความสัมพันธ์ อยู่ 3 ชนิด ดังนี้ 2.3.1.1 ความสัมพันธ์ภายใน 1 เอนทิต้ี (Unary Relationship หรือเรียกว่า Recursive Relationship) เป็นความสัมพันธ์ระหว่างรายการข้อมูลภายในเอนทิตี้เดียวกัน เช่น ตาแหน่งหัวหน้าแผนก ซึ่งเลือกจากบุคลากรในแผนกนั้นมาทาหน้าท่ี ดังนั้นเอนทิต้ีบุคลากรจึงมี ความสมั พันธภ์ ายในเอนทิต้ีเอง ดงั ภาพที่ 3.7
48 อาจารย์ เป็นหัวหนา้ งาน ภาพท่ี 3.7 ดีกรคี วามสัมพนั ธ์ภายใน 1 เอนทิต้ี (Unary Relationship) 2.3.1.2 ความสัมพันธ์ระหว่าง 2 เอนทิตี้ (Binary Relationship) เป็น ความสัมพันธ์ที่เกิดจากรายการข้อมูลของเอนทิต้ีหน่ึงมีความสัมพันธ์กับรายการข้อมูลของอีกเอนทิตี้ หน่ึง ซ่ึงเป็นดีกรีท่ีพบมากที่สุดในการวิเคราะห์ความสัมพันธ์ระหว่างเอนทิต้ีของแผนภาพอีอาร์ ซึ่งได้ แสดงตัวอยา่ งดงั ภาพท่ี 3.6 2.3.1.3 ความสัมพันธ์ระหว่าง 3 เอนทิตี้ (Ternary Relationship) เป็น ความสัมพันธ์ที่เกิดข้ึนจากรายการข้อมูลของเอนทิต้ี 3 เอนทิต้ีมีความสัมพันธ์กัน ซ่ึงไม่สามารถแยก พิจารณาทีละ 2 เอนทิต้ีได้ เช่น ความสัมพันธ์สอนท่ีมี 3 เอนทิต้ีเกี่ยวข้องกันคือ อาจารย์ รายวิชา และนักศึกษา ดงั ภาพที่ 3.8 อาจารย์ สอน รายวชิ า นักศกึ ษา ภาพที่ 3.8 ดกี รคี วามสัมพนั ธ์ระหว่าง 3 เอนทิต้ี (Ternary Relationship) 2.3.2 ชนิดของความสัมพันธ์ (Connectivity) คือประเภทความสัมพันธ์ระหว่าง เอนทิตี้ที่จาแนกตามรายการขอ้ มลู ของแต่ละเอนทิต้ที ีส่ มั พันธก์ นั โดยแบ่งเป็น 3 ประเภทดังนี้ 2.3.2.1 ความสัมพันธ์แบบหนึ่งต่อหนึ่ง (One to One Relationship หรือ 1:1) เป็นความสมั พนั ธ์ท่ีเกิดข้ึนเมื่อรายการข้อมูล 1 รายการของเอนทติ ้ีหนง่ึ สัมพนั ธ์กับรายการข้อมูล เพียงรายการเดียวของอีกเอนทิตี้หนึ่งท่ีสมั พันธ์กัน เช่น เอนทิตี้นักศึกษาสามารถเป็นประธานได้เพยี ง ชมรมเดียว และเอนทิตี้ชมรมหนึ่งชมรมมีประธานชมรมได้เพียงคนเดียว เป็นต้น สามารถเขียนเป็น แผนภาพอีอาร์ดังภาพที่ 3.9
49 นักศกึ ษา 1 เปน็ ประธาน 1 ชมรม ภาพที่ 3.9 ความสัมพันธแ์ บบหนึง่ ตอ่ หนง่ึ 2.3.2.2 ความสัมพันธ์แบบหนึ่งต่อหลาย (One to Many Relationship หรือ 1:m) เป็นความสัมพันธ์ท่ีรายการข้อมูล 1 รายการของเอนทิต้ีหน่ึงสัมพันธ์กับอีกหลายรายการข้อมูล ของเอนทิตี้หน่ึงท่ีสัมพันธ์กัน เช่น เอนทิตี้อาจารย์จะสังกัดเอนทิต้ีคณะได้เพียงคณะเดียว แต่เอนทิต้ี คณะสามารถมีอาจารย์สังกัดไดห้ ลายคน เป็นตน้ แสดงเปน็ แผนภาพอีอาร์ได้ดังภาพที่ 3.10 อาจารย์ M สงั กัด 1 คณะ ภาพที่ 3.10 ความสัมพนั ธแ์ บบหนงึ่ ตอ่ หลาย 2.3.2.3 ความสัมพันธ์แบบหลายต่อหลาย (Many to Many Relationship หรือ m:n) เปน็ ความสมั พันธท์ ่ีหลายรายการขอ้ มูลของเอนทิตห้ี นงึ่ สัมพนั ธก์ ับหลายรายการข้อมูลของ อีกเอนทติ ้หี นึ่ง เช่น เอนทิตส้ี มาชกิ ห้องสมุด 1 คนสามารถยมื หนังสือได้หลายเล่ม และเอนทติ หี้ นังสือ 1 เลม่ สามารถใหส้ มาชกิ ห้องสมดุ ยืมได้หลายคน เปน็ ตน้ แสดงเปน็ แผนภาพอีอาร์ได้ดงั ภาพท่ี 3.11 สมาชิก M ยืม N หนงั สอื ภาพท่ี 3.11 ความสมั พนั ธแ์ บบหลายต่อหลาย สาหรบั การเขยี นแผนภาพออี ารส์ ามารถสรปุ เป็นข้นั ตอนได้ดังน้ี 1. สร้างเอนทิต้จี ากความต้องการของผใู้ ช้งาน 2. พิจารณาคณุ สมบตั ิหรือแอตตรบิ วิ ต์ของแตล่ ะเอนทิตี้ 3. จากนัน้ พจิ ารณาแอตตรบิ ิวต์เพ่อื กาหนดคีย์หลัก (Primary Key) ให้แต่ละเอนทติ ้ี 4. พิจารณาความสัมพันธ์ระหว่างเอนทิตี้ โดยนาแต่ละเอนทิต้ีมาพิจารณาตามความ เหมาะสมวา่ สมั พนั ธ์กับเอนทิตี้ใดบ้างตามขอ้ กาหนดหรือความต้องการของผูใ้ ช้ 5. นารายละเอยี ดท่ีได้มาเขยี นเป็นแผนภาพอีอาร์ของฐานข้อมลู และตรวจสอบขอ้ มูลอีกครั้ง วา่ ตรงตามความตอ้ งการของผใู้ ช้งานหรอื ไม่
50 การออกแบบฐานข้อมลู ในระดับตรรกะ การออกแบบฐานข้อมูลในระดับตรรกะน้ันข้ันตอนสาคัญ 2 ข้ันตอนคือ ข้ันตอนการแปลง ข้อมูลในระดับแนวคิดให้อยู่ในรูปแบบจาลองข้อมูลเลือกใช้งาน น่ันคือแบบจาลองข้อมูลเชิงสัมพันธ์ จงึ เปน็ การแปลงแผนภาพอีอาร์เปน็ รีเลชันหรือตาราง 2 มิติ ซง่ึ ประกอบด้วยแถวและคอลัมน์ ข้ันตอน ถัดมาเป็นการปรับรีเลชันท่ีได้ให้มีคุณสมบัติเป็นบรรทัดฐาน ซึ่งเป็นการลดความซ้าซ้อนของข้อมูลที่ จดั เก็บในรีเลชนั ได้จากการแปลงแผนภาพอีอาร์ ซงึ่ มรี ายละเอยี ดดังนี้ 1. การแปลงแผนภาพอีอาร์เปน็ รเี ลชนั การแปลงแผนภาพอีอาร์เป็นรีเลชันเป็นกระบวนการหน่ึงในการออกแบบฐานข้อมูลใน ระดบั ตรรกะ เพอ่ื ท่จี ะนาไปใชอ้ อกแบบฐานข้อมูลในระดับกายภาพต่อไป โดยมีรายละเอยี ดการแปลง แผนภาพอีอาร์เป็นรีเลชัน 2 ข้ันตอนหลักดังน้ี (พนิดา พานิชกุล และณัฐพงษ์ วารีประเสริฐ, 2552: 87-94; โอภาส เอีย่ มสริ วิ งศ์, 2551: 228-242) 1.1 การปรับแผนภาพอีอาร์ให้มีความเหมาะสม แผนภาพอีอาร์ได้มาจากข้ันตอนก่อนหน้าอาจยังมลี ักษณะไม่เหมาะสมท่ีจะนาไปสร้าง รีเลชันในฐานข้อมูลเชิงสัมพันธ์ โดยต้องพิจารณาถึงแอตตริบิวต์ที่ไม่เหมาะสม ได้แก่ คอมโพสิต แอตตรบิ วิ ต์ และมัลติแวลแู อตตรบิ วิ ต์ ส่วนดิไรฟแ์ อตตริบวิ ต์จะไม่นิยมจัดเก็บในฐานข้อมูลอยแู่ ล้ว ซึง่ แอตตริบิวตไ์ ม่เหมาะสมเหล่านัน้ จะต้องกาจดั ออกไปซึ่งมวี ธิ ีการกาจัดดงั น้ี 1.1.1 วิธีการกาจดั คอมโพสิตแอตตริบวิ ต์หรือแอตตริบิวต์มีหลายองคป์ ระกอบ เมือ่ จะ แปลงเปน็ รเี ลชนั จะต้องแยกเป็นแอตตริบิวตย์ อ่ ยหรือซิมเพลิ แอตตริบวิ ต์ ซึง่ การแยกน้ันใหพ้ จิ ารณาถึง ความจาเป็นในการใช้งาน โดยเมื่อแยกแล้วอาจเป็นแอตตริบิวต์รองรับหรือช่วยให้การสืนค้นข้อมูลได้ ตรงตามความต้องการของผู้ใช้งานมากท่ีสุด เช่น แอตตริบิวต์ที่อยู่ของนักศึกษา สามารถแบ่งเป็น แอตตริบิวตย์ อ่ ยได้ดงั น้ี บ้านเลขที่ ตาบล อาเภอ และจงั หวัด เปน็ ตน้ ดังภาพท่ี 3.12
รหสั นกั ศึกษา ช่ือ นามสกลุ 51 นักศกึ ษา ท่ีอยู่ จะ ให้กาจดั คอมโพสติ ได้ แอตตรบิ วิ ต์ ชอ่ื นามสกุล จงั หวดั รหสั นกั ศึกษา บา้ นเลขที่ นักศกึ ษา ตาบล อาเภอ ภาพท่ี 3.12 การกาจัดคอมโพสติ แอตตรบิ ิวต์ แต่มีบางกรณีสามารถกาจัดคอมโพสิตแอตตริบวิ ต์ โดยการยุบเป็นแอตตริบิวต์เดียวได้ ข้ึนอยู่กับความเหมาะสม กล่าวคือแอตตริบิวต์ที่อยู่ของนักศึกษา สามารถจัดเก็บข้อมูลท่ีอยู่รวมไว้ใน แอตตริบิวตเ์ ดียวกไ็ ด้เชน่ กัน โดยให้ยดึ ตามการนาไปใช้งานเป็นหลัก 1.1.2 วิธีการกาจัดมัลติแวลูแอตตริบิวต์หรือแอตตริบิวต์ที่มีได้หลายค่า ให้กาจัด แอตตริบิวต์ดงั กลา่ ว โดยแปลงเปน็ เอนทิตใ้ี หม่ พร้อมทง้ั พิจารณาและกาหนดแอตตริบิวต์ให้กบั เอนทิต้ี ใหม่ตามรายละเอียดท่ีจัดเก็บ จากนั้นกาหนดคีย์หลักให้กับเอนทีตี้ใหม่ โดยให้นาคีย์หลักจากเอนทิตี้ เดิมมาร่วมเป็นคีย์หลักของเอนทิตี้ใหม่ด้วย ตัวอย่างเช่น แอตตริบิวต์วุฒิการศึกษาของอาจารย์ สามารถแปลงเปน็ เอนทติ ีใ้ หม่ ดงั ภาพที่ 3.13 (a) และ 3.13 (b) รหสั อาจารย์ ชอ่ื นามสกลุ วุฒิการศกึ ษา อาจารย์ ภาพที่ 3.13 (a) แอตตริบิวต์ท่ีเป็นมลั ติแวลู วฒุ กิ ารศึกษา
52 จากภาพที่ 3.13 (a) ทาการกาจัดแอตตริบิวต์วุฒิการศึกษา โดยกาหนดเป็นเอนทิตี้ ใหม่คือ เอนทิตี้วุฒิการศึกษาดังภาพท่ี 3.13 (b) จากนั้นกาหนดแอตตริบิวต์คีย์หลักให้กับเอนทิตี้ใหม่ คอื รหัสอาจารย์ และรหัสวฒุ ิ รหัสวุฒิ รหัสอาจารย์ ชอ่ื วุฒิ วุฒกิ ารศึกษา ระดับ สถาบนั ท่ีจบ ภาพที่ 3.13 (b) กาหนดเป็นเอนทิตใี้ หม่ สว่ นเอนทิต้ีเดมิ จะมีแอตตริบิวต์ดงั ภาพท่ี 3.13 (c) รหสั อาจารย์ ชือ่ นามสกลุ อาจารย์ ภาพท่ี 3.13 (c) เอนทิตเี้ ดมิ ที่กาจัดมัลตแิ วลูแอตตริบวิ ต์ไปแลว้ จากภาพท่ี 3.13(a) ถึง 3.13(c) ได้กาจัดแอตตริบิวต์มัลติแวลูออกไปเป็นเอนทิต้ีใหม่ คอื วฒุ กิ ารศึกษา จากนนั้ กาหนดแอตตริบวิ ตเ์ พิม่ เตมิ ตามความเหมาะสม พรอ้ มให้กาหนดคยี ห์ ลกั โดย นาแอตตรบิ ิวต์คีย์หลักจากเอนทิตเ้ี ดิม (อาจารย์) มาร่วมเปน็ คียห์ ลักของเอนทิต้ีใหม่ (วฒุ กิ ารศึกษา) 1.1.3 การแปลงแผนภาพอีอาร์เปน็ รเี ลชนั เมื่อปรับแผนภาพอีอาร์ให้มีความเรียบร้อยแล้วขั้นตอนถัดไปเป็นการแปลง แผนภาพอีอารเ์ ป็นรีเลชนั ซง่ึ หลกั ในการแปลงจะแบง่ เป็น 2 สว่ นดงั น้ี 1.1.3.1 การแปลงเอนทิตเี้ ปน็ รเี ลชนั มขี ั้นตอนดังน้ี 1) เปล่ียนเอนทิตี้เป็นรีเลชันได้เลย โดยให้ตั้งช่ือรีเลชันเป็นช่ือเดียวกับ ช่อื เอนทิต้ี 2) แอตตริบิวต์ต่างๆ ของเอนทิตี้ให้แปลงเป็นแอตตริบิวต์ของรีเลชัน และใชช้ อ่ื ของแอตตริบิวตเ์ ป็นชือ่ เดยี วกัน 3) กาหนดแอตตริบวิ ต์คียห์ ลกั ของรีเลชันตามท่ีกาหนดให้กับเอนทติ ้ี ตัวอย่างภาพท่ี 3.14 แสดงการแปลงเอนทติ ี้เปน็ รเี ลชัน
53 รหสั อาจารย์ ชือ่ นามสกุล อาจารย์ ได้ รเี ลชนั อาจารย์ ชอ่ื นามสกลุ รหัสอาจารย์ ภาพท่ี 3.14 การแปลงเอนทิต้ีเป็นรีเลชัน 1.1.3.2 พิจารณาความสัมพันธ์ระหว่างเอนทิต้ี ซึ่งเป็นขั้นตอนการทาหลังจากแปลง เอนทติ เี้ ป็นรีเลชันหมดแล้ว โดยยดึ หลักดังนี้ 1) กรณคี วามสมั พันธร์ ะหวา่ งเอนทิตเ้ี ป็นแบบหน่งึ ต่อหลาย (1:M) ใหน้ าแอตตริ บิวต์คีย์หลักของเอนทิต้ีด้านท่ีความสัมพันธ์เป็น 1 มาใส่เป็นแอตตริบิวต์คีย์นอก (foreign key) ในรี เลชนั ของเอนทติ ีด้ ้านความสมั พันธเ์ ปน็ M ดงั ภาพที่ 3.15 รหสั อาจารย์ ชื่อ รหสั นักศกึ ษา ชื่อ อาจารย์ 1 ปรึกษา M นกั ศึกษา นามสกุล ได้ นามสกลุ รีเลชนั อาจารย์ นามสกลุ คีย์หลกั รหสั อาจารย์ ชอ่ื รีเลชันนกั ศกึ ษา นามสกลุ รหสั อาจารย์ รหสั นกั ศึกษา ชอื่ คียน์ อก ภาพท่ี 3.15 การแปลงแผนภาพอีอาร์งานอาจารยท์ ี่ปรกึ ษา (ความสมั พันธ์แบบหนึง่ ต่อหลาย)
54 จากภาพที่ 3.15 แสดงแผนภาพอีอาร์งานอาจารย์ที่ปรึกษา พบว่ามี ความสัมพันธ์ระหวา่ งเอนทติ ี้อาจารย์กับนกั ศึกษาแบบหน่งึ ต่อหลาย ใหด้ าเนนิ การแปลงเอนทติ ท้ี ั้งสอง เป็นรเี ลชนั ตามรายละเอียดจากขน้ั ตอนก่อนหน้า จากนนั้ พจิ ารณาคยี ์หลักของเอนทิต้ีดา้ นฝั่ง 1 นัน่ คือ เอนทิต้ีอาจารย์ซึ่งจะมีแอตตริบิวต์รหัสอาจารย์เป็นคีย์หลัก ให้นาแอตตริบิวต์ดังกล่าวใส่เป็นคีย์นอก ของรีเลชันท่ีแปลงมาจากเอนทิต้ีด้านฝั่ง M นั่นคือเอนทิตี้นักศึกษา ซึ่งจากเดิมเอนทิตี้น้ีจะ ประกอบด้วยแอตตริบิวต์รหัสนักศกึ ษา ชือ่ นามสกุล เม่ือแปลงเป็นรเี ลชนั แลว้ จะมแี อตตริบวิ ต์เพิ่มมา คือ แอตตริบวิ ต์รหสั อาจารย์ เพ่ือทาหน้าทเ่ี ป็นคยี น์ อกเชอื่ มโยงความสัมพันธ์ระหวา่ งสองรีเลชัน 2) กรณีความสัมพันธ์ระหว่างเอนทิตี้เป็นแบบหลายต่อหลาย (M:N) ให้แปลง ความสัมพันธ์ (relationship) ดังกล่าวเป็นรีเลชันใหม่ โดยคีย์หลักของรีเลชันใหม่จะประกอบด้วย แอตตรบิ ิวต์คีย์หลกั ที่มาจากเอนทติ ี้ท้ังสองรว่ มกนั พร้อมท้ังเป็นคีย์นอกเพ่ือเช่ือมโยงรเี ลชนั ทั้งสองกับ รีเลชันใหม่ หรืออาจมีแอตตริบิวต์อื่นของความสัมพันธ์น้ันร่วมเป็นคีย์หลักได้ ซ่ึงขึ้นอยู่กับความ เหมาะสมในการนาไปใช้งาน และถา้ ความสัมพนั ธน์ ้นั มีแอตตริบิวต์อ่ืนอย่แู ลว้ ให้นามาเป็นแอตตริบิวต์ ของรีเลชนั ใหมด่ ว้ ย ดังภาพท่ี 3.16 รหัสสมาชกิ ช่อื วันทยี่ มื เลขหนังสือ ชือ่ หนงั สือ สมาชิก M ยืม-คืน N หนังสือ ประเภทสมาชกิ วนั กาหนดส่ง วนั ท่ีคนื ช่อื ผูแ้ ต่ง นามสกลุ ได้ จานวนหนังสอื คีย์หลกั รเี ลชันสมาชกิ ประเภทสมาชิก รหัสสมาชิก ชอ่ื นามสกลุ คียห์ ลกั รีเลชันหนงั สอื เลขหนังสือ ช่ือหนงั สอื ชื่อผแู้ ตง่ จานวนหนงั สอื ทง้ั รหัสสมาชกิ และเลขหนงั สือ วนั ท่ียืมร่วมเป็นคียห์ ลกั รีเลชันยมื -คืน เป็นทง้ั คยี ห์ ลกั และคยี น์ อก รหสั สมาชิก เลขหนังสอื วันทยี่ มื วนั ทีค่ ืน วนั กาหนดส่ง ภาพท่ี 3.16 การแปลงแผนภาพอีอาร์งานยืมคนื หนังสือ (ความสมั พนั ธ์แบบหลายต่อหลาย)
55 จากภาพที่ 3.16 แผนภาพอีอาร์งานยืมคืนหนังสือท่ีมีความสัมพันธ์ระหว่าง เอนทิต้ีสมาชิกกับหนังสือแบบหลายต่อหลาย น่ันคือสมาชิก 1 คน สามารถยืมคืนหนังสือได้หลายเล่ม แต่ละเล่มยืมคืนได้หลายคร้ัง และหนังสือ 1 เล่มมีสมาชิกยืมได้หลายคน ให้แปลงเอนทิตี้สมาชิก และ หนังสือเป็นรีเลชันตามรายละเอียดที่ได้กล่าวมาแล้ว ส่วนความสัมพันธ์ยืม-คืนซึ่งเป็นความสัมพันธ์ แบบหลายต่อหลายก็ให้แปลงเป็นรเี ลชันนั้นคือ รีเลชันยืม-คืน จากนั้นแอตตริบิวต์คีย์หลักของเอนทิตี้ สมาชิก และหนังสอื มาประกอบเปน็ คยี ห์ ลักของรเี ลชันยืม-คนื และแอตตริบวิ ต์ดังกล่าวยงั เป็นคีย์นอก ด้วย เพื่อรักษาการเชื่อมโยงหรือสัมพันธ์ระหว่างรีเลชันในฐานข้อมูลเชิงสัมพันธ์ และจากตัวอย่าง คยี ห์ ลักของรเี ลชนั ยมื -คนื จะมีแอตตริบวิ ตว์ นั ทย่ี มื ร่วมเป็นคยี ์หลกั ดว้ ย ซง่ึ การพิจารณากาหนดคยี ์หลัก ของแต่ละรเี ลชัน นอกจากยึดหลักการแปลงแผนภาพอีอาร์เป็นรีเลชนั ตามความสมั พันธแ์ บบหลายต่อ หลายแล้ว ใหน้ าความตอ้ งการในการนาขอ้ มลู ไปใชง้ านมารว่ มพจิ ารณาแลว้ แต่กรณีไป 3) กรณคี วามสมั พันธร์ ะหวา่ งเอนทิตี้เป็นแบบหนึ่งต่อหนงึ่ (1:1) หลังจากแปลง แต่ละเอนทติ ี้เป็นรีเลชนั แล้ว ให้นาคียห์ ลกั ของเอนทิต้ีฝ่ังใดฝ่ังหนงึ่ ไปเปน็ คีย์นอกของเอนทติ ฝ้ี ่ังตรง ข้าม ดงั ภาพที่ 3.17 รหสั ชมรม ชอ่ื ทตี่ ั้ง รหสั นักศึกษา ชื่อ ชมรม 1 เป็นประธาน 1 นักศกึ ษา วันท่กี อ่ ตั้ง ได้ นามสกลุ รีเลชันชมรม รหสั ชมรม ช่อื ที่ตั้ง วนั ท่กี อ่ ตั้ง รหสั นกั ศกึ ษา นามสกลุ รีเลชนั นักศึกษา คียน์ อก รหัสนักศึกษา ชอ่ื ภาพท่ี 3.17 การแปลงแผนภาพอีอาร์งานกาหนดประธานชมรม (ความสัมพนั ธแ์ บบหนึ่งตอ่ หนง่ึ ) จากภาพที่ 3.17 แผนภาพอีอาร์แสดงความสัมพันธ์แบบหนึ่งต่อหน่ึง น่ันคือ ชมรม 1 ชมรมสามารถมีประธานชมรมได้เพียงคนเดียว และนักศึกษาสามารถเป็นประธานชมรมได้ เพียงชมรมเดียวหรือไม่จาเป็นต้องเป็นประธานก็ได้ เมื่อแปลงแต่ละเอนทิตี้เรียบร้อยแล้วจากน้ัน กาหนดคีย์นอกให้กับรีเลชัน โดยนาคีย์หลักของเอนทิต้ีนักศึกษาไปกาหนดเป็นคีย์นอกของเอนทิต้ี ชมรม ขอ้ สงั เกตในการกาหนดคีย์นอกของแตล่ ะเอนทิตีใ้ ห้พิจารณาคา่ ข้อมลู ทีเ่ กบ็ ลงในแอตตรบิ ิวต์คีย์ นอกของรเี ลชันจะต้องไม่เป็นค่านลั (Null) หรอื สามารถพิจารณาจากจานวนรายการข้อมลู ทเ่ี ป็นไปได้
56 ของแต่ละเอนทิต้ี โดยให้เลือกกาหนดคีย์นอกให้กับเอนทิต้ีท่ีมีจานวนรายการข้อมูลน้อยกว่า เพ่ือ หลีกเลยี่ งการเก็บค่านัลลงในแอตตริบวิ ตค์ ยี ์นอก 2. การทาให้รเี ลชันเป็นบรรทัดฐาน การปรับรีเลชันที่ได้จากแผนภาพอีอาร์ให้อยู่ในรูปแบบบรรทัดฐาน (Normal Form) เป็น การลดความซ้าซ้อนของข้อมูลในขั้นตอนการออกแบบฐานข้อมูลในระดับตรรกะก่อนนารีเลชันนั้นๆ ไปสร้างในฐานข้อมูลตามซอฟต์แวร์ระบบจัดการฐานข้อมูลท่ีเลือกใช้ ซ่ึงจะเป็นข้ันตอนการออกแบบ ฐานข้อมูลในระดับกายภาพ (Physical Design) ซ่ึงรายละเอียดของรูปแบบทัดฐานมีประเด็นที่ น่าสนใจดังน้ี 2.1 ความหมายของการทาให้เปน็ บรรทดั ฐาน (Normal Form) การทาให้เป็นบรรทัดฐาน (Normalization) เป็นกระบวนการหรือวิธีการปรับรีเลชัน ท่ีได้จากแผนภาพอีอาร์ (E-R diagram) ให้ง่ายต่อการจัดการข้อมูลหรือให้อยู่ในรูปแบบบรรทัดฐาน ซ่ึงจะช่วยลดพ้ืนที่ในการจัดเก็บข้อมูล ความซ้าซ้อนของข้อมูล และลดปัญหาในการเพิ่ม แก้ไข และ ลบข้อมูลที่ผิดพลาดลงได้ เช่น กรณีข้อมูลซ้าซ้อน จะพบปัญหาถ้าต้องการปรับปรุงข้อมูล อาจไม่ สามารถแก้ไขครบถ้วนทุกท่ีหรือไม่สอดคล้องกัน หรือถ้าต้องการเพ่ิมข้อมูลจะต้องกระทาซ้าๆ ใน หลายๆ ตารางท่ีจัดเก็บข้อมูลน้ันอยู่ เป็นต้น โดยจะวิเคราะห์ความสัมพันธ์ระหว่างแอตตริบิวต์ของ รีเลชันวา่ แอตตริบวิ ต์ใดควรอยู่ในรเี ลชันใด กรณพี บรีเลชนั ท่ีออกแบบไมเ่ หมาะสมจะทาการแตกเป็น รีเลชันย่อยต่อไปเพ่ือให้ได้รีเลชันที่เป็นบรรทัดฐาน ซึ่งเทคนิคนี้คิดค้นและพัฒนาโดย อี.เอฟ.คอดด์ (E.F.Codd) ประมาณปี ค.ศ. 1968 (วิภา เจริญภัณฑารักษ์, 2556: 283; อรยา ปรีชาพานิช, 2557: 218-219; สุจติ รา อดุลยเ์ กษม, 2553: 137) 2.2 ฟงั ก์ชันการขน้ึ ต่อกัน (Functional Dependency หรือ FD) การท่ีจะปรับรีเลชันให้อยู่ในรูปแบบบรรทัดฐานจาเป็นต้องศึกษาแนวคิดเก่ียวกับ ฟังกช์ นั การข้ึนต่อกนั ก่อน ซงึ่ ฟงั ก์ชนั การข้นึ ต่อกันจะกลา่ วถึงความสัมพันธ์ระหวา่ งแอตตรบิ วิ ต์ภายใน รีเลชันเดียวกัน โดยแอตตริบิวต์ที่เป็นคีย์หลักสามารถระบุค่าของแอตตริบิวต์อื่นในทัปเพิลเดียวกัน หรือถ้าทราบค่าของแอตตริบิวต์ที่เป็นคีย์หลัก ( เรียกว่า Determinant attribute ) แล้วจะทาให้ สามารถทราบค่าของทุกแอตตริบิวต์ (เรียกวา่ Dependent attribute) ในทัปเพลิ เดยี วกันของรีเลชัน นนั้ ได้เพียงทปั เพลิ หรือรายการเดยี ว ฟงั กช์ ันการข้ึนต่อกนั มีรูปแบบการขึ้นตอ่ กัน 3 รูปแบบดังน้ี (วภิ า เจริญภณั ฑารักษ,์ 2556: 296-301; อรยา ปรชี าพานิช, 2557: 216-218; โอภาส เอย่ี มสิรวิ งศ์, 2551: 246-249)
57 2.2.1 ฟงั กช์ นั การขึ้นตอ่ กบั แบบทั้งหมด (Fully Functional Dependency) ฟังก์ชันการข้ึนต่อกับแบบท้ังหมด หมายถึงแอตตริบิวต์ท่ีเป็นคีย์หลักสามารถ ระบุค่าของแอตตริบวิ ตอ์ ืน่ ๆ ทไ่ี ม่ใช่คยี ห์ ลกั ของรีเลชันนน้ั ได้ รายละเอยี ดดงั ภาพที่ 3.18 Fully Functional Dependency relation การลงทะเบยี น รหัสนักศึกษา รหัสวชิ า ช่อื รายวชิ า หมูเ่ รียน ภาพท่ี 3.18 แผนภาพฟงั ก์ชันการขนึ้ ต่อกันแบบทงั้ หมด จากภาพท่ี 3.18 เป็นแผนภาพฟังก์ชันการข้ึนต่อกัน (Functional Dependency Diagram หรือ FD Diagram) แบบทั้งหมดของรีเลชันการลงทะเบียน โดยประกอบด้วยแอตตริบิวต์ รหัสนักศึกษา รหัสวิชา ชื่อรายวิชา และหมู่เรียน โดยมีรหัสนักศึกษาและรหัสวิชาเป็นคีย์หลัก จาก แผนภาพสามารถอธิบายได้ว่าเมื่อทราบค่าของรหัสนักศึกษาและรหัสวิชา สามารถทราบค่าของชื่อ รายวิชา และหมเู่ รยี นในทปั เพลิ เดยี วกันเพยี งทปั เพลิ เดยี ว 2.2.2 การข้นึ ต่อกนั แบบบางสว่ น (Partial Dependency) ความสัมพันธ์แบบนี้จะเกิดขึ้นได้ก็ต่อเม่ือคีย์หลักเกิดจากแอตตริบิวต์หลายตัว มารวมกัน โดยจะเกิดขึ้นเมื่อมีแอตตริบิวต์บางตัวของคีย์หลัก สามารถระบุค่าของแอตตริบิวต์อื่นๆ ท่ี ไม่ใชค่ ียห์ ลกั ของรีเลชันได้ สามารถแสดงเป็นแผนภาพฟงั ก์ชนั การข้ึนต่อกัน ดงั ภาพท่ี 3.19 relation การลงทะเบียน รหัสนกั ศกึ ษา รหสั วิชา ช่อื รายวิชา หมเู่ รียน Partial Dependency ภาพที่ 3.19 แผนภาพฟงั กช์ นั การขึน้ ต่อกันแบบบางสว่ น จากภาพที่ 3.19 มแี อตตริบิวต์บางสว่ นท่ีไม่ใช่คียห์ ลักไปขน้ึ อยู่กับบางส่วนของคีย์หลัก นั่นคือ ช่ือรายวิชาไปข้ึนอยู่กับรหัสวิชา ซึ่งรหัสวิชาเป็นแอตตริบิวต์ท่ีประกอบกันเป็นคีย์หลักของ รีเลชันการลงทะเบียน หรืออาจกล่าวได้ว่า ถ้าทราบค่าของรหัสวิชาทาให้สามารถทราบค่าของชื่อ รายวชิ าในทัปเพลิ เดียวกันเพียงรายการเดยี วของรีเลชันนนั้ ได้
58 2.2.3 การขนึ้ ต่อกนั แบบทรานซทิ ฟี (Transitive Dependency) การข้ึนต่อกันแบบทรานซิทีฟ หมายถึง แอตตริบิวต์ท่ีไม่ใช้คีย์หลักของรีเลชัน สามารถระบคุ ่าของแอตตรบิ ิวตอ์ ืน่ ทไ่ี ม่ใชค่ ียห์ ลักในทัปเพิลเดยี วกันของรเี ลชนั ได้ ดงั ภาพท่ี 3.20 Fully Functional Dependency relation ท่ีปรกึ ษา รหัสนักศกึ ษา ชอื่ สกุล รหสั อาจารย์ ช่อื อาจารย์ Transitive Dependency ภาพที่ 3.20 แผนภาพฟังก์ชนั การขึน้ ต่อกนั แบบทรานซิทีฟ จากภาพท่ี 3.20 พบฟังก์ชันการข้ึนต่อกันแบบทรานซิทีฟในรีเลชันท่ีปรึกษา คือมีบาง แอตตริบิวต์ที่ไม่ใช่คีย์หลักสามารถระบุค่าของแอตตริบิวต์อื่นท่ีไม่ใช้คีย์หลักได้ จากตัวอย่างรหัส อาจารยซ์ งึ่ ไมไ่ ด้เปน็ คยี ์หลักของรีเลชนั ที่ปรกึ ษา แตส่ ามารถระบคุ ่าของช่อื อาจารย์ได้ นน้ั คอื เมือ่ ทราบ คา่ รหัสอาจารย์สามารถทราบค่าของชื่ออาจารย์ในทัปเพิลเดียวกันของรีเลชนั ทปี่ รึกษาไดเ้ พียงรายการ เดียว 2.3 กระบวนการทาใหเ้ ป็นบรรทัดฐาน (Normalization) เพ่ือทารีเลชันให้มีคุณสมบัติเป็นบรรทัดฐานจะมีข้ันตอนการดาเนินงานอย่างเป็น ลาดับขั้นอยู่ 6 ขั้นตอน ประกอบด้วยรูปแบบบรรทัดฐานในระดับที่ 1 (First Normal Form หรือ 1NF) ระดับท่ี 2 (Second Normal Form หรือ 2NF) ระดับที่ 3 (Third Normal Form หรือ 3NF) ระดับบอยส์คอดด์หรือ BCNF (Boyce Codd Normal Form) ระดับท่ี 4 (Fourth Normal Form หรอื 4NF) และระดบั ที่ 5 (Fifth Normal Form หรือ 5NF) ยิง่ ปรับรีเลชนั ใหเ้ ปน็ บรรทัดฐานในระดบั ท่ีสูงขน้ึ ยิง่ ทาใหร้ เี ลชันมีโครงสร้างที่เหมาะสมหรือดีข้นึ ตามลาดับ แตใ่ นทางปฏิบัตินยิ มดาเนินการถึง ระดับที่ 3 (3NF) เนื่องจากเป็นรูปแบบทเ่ี หมาะสมในการใช้งานจริง ส่วนในระดบั บอยสค์ อดด์ (BCNF) ระดับที่ 4 (4NF) และระดับที่ 5 (5NF) จะเกิดค่อนข้างยาก อย่างไรก็ตามในการเลือกปรับรีเลชันให้ เปน็ บรรทัดฐานนัน้ จะตอ้ งพิจารณาลกั ษณะความสัมพันธ์ของข้อมูล ประสทิ ธิภาพในการใช้งานข้อมูล ตามความต้องการของผู้ใช้เป็นหลัก อาจไม่จาเป็นต้องแตกเป็นรีเลชันย่อยมากจนทาให้ต้องเสียเวลา ในการเช่ือมโยงข้อมูลจากรีเลชันเพ่ือจัดทารายงานหรือสืบค้นข้อมูล ดังรายละเอียดต่อไปนี้ (พนิดา พานิชกุล และณัฐพงศ์ วารีประเสริฐ, 2552: 109-113; มณีโชติ สมานไทย, 2546: 79-89; บุญสืบ โพธิศ์ รี และคณะ, 2547: 59-65)
59 2.3.1 รูปแบบบรรทดั ฐานในระดบั ที่ 1 (First Normal Form หรือ 1NF) 1NF เป็นการกาจัดกลุ่มข้อมูลซ้า (Repeating Group) หรอื หลายคา่ ข้อมูลของ แตล่ ะทัปเพิล โดยกฎของ 1NF มีดงั น้ี “รีเลชันจะมีคุณสมบัติเป็น 1NF ได้ก็ต่อเมื่อ ทุกแอตตริบิวต์จะต้องเป็น Atomic (หรือค่า เดียว) กล่าวคือในแต่ละทัปเพิลมีค่าข้อมูลเพียงค่าเดียว หรือไม่มีค่าข้อมูลท่ีเรียกว่า กลุ่มข้อมูลซ้า (Repeating Group) และข้อมูลทุกแอตตริบิวต์ต้องมีค่าเดียว นั้นคือจะต้องกาหนดคีย์หลักให้กับ รีเลชันเสมอ คีย์หลักอาจกาหนดจากแอตตริบิวต์ใดแอตตริบิวต์หนึ่งหรือกลุ่มของแอตตริบิวต์ก็ได้ (1NF จะต้องมีคีย์หลกั เสมอ)” กรณีพบรีเลชันที่ไม่มีคุณสมบัติตามท่ีกาหนด คือมีแอตตริบิวต์ท่ีมีค่าเป็นกลุ่ม ข้อมูลให้ปรับค่าเหล่าน้ันเป็นค่าข้อมูลเดยี ว โดยแยกค่าข้อมูลในแอตตรบิ ิวต์นน้ั ออกเป็นแถวใหม่ เพิ่ม ข้อมูลท่ีเหมาะสมลงไปในแอตตริบิวต์ท่ีมีค่าว่างในแถวใหม่ จากนั้นให้กาหนดคีย์หลักให้กับรีเลชัน ดังกลา่ ว ตวั อยา่ งดังภาพที่ 3.21a, 3.21b relation การลงทะเบียน รหัสนกั ศกึ ษา ชื่อนักศึกษา รหสั วิชา ชอ่ื วิชา หนว่ ยกติ ภาค ปกี ารศึกษา เกรด 601391033 สมชาย IS50304, ฐานข้อมูลเบื้องต้น, 3, 1 2552 A 601391002 สมชาติ IS40304 สารสนเทศท้องถ่ิน 3 1 2552 B IS40304 สารสนเทศทอ้ งถน่ิ 3 A แถว 1.พจิ ารณาแอตตริบวิ ต์ท่ีมคี า่ ขอ้ มูลเปน็ กลมุ่ (repeating ใหม่ group) พรอ้ มเแยกขอ้ มลู เปน็ แถวใหม่ 2.เพม่ิ ขอ้ มูลทเ่ี หมาะสมลงไปในแอตตริบวิ ต์ ทมี่ ีคา่ วา่ งในแถวใหม่ ดังภาพ 3.21b รหัสนกั ศึกษา ชอ่ื นกั ศึกษา รหัสวชิ า ช่อื วชิ า หน่วยกติ ภาค ปกี ารศึกษา เกรด 601391033 สมชาย IS50304 ฐานขอ้ มลู เบ้ืองตน้ สารสนเทศท้องถิ่น 3 1 2552 A ?? ?? IS40304 สารสนเทศทอ้ งถิ่น สมชาติ IS40304 3 ?? ?? B 601391002 3 1 2552 A ภาพที่ 3.21a การปรับรีเลชันใหม้ คี ุณสมบตั ิ 1NF
60 3.กาหนดคียห์ ลกั คือ รหสั นกั ศกึ ษา รหสั วิชา ภาค ปกี ารศกึ ษา ใหข้ ีดเสน้ ใตแ้ อตตรบิ วิ ตท์ จ่ี ะกาหนดเปน็ คีย์หลัก relation การลงทะเบยี น รหัสนักศกึ ษา ช่ือนักศึกษา รหสั วิชา ชอ่ื วชิ า หนว่ ยกิต ภาค ปกี ารศกึ ษา เกรด 601391033 สมชาย IS50304 ฐานขอ้ มูลเบอื้ งต้น 3 1 2552 A 601391033 สมชาย IS40304 สารสนเทศท้องถ่ิน 3 1 2552 B 601391002 สมชาติ IS40304 สารสนเทศท้องถ่นิ 3 1 2552 A ภาพท่ี 3.21b รีเลชนั ท่ีมคี ณุ สมบัติ 1NF จากตัวอย่างสามารถแก้ไขปัญหาค่าข้อมูลท่ีเป็นกลุ่ม ทาให้แต่ละทัปเพิลมีค่าไม่ซ้า กันด้วยการเพ่ิมคีย์หลัก แต่ยังพบปัญหาเรื่องความซ้าซ้อนของข้อมูล (Redundancy Data) เช่น แอตตริบวิ ตช์ ่อื นกั ศกึ ษา และช่ือวชิ า เป็นตน้ ซงึ่ จะทาใหเ้ กิดปญั หาดา้ นต่างๆ ดงั นี้ 1. หากมีการปรับปรุงข้อมูล (Update Anomaly) ในทัปเพิลที่ซ้าซ้อนกันไม่ ครบถ้วน จะทาให้ข้อมูลขัดแย้งกัน เช่น ต้องการเปลี่ยนชื่อวิชาจาก สารสนเทศท้องถ่ิน เป็น การ จัดการสารสนเทศท้องถ่ิน หากแก้ไขไม่ครบทุกทัปเพิลหรือรายการจะทาให้รหัสวิชา IS40304 มีช่ือ วิชาทง้ั สารสนเทศท้องถ่ิน กับ การจัดการสารสนเทศทอ้ งถิ่น เป็นตน้ 2. การลบข้อมูล (Delete Anomaly) เม่ือต้องการลบข้อมูลบางอย่างออกไป อาจ ทาให้สูญเสียข้อมูลที่จะใช้งาน หรือไม่สามารถใช้ในการอ้างอิงได้ เช่น ต้องการลบรหัสวิชา IS40304 ออกไปจะทาให้ข้อมูลอื่นๆ ของนักศึกษาที่มีรหัสนักศึกษา 601391002 ถูกลบออกไปจากตารางด้วย ถ้าขอ้ มูลนักศกึ ษาคนนนั้ มีเพยี งรายการเดียว 3. การเพ่มิ ข้อมลู ลงในรเี ลชนั (Insert Anomaly) ขอ้ มูลบางอยา่ งทีต่ ้องการเพิ่มอาจ ไม่สามารถเพ่ิมได้ หรือเพ่ิมไม่ได้ทันที เช่น ต้องการเพ่ิมข้อมูลรายวิชาเปิดใหม่เข้าไปในรีเลชันการ ลงทะเบียน แต่ไม่สามารถเพ่ิมทันที เน่ืองจากจะต้องมีข้อมูลนักศึกษา ภาค รวมทั้งปีการศึกษาที่จะ ลงทะเบียนกอ่ น จึงจะสามารถเพ่ิมขอ้ มลู รายวิชาได้ เปน็ ต้น จากปญั หาดังกลา่ วขา้ งตน้ จึงจาเป็นต้องนารีเลชันไปพิจารณา 2NF ตอ่ 2.3.2 รูปแบบบรรทดั ฐานในระดับที่ 2 (Second Normal Form หรอื 2NF) ในระดับท่ี 2 นี้เป็นการกาจัดความสัมพันธ์ระหว่างแอตตริบิวต์แบบ Partial Dependency ภายในรีเลชัน กฎของ 2NF คือ “รีเลชันจะมีคุณสมบัตเิ ป็น 2NF ได้ก็ต่อเม่ือ รีเลชันนั้นจะต้องมีคุณสมบัติอยู่ในรูปแบบ 1NF และทุกแอตตริบิวต์ในรีเลชันที่ไม่ใช่คีย์หลัก จะต้องขึ้นอยู่กับแอตตริบิวต์ท่ีเป็นคีย์หลักหรือทุก แอตตริบิวต์ที่ประกอบกันเป็นคีย์หลัก (Fully Dependency) ไม่ใช่ข้ึนอยู่กับแอตตริบิวต์บางตัวของ
61 คีย์หลัก กล่าวคือต้องไม่มีฟังก์ชันการข้ึนต่อกันแบบบางส่วน (Partial Dependency) ภายในรีเลชัน นั้น” และถ้ามีรีเลชันท่ีไม่มีคุณสมบัติตามที่กาหนดไว้ใน 2NF นั่นคือเกิดฟังก์ชัน การข้ึนต่อกันแบบบางส่วน ให้ปรับโดยแตกฟังก์ชันการขึ้นต่อกันแบบบางส่วนไปเป็นรีเลชันใหม่ จาก ภาพ 3.21b ได้รีเลชันที่มีปัญหาตามท่ีได้กล่าวมา ดังน้ันนารีเลชันดังกล่าวมาพิจารณา 2NF ต่อ โดย พิจารณาฟังก์ชันการขึ้นต่อกันของแอตตริบิวต์ภายในรีเลชัน สามารถแสดงเป็นแผนภาพฟังก์ชันการ ขึ้นต่อกนั ดงั ภาพที่ 3.22 Fully Functional Dependency relation การลงทะเบยี น รหัสนกั ศึกษา ชอื่ นกั ศกึ ษา รหสั วิชา ชอ่ื วิชา หนว่ ยกิต ภาค ปกี ารศกึ ษา เกรด Partial Dependency Partial Dependency 1.จากแผนภาพ FD พบ Partial ได้ Dependency ใหก้ าจดั โดยแตก เปน็ รีเลชันใหม่ relation การลงทะเบียน (เดิม) รหสั นกั ศกึ ษา รหสั วิชา ภาค ปกี ารศึกษา เกรด relation นักศกึ ษา (ใหม)่ 2.รเี ลชันเดิม ยังคงคีย์หลักไว้ เพื่อเชอื่ มโยง ความสัมพนั ธ์ระหวา่ งรีเลชัน รหสั นกั ศกึ ษา ชอ่ื นักศึกษา relation รายวชิ า (ใหม)่ 3.แตกเปน็ รีเลชนั ใหม่ พรอ้ มกาหนดคยี ห์ ลัก รหสั วิชา ชือ่ วชิ า หน่วยกติ ภาพท่ี 3.22 การปรับรีเลชันให้มีคณุ สมบตั ิ 2NF จากภาพท่ี 3.22 นารีเลชันการลงทะเบียนมาพิจารณาฟังก์ชันการข้ึนต่อกัน พบว่า เกิดฟังก์ชันการข้ึนต่อกันแบบบางส่วน 2 กลุ่ม คือ กลุ่มแรกคือแอตตริบิวต์รหัสนักศึกษา กับชื่อ นักศกึ ษา และกลมุ่ สองคือแอตตริบิวต์รหัสวิชา ชือ่ วชิ า หน่วยกิต เพือ่ ปรับให้รีเลชันการลงทะเบียนมี คุณสมบัติ 2NF น้ันต้องแตกฟังก์ชันการข้ึนต่อกันแบบบางส่วนออกเป็นรีเลชันใหม่ พร้อมกาหนดคีย์ หลักโดยพิจารณาจากแอตตริบิวต์ท่ีประกอบกันเป็นคีย์ร่วมของรีเลชันการลงทะเบียน (รหัสนักศึกษา
62 รหัสวิชา เทอม และปีการศึกษา) หรือสามารถกล่าวได้ว่า แอตตริบิวต์ท่ีสามารถระบุค่าของแอตตริ บิวต์อ่ืนได้เพียงค่าเดียว ตามตัวอย่างแตกออกเป็นรีเลชันใหม่ได้ 2 รีเลชัน คือ รีเลชันนักศึกษาท่ี ประกอบด้วย แอตตริบิวต์รหัสนักศึกษา (คีย์หลัก) กับช่ือนักศึกษา และรีเลชันรายวิชาประกอบด้วย แอตตริบิวต์รหัสวิชา (คีย์หลัก) ช่ือวิชา และหน่วยกิต ส่วนรีเลชันการลงทะเบียนยังคงแอตตริบิวต์ที่ เป็นคีย์หลักไว้ และแอตตริบิวต์ท่ีไม่ได้แตกออกไปเป็นรีเลชันใหม่ หรือแอตตริบิวต์ท่ีขึ้นอยู่กับคีย์หลกั ของรีเลชนั การลงทะเบียน (แอตตริบิวตเ์ กรด) ดงั นน้ั จากการปรบั รเี ลชนั การลงทะเบยี นให้มคี ุณสมบัติ 2NF สามารถแตกออกเป็นรีเลชันได้ 3 รีเลชันคือ รีเลชันการลงทะเบียน รีเลชันนักศึกษา และรีเลชัน รายวชิ า จากแผนภาพฟังก์ชันการข้ึนต่อกันตามตวั อย่างภาพที่ 3.22 ไม่พบฟังกช์ ันการข้ึนต่อ กันแบบทรานซิทีฟ ส่งผลให้ทั้ง 3 รีเลชันมีคุณสมบัติ 3NF ทันทีและสามารถนาไปใช้การออกแบบ ฐานขอ้ มูลในระดับกายภาพ (Physical Design) ในข้นั ตอนถดั ไปได้ ขอ้ สังเกต รเี ลชนั ท่ตี อ้ งพจิ ารณาและต้องปรับให้อยู่ในรปู แบบ 2NF จะมีแอตตริบิวต์ ท่ีเป็นคีย์หลักหลายตัวท่ีเรียกว่า คีย์ร่วม (Composite Key) ส่วนรีเลชันท่ีมีคีย์หลักเพียงแอตตริบิวต์ เดียวจะมีคุณสมบัติเป็น 2NF แล้ว ดังนั้นสามารถข้ามไปพิจารณาว่ารีเลชันนั้นมีคุณสมบัติ 3NF หรอื ไมต่ อ่ ไดเ้ ลย 2.3.3 รูปแบบบรรทดั ฐานในระดบั ท่ี 3 (Third Normal Form หรือ 3NF) 3NF เป็นระดับที่ต้องทาการกาจัดความสัมพันธ์แบบทรานซิทีฟท่ีเกิดข้ึน ระหว่างแอตตรบิ ิวต์ภายในรเี ลชัน โดยกฎของ 3NF มดี ังน้ี “รีเลชันจะมีคุณสมบัติเป็น 3NF ได้ก็ต่อเมื่อ รีเลชันนั้นจะต้องมีคุณสมบัติอยู่ในรปู แบบ 2NF และทุกแอตตริบิวต์ท่ีไม่ใช่คีย์หลักจะต้องไม่ข้ึนต่อกันเอง กล่าวคือต้องไม่มีฟังก์ชันการข้ึนต่อกันแบบ ทรานซทิ ีฟ (Transitive Dependency) ภายในรีเลชนั นัน้ ” และถ้ามีรีเลชันท่ีไม่มีคุณสมบัติตามท่ีกาหนดไว้ใน 3NF นั่นคือเกิดฟังก์ชันการ ข้ึนต่อกันแบบทรานซิทีฟ ให้ปรับโดยแตกฟังก์ชันการขึ้นต่อกันแบบทรานซิทีฟไปเป็นรีเลชันใหม่ ตัวอย่างดังภาพท่ี 3.23a และ 3.23b รีเลชันท่ีปรึกษา เม่ือพิจารณา 1NF แล้วพบว่าไม่มีแอตตริบิวต์ ใดที่มีค่าข้อมูลเป็นกลุ่ม และได้กาหนดคีย์หลักแล้ว จึงสรุปได้ว่ารีเลชันมีคุณสมบัติเป็น 1NF จากน้ัน พิจารณา 2NF ต่อ ซึ่งไม่พบฟังก์ชันการขึ้นต่อกันแบบบางส่วน จึงทาให้รีเลชันมีคุณสมบัติเป็น 2NF จากนั้นให้ทาการพิจารณา 3NF ต่อได้เลยซึ่งพบว่า รีเลชันมีฟังก์ชันการขึ้นต่อกันแบบทรานซิทีฟ นั่น คือมีแอตตริบิวต์ที่ไม่ได้เป็นคีย์หลักสามารถระบุค่าของแอตตริบิวต์อื่นได้ จาเป็นต้องปรับรีเลชันใหม่ ดังน้ี
รหสั นักศกึ ษา Fully Functional Dependency 63 ชอื่ สกลุ รหสั อาจารย์ relation ท่ปี รกึ ษา ชือ่ อาจารย์ 1.แตกออกไปเปน็ รเี ลชันใหม่ Transitive Dependency พร้อมกาหนดคยี ห์ ลกั ภาพท่ี 3.23a การปรับรเี ลชันใหม้ ีคณุ สมบัติ 3NF relation ทปี่ รกึ ษา (เดิม) รหสั นักศึกษา ช่ือ สกุล รหัสอาจารย์ 2.คงแอตตริบวิ ต์ที่สามารถ 3.รีเลชนั ใหม่ กาหนดคยี ์หลกั ระบุค่าของแอตตรบิ วิ ตอ์ ่นื ไว้ relation อาจารยท์ ่ปี รึกษา (ใหม)่ รหัสอาจารย์ ช่ืออาจารย์ ภาพท่ี 3.23b การปรับรีเลชนั ให้มคี ณุ สมบตั ิ 3NF แตกออกเป็นรีเลชันใหม่ จากภาพข้างต้น รีเลชันที่ปรึกษาพบฟังก์ชันการขึ้นต่อกันแบบทรานซิทีฟ (ภาพ 3.23a) ดังน้ันเพ่ือให้รีเลชันมีคุณสมบัติ 3NF จะต้องกาจัดฟังก์ชันการขึ้นต่อกันแบบนี้ออกไปเป็น รีเลชันใหม่ ซึ่งก็คือรีเลชันอาจารย์ที่ปรึกษา จากนั้นกาหนดคีย์หลักให้กับรีเลชันใหม่คือแอตตริบิวต์ รหัสอาจารย์ ส่วนรีเลชันท่ีปรึกษาจะมีแอตตริบิวต์ท่ีขึ้นอยู่กับคีย์หลัก (รหัสนักศึกษา) ของรีเลชัน จริงๆ กล่าวคือ ช่ือ สกุล และรหัสอาจารย์ซ่ึงเป็นแอตตริบวิ ต์ที่สามารถระบุค่าข้อมูลของแอตตริบิวต์ ช่ืออาจารย์ได้ แต่ตอ้ งเกบ็ ไว้รีเลชันท่ปี รึกษาดังเดิม ถา้ แตกเป็นรเี ลชนั ใหม่แล้วไม่คงแอตตรบิ ิวต์ที่ระบุ ค่าข้อมูลของแอตตริบิวต์อ่ืนไวท้ ่ีรเี ลชันเดิม จะทาให้ขาดการเชอื่ มโยงข้อมูลระหว่างรีเลชันได้ ส่วนผล จากการทาให้รีเลชันที่ปรึกษามีคุณสมบัติ 3NF จะได้ 2 รีเลชัน ได้แก่ รีเลชันท่ีปรึกษาท่ีทุกแอตตริ บิวตข์ ้นึ อยูก่ บั คยี ์หลักของรเี ลชัน และไดร้ ีเลชันใหมค่ ือ อาจารย์ที่ปรึกษาเพ่ิมมา ดงั ภาพที่ 3.23b
64 2.3.4 รูปแบบบรรทดั ฐานในระดบั ท่ี BCNF (Boyce-codd Normal Form : BCNF) กระบวนการทาให้เป็นบรรทัดฐานมีระดับข้ันท่ีเหมาะสมในการใช้งานจริงและ พบเห็นโดยทั่วไปในระบบธุรกิจเป็นบรรทัดฐานระดับที่ 3NF ส่วนระดับต่อไปนี้เป็นสิ่งที่มีค่าต่อการ เรียนรู้ของการทาให้รีเลชันมีคุณสมบัติเป็นบรรทัดฐาน น้ันคือตั้งแต่ระดับท่ี BCNF, 4NF และ 5NF สาหรับระดับ BCNF เป็นระดับท่ีเสริมหรือเพิ่มเข้ามาให้ระดับที่ 3NF มีความเข้มแข็งมากขึ้น โดยจะ เข้าไปกาจัดแอตตริบิวต์ที่ไม่ใช่คีย์หลักแต่สามารถระบุค่าของแอตตริบิวต์ที่เป็นบางส่วนของคีย์หลัก หรือสามารถกล่าวได้ว่า แอตตริบิวต์ท่ีเป็นส่วนหนึ่งของคีย์หลักหรือประกอบกันเป็นคีย์หลักน้ันไป ขนึ้ กับแอตตรบิ ิวต์ท่ีไมใ่ ชค่ ียห์ ลัก โดยกฎของ BCNF มดี ังนี้ “รีเลชันจะมีคุณสมบัติเป็น BCNF ได้ก็ต่อเม่ือ รีเลชันนั้นจะต้องมีคุณสมบัติอยู่ในรูปแบบ 3NF และแอตตริบิวต์ท่ีไม่ใช่คีย์หลักจะไม่สามารถระบุค่าของคีย์หลักหรือแอตตริบิวต์บางตัวของคีย์ หลกั ได้ ” สามารถกาจัดรีเลชันท่ีไม่มีคุณสมบัติ BCNF โดยการแตกออกเป็นรีเลชันใหม่ เหมือนกับกระบวนการทาใหเ้ ปน็ บรรทดั ฐานทีผ่ า่ นมา ดังตัวอย่างที่ 3.1 ตัวอย่างที่ 3.1 จากรายละเอียดของรีเลชันโครงสร้างรายวิชาซึ่งไม่มีคุณสมบัติ BCNF เน่ืองจากพบ แอตตริบิวต์ท่ีไม่ใช่คีย์หลักสามารถระบุค่าของแอตตริบิวต์บางส่วนของคีย์หลัก โดยพิจารณาจาก ข้อกาหนดของแต่ละภาคเรียนอาจารย์จะสอนไดเ้ พียงวิชาเดียว (พบว่ารหัสผู้สอนสามารถระบุค่าของ รหัสวิชาได)้ แต่ละรายวชิ ามีผู้สอนไดม้ ากกว่า 1 คน และนักศึกษาตอ้ งเลอื กเรยี นแตล่ ะวิชากบั อาจารย์ ท่านใดท่านหน่ึง คีย์หลักของรีเลชันคือ รหัสนักศึกษากับรหัสวิชา สามารถแสดงเป็นแผนภาพฟังก์ชัน การขึน้ ตอ่ กนั ดังภาพท่ี 3.24 รหสั นักศึกษา รหัสวิชา รหสั ผสู้ อน รหัสผสู้ อนสามารถ ระบคุ า่ ของรหัสวชิ าได้ ภาพที่ 3.24 รเี ลชันทไ่ี ม่มคี ุณสมบตั ิ BCNF เพ่ือให้รีเลชันโครงสร้างรายวิชามีคุณสมบัติ BCNF ให้แตกออกเป็นรีเลชันใหม่ จะได้รีเลชัน อาจารย์-รายวิชาท่ีมีแอตตริบวิ ตร์ หสั ผสู้ อนเป็นคียห์ ลกั และรหัสวิชา ส่วนรีเลชันเดิมคงเหลอื แอตตริ บิวต์รหัสศึกษา และเพ่ือไม่ให้ความสัมพันธ์ระหวา่ ง 3 แอตตริบิวต์สูญเสียไปจึงกาหนดให้แอตตรบิ ิวต์ รหัสผู้สอนอยู่ในรเี ลชนั เดมิ เพ่ือเป็นคียน์ อกทีใ่ ช้สาหรับเชือ่ มโยงความสัมพนั ธ์ระหว่าง 2 รีเลชัน แสดง ดงั ภาพท่ี 3.25
relation โครงสร้างรายวิชา (เดิม) 65 รหัสนักศกึ ษา รหสั ผู้สอน relation อาจารย์รายวิชา- รหัสผู้สอน รหสั วิชา คีย์นอก ภาพท่ี 3.25 รเี ลชนั ทีม่ ีคุณสมบัติ BCNF 2.3.5 รูปแบบบรรทัดฐานในระดับท่ี 4NF (Fourth Normal Form หรอื 4NF) 4NF เป็นระดับท่ีต้องทาการกาจัดความสัมพันธ์แบบ Multi-valued Dependency ท่ีเกิดข้ึนระหว่างแอตตริบิวต์ภายในรีเลชัน เพื่อหลีกเล่ียงข้อมูลเกิดความซ้าซ้อนและ อาจสง่ ผลใหเ้ กดิ ปญั หาการแกไ้ ขข้อมลู ไม่สอดคล้องกัน (update anomaly) โดยกฎของ 4NF มีดงั น้ี “รีเลชันจะมีคุณสมบัติเป็น 4NF ได้ก็ต่อเม่ือ รีเลชันนั้นจะต้องมีคุณสมบัติอยู่ในรูปแบบ BCNF และรเี ลชนั นัน้ จะต้องไมม่ แี อตตรบิ ิวตท์ ่มี ีความสมั พนั ธก์ ันแบบ Multivalued Dependency” Multivalued Dependency เป็นการข้ึนต่อกันระหว่างแอตตริบิวต์ของรีเลชัน ที่แอตตริบิวต์ (เช่น แอตตริบิวต์ A) หนึ่งสามารถระบุค่าของแอตตริบิวต์ (เช่น แอตตริบิวต์ B) หน่ึงได้ หลายค่า และยงั ไประบุคา่ ของอีกแอตตรบิ วิ ต์หนึ่ง (เช่น แอตตริบวิ ต์ C) ไดห้ ลายค่าเชน่ กัน แต่ทง้ั สอง แอตตริบิวต์ (ท้ังแอตตริบิวต์ B และ C) ท่ีถูกระบุไม่มีความสัมพันธ์กัน เขียนเป็นสัญลักษณ์ของ Multivalued ได้ดงั น้ี AB AC ซึ่งรายละเอยี ดการปรับรเี ลชันให้มคี ณุ สมบัติ 4NF ดงั แสดงตามตัวอยา่ งท่ี 3.2
66 ตัวอย่างที่ 3.2 โครงสร้างรีเลชันนักศึกษาที่ไม่มีคุณสมบัติ 4NF และคีย์หลักของรีเลชันต้อง ประกอบด้วย รหัสนกั ศึกษา ช่ือวชิ า และกิจกรรม relation นักศกึ ษา กจิ กรรม รหัสนกั ศึกษา ชอ่ื วิชา 60040332101 Music Swimming 60040332101 Accounting Swimming 60040332101 Music Tennis 60040332101 Accounting Tennis 60040332110 Math Jogging จากรีเลชันนักศึกษาพบว่าไม่มีคุณสมบัติ 4NF เน่ืองจากแอตตริบิวต์ รหัส นักศึกษาสามารถระบุแอตตริบิวต์ชื่อวิชาได้หลายค่า และยังสามารถระบุกิจกรรมได้หลายค่า ซ่ึงท้ัง แอตตริบวิ ต์ชื่อวิชากับกิจกรรมไม่มคี วามสัมพันธก์ ันเลย เม่ือพบรีเลชันท่ีไม่มีคุณสมบัติ 4NF สามารถแตกออกเป็นรีเลชันใหม่เหมือนกับ กระบวนการทาให้เป็นบรรทัดฐานที่ผ่านมา เช่น จากตัวอย่างที่ 3.2 ทาการปรับรีเลชันให้มีคุณสมบัติ 4NF ได้โดยแตกเป็นรีเลชนั ใหม่ได้ 2 รเี ลชนั มโี ครงสร้างดังภาพที่ 3.26 relation นกั ศึกษา-รายวิชา (ใหม)่ relation นกั ศกึ ษา-กจิ กรรม (ใหม่) รหสั นักศึกษา ชื่อวชิ า รหสั นกั ศกึ ษา กิจกรรม 60040332101 Music 60040332101 Swimming 60040332101 Accounting 60040332101 Tennis 60040332110 Math 60040332110 Jogging ภาพท่ี 3.26 รเี ลชนั ย่อยท่ีมคี ุณสมบัติ 4NF
67 2.3.6 รปู แบบบรรทดั ฐานในระดับที่ 5NF (Fifth Normal Form หรือ 5NF) 5NF เป็นระดับที่ต้องทาการกาจัดความสัมพันธ์แบบทรานซิทีฟท่ีเกิดข้ึน ระหว่างแอตตริบิวต์ภายในรเี ลชนั โดยกฎของ 5NF มีดงั นี้ “รีเลชันจะมีคุณสมบัติเป็น 5NF ได้ก็ต่อเม่ือ รีเลชันน้ันจะต้องมีคุณสมบัติอยู่ในรูปแบบ 4NF และ รเี ลชันจะต้องไม่มีคณุ สมบตั ิแบบ Join Dependency ระหว่างแอตตรบิ วิ ต์” Join Dependency เป็นการนารีเลชันท่ีเกิดจากการทาให้เป็นบรรทัดฐานใน ระดับ 4NF หรอื รเี ลชันย่อยมารวมเขา้ ดว้ ยกันแลว้ ทาให้รเี ลชนั ท่ไี ดม้ ขี อ้ มูลแปลกไปจากเดิมหรอื ไม่ตรง ตามข้อเทจ็ จริง การทาให้รเี ลชนั มคี ุณสมบัติ 5NF นนั้ จะเป็นการตรวจสอบโครงสร้างของรีเลชัน ย่อยท่ีได้จากระดับ 4NF ว่าถูกต้องหรือไม่ โดยนารีเลชันย่อยเหล่าน้ันรวมเข้าด้วยกันอีกคร้ัง หากพบ ข้อมูลผิดปกติ แสดงว่าไม่ควรแตกเป็นรีเลชันย่อย และรีเลชันเดิมมีคุณสมบัติเป็น 5NF ได้ และหาก พบข้อมูลไม่ผิดปกติ แสดงว่าสามารถแตกเป็นรีเลชันย่อยได้และมีคุณสมบัติเป็น 5NF ด้วย เช่น จาก ตัวอย่างท่ี 3.2 ที่ผ่านมาได้ 2 รีเลชันย่อยคือ นักศึกษา-รายวิชา และนักศึกษา-กิจกรรม นา 2 รีเลชัน มาตรวจสอบว่ามีคุณสมบัติ 5NF หรือไม่ โดยนามารวมกันและต้องไม่เกิด Join Dependency ระหวา่ งแอตตรบิ ิวต์ ดงั ภาพ 3.27 relation นักศึกษา-รายวิชา (ใหม่) relation นกั ศกึ ษา-กจิ กรรม (ใหม่) รหัสนักศึกษา ช่อื วิชา รหสั นักศกึ ษา กิจกรรม 60040332101 Music 60040332101 Swimming 60040332101 Tennis 60040332101 Accounting 60040332110 Jogging 60040332110 Math ได้
68 relation นกั ศกึ ษา กจิ กรรม รหสั นักศึกษา ช่อื วิชา 60040332101 Music Swimming 60040332101 Accounting Swimming 60040332101 Music Tennis 60040332101 Accounting Tennis 60040332110 Math Jogging ภาพที่ 3.27 นารีเลชนั ย่อยมาตรวจสอบคณุ สมบตั ิ 5NF จากภาพท่ี 3.27 เมื่อรวมทั้ง 2 รีเลชันเข้าได้กันจะได้รีเลชันเดิม (นักศึกษา) ที่มี ข้อมูลไม่ผิดปกติ แสดงว่ารีเลชันใหม่ที่แตกออกมานั้นมีคุณสมบัติ 5NF แล้ว น้ันคือท้ังรีเลชัน นักศกึ ษา-รายวิชา และนกั ศึกษา-กิจกรรม (ใหม)่ มีคุณสมบัติ 5NF การออกแบบฐานข้อมูลในระดับกายภาพ การออกแบบฐานขอ้ มลู ทั้งในระดับแนวคดิ และตรรกะท่ีผ่านมาน้นั ยงั ไม่ไดร้ ะบุถงึ เทคโนโลยีท่ี จะใช้ในการสร้างฐานข้อมูล สาหรับการออกแบบฐานข้อมูลในระดับกายภาพนั้นเป็นการนาโครงร่าง ของแบบจาลองข้อมูลท่ีได้จากการออกแบบในระดับตรรกะมากาหนดรูปแบบต่างๆ ทางกายภาพ ให้กับฐานข้อมูลท่ีจะสร้าง ซ่ึงมีรายละเอียดขั้นตอนการออกแบบฐานข้อมูลดังน้ี (ณัฐพงศ์ วารี ประเสริฐ, 2552: 285-304; สมลักษณ์ ละอองศรี, 2556: 50-66; Connolly & Begg, 2015: 563- 583) 1. เลือกระบบจดั การฐานข้อมูล (Database Management System : DBMS) การเลือกระบบจัดการฐานข้อมูลเป็นสิ่งท่ีต้องดาเนินการก่อนแปลงแบบจาลองข้อมูลให้ เป็นตาราง โดยโปรแกรมท่ีนิยมใช้ ได้แก่ MySQL, SQL Server, MS Access, Oracle, Sybase, Informix, Postgres, และ MongoDB เปน็ ต้น โดยมีหลักในการเลอื กดังนี้ 1.1 จานวนผู้ใช้เข้าใช้งานฐานข้อมูลพร้อมกันสูงสุด ซึ่ง DBMS ท่ีเลือกน้ันจะต้องรองรับ การเขา้ ถงึ ฐานข้อมูลของผ้ใู ชไ้ ด้ในขณะเวลาเดียวกนั 1.2 งบประมาณขององค์กรในการจดั หา DBMS ฮาร์ดแวร์ และอปุ กรณ์ต่างๆ ในการตดิ ตั้ง ระบบฐานข้อมูล
69 1.3 แนวโน้มปริมาณข้อมูลท่ีเพิ่มข้ึน ซึ่งจะต้องพิจารณาจัดเตรียมฮาร์ดแวร์ท่ีเหมาะสมใน การจดั เก็บข้อมลู ซง่ึ DBMS จะต้องรองรบั การปรบั เพ่ิมฮาร์ดแวรไ์ ด้งา่ ย 1.4 รองรับการพัฒนาฐานข้อมูลบนเว็บ ซึ่งจะเป็นการเพ่ิมประสิทธิภาพหรือขยายการ ดาเนนิ งานขององคก์ ร เชน่ การทาธรุ กิจออนไลน์หรอื พาณชิ ย์อิเล็กทรอนิกส์ เปน็ ต้น 1.5 มีเคร่ืองมือที่ช่วยในการพัฒนางาน เช่น การประมวลผลข้อมูลมหาศาลด้านการค้า เพ่ือช่วยในการทานายแนวโน้มทางการค้า หรืองานออกรายงานต่างๆ เพ่ือแสดงผลข้อมูลได้อย่าง รวดเรว็ 2. การปรบั โครงร่างฐานขอ้ มลู ในระดับตรรกะเปน็ โครงสร้างข้อมูลทางกายภาพ ในข้ันตอนนี้จะทาการปรับโครงร่างเพื่อให้สามารถนาไปสร้างในโปรแกรมระบบจัดการ ฐานข้อมูล (DBMS) ท่ีเลือกใช้ ซ่ึงจะต้องมีรายละเอียดให้ครบถ้วนพร้อมนาไปสร้างเป็นโครงสร้าง ตาราง และนาขอ้ มลู เขา้ สตู่ าราง สาหรับตารางจะมรี ายละเอยี ดต่างๆ ท่ตี อ้ งกาหนดดงั น้ี 2.1 กาหนดรายละเอียดคุณสมบตั ขิ องข้อมลู โดยกาหนดคณุ สมบัติโครงสรา้ งขอ้ มูลทั้งหมด ทตี่ ้องนาไปสร้างเป็นฐานขอ้ มลู จรงิ เช่น กาหนดชอ่ื และความหมายของตาราง ช่ือและความหมายของ ฟลิ ด์ ชนิดขอ้ มูลของแตล่ ะฟลิ ด์ คีย์ฟิลด์ และตารางทอี่ ้างอิง เป็นต้น ดงั มีรายละเอียดตอ่ ไปน้ี 2.1.1 การต้ังชื่อให้เป็นมาตรฐาน กรณีตั้งเป็นมาตรฐานทั้งองค์กรจะทาให้ง่ายต่อการ ทาความเขา้ ใจรายละเอียดของฐานข้อมลู ซ่ึงเป็นประโยชนต์ ่อการพัฒนาระบบ และสะดวกต่อการรวม หลายฐานข้อมลู เขา้ ดว้ ยกนั สาหรบั แนวทางการต้ังชื่อให้เป็นมาตรฐานมีดังน้ี 2.1.1.1 การตั้งชื่อตาราง ควรตั้งมาจากช่ือของเอนทิต้ิท่ีมีรายละเอียดท่ีชัดเจน กระชับ และสื่อถึงวัตถุประสงค์และหน้าท่ีของตาราง อาจใช้คาย่อเพื่อลดความยาวของช่ือหรือ เครื่องหมายขีดเส้นใต้ในการแยกคา ช่ือตารางของฐานข้อมูลท่ีใช้ภายในองค์กรต้องไม่ซ้ากัน เช่น ตาราง student หมายถึงตารางท่ีจัดเก็บข้อมูลของนักศึกษา และ ตาราง teacher เป็นตารางที่เก็บ ข้อมูลของอาจารย์ เปน็ ต้น 2.1.1.2 การตั้งชอ่ื ฟลิ ด์ ให้ตงั้ มาจากชอื่ ของแอตตริบิวต์ และตอ้ งไมซ่ า้ กนั ภายใน ตาราง ตั้งให้มีความหมายส่ือถึงข้อมูลที่จัดเก็บ และไม่เขียนติดกัน ถ้าช่ือน้ันเกิดจากการผสมคาศัพท์ หรือให้แยกคาด้วยการใช้เคร่ืองหมายขีดเส้นใต้ เช่น รหัสลูกค้าควรตั้งเป็น customer_id ไม่ควรใช้ customerid เป็นต้น 2.1.2 กาหนดรายละเอียดใหก้ ับฟิลด์ที่ได้ออกแบบไว้ในระดบั ตรรกะมาทาการกาหนด ชนิดขอ้ มูล ขนาด และคา่ ทีเ่ ปน็ ไปไดข้ องแตล่ ะฟิลด์ท่ีเหมาะสมต่อการใชง้ านและสอดคล้องกับ DBMS ท่ีเลือกใช้ เช่น ฟิลด์ข้อมูลเงินเดือนควรกาหนดชนิดข้อมูลเป็นตัวเลขที่มีจุดทศนิยม ช่ือนักศึกษาควร เก็บเป็นตัวอักษรท่ีมีความยาว 50 อักขระ เป็นต้น การกาหนดค่าที่เป็นไปได้ของแต่ละฟิลด์ ได้แก่ มี ค่าซ้าได้หรือไม่ เป็นค่านัลได้หรือไม่ และมีค่าโดยปริยายหรือไม่ เป็นต้น ซึ่งแต่ละฟิลด์ต้องกาหนดให้ ชัดเจนกอ่ นนาไปสร้างตารางในฐานขอ้ มูล
70 2.1.3 กาหนดการควบคมุ ความถูกตอ้ งให้กบั ข้อมลู (Integrity Rule) การควบคุมความ ถูกต้องให้กับข้อมูลท่ีจัดเก็บภายในตาราง กรณีท่ีมีการเพิ่ม ลบ และแก้ไขข้อมูล ซ่ึงวิธีการกาหนดจะ แตกตา่ งกันไปตาม DBMS ทเี่ ลือกใช้ ส่วนการกาหนดนั้นสามารถแบง่ ออกได้ 2 ส่วนดงั น้ี 2.1.3.1 กฎควบคุมความถูกต้องของเอนทิต้ี (Entity Integrity Rule) เป็นการ กาหนดคยี ์หลักให้กับตาราง ซง่ึ คีย์หลกั นัน้ จะตอ้ งไม่เป็นคา่ นัลและมีค่าไมซ่ ้า สามารถเขียนคาสงั่ ภาษา SQL สร้างกฎควบคุมความถกู ตอ้ งได้ดงั นี้ Create table book ( Call_no varchar(20) primary key, Isbn varchar(25), Book_name varchar(50), Publisher varchar(100), Year_pub varchar(10), Author varchar(100)) จากตัวอย่าง สามารถระบุคาว่า primary key หลังฟิลด์ที่จะกาหนดเป็นคีย์หลักได้ เลย จากการประมวลผลคาสั่งจะได้ตารางช่ือ book ที่มฟี ิลด์ Call_no เป็นคยี ์หลกั ของตาราง หรือใช้ คาสัง่ ตอ่ ไปนกี้ รณีที่สรา้ งตารางแลว้ แต่ยงั ไม่ไดก้ าหนดคยี ห์ ลกั ใหก้ บั ตาราง ALTER TABLE book ADD PRIMARY KEY (call_no) สว่ นในฐานขอ้ มลู MySQL สามารถดาเนนิ การโดยใชโ้ ปรแกรม phpMyAdmin ดังภาพท่ี 3.28 1.ระบุชื่อของฟลิ ด์ 2.ระบุชนดิ ข้อมลู ของฟลิ ด์ 4.เลอื กเพื่อกาหนดคยี ห์ ลกั 3.ระบุขนาดของฟิลด์ 5.กด “บนั ทึก” เมื่อระบุรายละเอยี ดครบทุกฟลิ ด์ ภาพท่ี 3.28 การใช้โปรแกรม phpMyAdmin กาหนดคยี ห์ ลักใหก้ ับตาราง
71 และสามารถเพิ่มคยี ์หลกั ให้กับตารางทีไ่ ด้สร้างไว้แลว้ ดังภาพท่ี 3.29 2.คลกิ ท่ี “โครงสรา้ ง” 1.เลอื กตาราง 6.เลือกฟิลด์ที่ 3. กดปุม่ “ลงมือ” เพอ่ื เปดิ หนา้ จอกาหนดคีย์หลัก จะกาหนดเปน็ คียห์ ลัก 4. ปรากฎหนา้ จอ กาหนดคีย์หลกั 5. เลือก “primary” 7. กดปุ่ม “บันทึก” ภาพที่ 3.29 การใช้โปรแกรม phpMyAdmin กาหนดคีย์หลักให้กบั ตารางทีส่ รา้ งไว้แลว้ 2.1.3.2 กฎควบคุมความถูกต้องของการอ้างอิง (Referential Integrity rule) เป็นการกาหนดความถูกต้องในการอ้างถึงข้อมูลระหว่างตารางที่มีความสัมพันธ์กัน เขียนเป็นคาส่ัง ภาษา SQL ดงั น้ี Create table village ( Village_id int(11) primary key, Village_name varchar(100), Sub_district_id int(11), Village_history text, topography text, bound text,ecology text,economics text, Constraint fk_sub_district_id Foreign key(Sub_district_id) References sub_district(sub_district_id))
72 จากตัวอย่างเป็นคาสั่งสร้างตาราง village ประกอบด้วยฟิลด์ village_name, sub_district_id, village_history, topography, bound, ecology และ economics คีย์หลักของ ตารางเป็นฟิลด์ village_id และมีฟิลด์ sub_district_id เป็นคีย์นอกที่เช่ือมโยงหรืออ้างอิงกับตาราง sub_district ด้วยฟลิ ดค์ ยี ห์ ลกั sub_district_id นอกจากนี้ยังสามารถกาหนดการควบคุมความถูกต้องเพ่ิมให้กับตารางท่ีสร้างแล้ว ดว้ ยคาสงั่ ต่อไปนี้ Alter Table village add Constraint fk_sub_district_id Foreign key(Sub_district_id) References sub_district(sub_district_id) เป็นคาสง่ั ในการปรบั ปรงุ โครงสรา้ งตาราง โดยการเพมิ่ คยี น์ อกฟิลด์ sub_district_id ตาราง village ทเ่ี ช่อื มโยงไปยังตาราง sub_district ด้วยฟลิ ด์ sub_district_id ซึง่ เป็นคียห์ ลักของ ตาราง sub_district ระบบจดั การฐานข้อมูล MySQL สามารถเพ่ิม ปรับปรงุ และลบกฎการควบคมุ ความ ถูกต้องดงั กลา่ วของแต่ละตาราง ดังมีรายละเอยี ดตามภาพที่ 3.30a และ 3.30b 2.คลิกที่ “โครงสรา้ ง” 1.เลือกตาราง 3. กดป่มุ “ลงมอื ” เพื่อเปดิ หนา้ จอกาหนดคีย์หลกั 4. ปรากฎหนา้ จอกาหนด คยี ห์ ลักดังภาพที่ 3.26b ภาพท่ี 3.30a การใช้โปรแกรม phpMyAdmin กาหนดกฎควบคุมความถกู ต้องในการอา้ งองิ
6. ตง้ั ชอ่ื กฎ 73 7. เลอื กฟลิ ด์ท่จี ะ 5. เลอื ก “index” กาหนดการอ้างองิ 8. กดปมุ่ “บนั ทกึ ” 10. เลือกเมือ่ ตอ้ งการแก้ไขกฎ 9. แสดงผลลัพธ์ 11. เลอื กเม่ือตอ้ งการลบกฎ ภาพท่ี 3.30b การใช้โปรแกรม phpMyAdmin กาหนดกฎควบคมุ ความถกู ต้องในการอ้างองิ (ตอ่ ) 2.2 ตวั อยา่ งตารางทไ่ี ดจ้ ากการออกแบบฐานข้อมูลในระดับกายภาย ดงั ภาพท่ี 3.31 ชื่อตาราง ช่ือฟลิ ด์ ชนดิ ขอ้ มลู ท่จี ัดเก็บ รายละเอยี ด แต่ละฟลิ ด์ ภาพที่ 3.31 โครงสรา้ งตาราง village ที่เกบ็ ข้อมลู หมูบ่ ้าน
74 2.3 การสรา้ งดัชนี (Create Index) หรอื การกาหนดดัชนใี หก้ ับตาราง วัตถุประสงค์หลักใน การสร้างดัชนี คือ ช่วยให้การเข้าถึงหรือค้นหาข้อมูลได้เร็วยิ่งข้ึน ซึ่งนิยมสร้างดัชนีกับฐานข้อมูลที่มี ขนาดใหญห่ รอื มปี รมิ าณข้อมูลจานวนมาก การสร้างดชั นีมีรายละเอียดดังน้ี 2.3.1 แนวทางการกาหนดดชั นี ในการสร้างดัชนีให้กับตารางอาจต้องสูญเสียประสิทธิภาพในการเพิ่ม แก้ไข และลบข้อมูล แต่จะได้มาซึ่งความเร็วในการสอบถามข้อมูล ดังน้ันจึงมีแนวทางพิจารณาการกาหนด ดชั นีดังนี้ 2.3.1.1 ตารางท่ีเหมาะกับการสร้างดัชนีนั้นเป็นตารางที่มีการเข้าถึงหรือค้นหา ข้อมลู บอ่ ย และตารางมขี ้อมลู จานวนมาก 2.3.1.2 หลีกเลย่ี งสรา้ งดัชนใี ห้กบั ตารางท่ีมีการปรับปรุงข้อมูลบ่อยๆ 2.3.1.3 เลือกฟิลด์หรือคอลัมน์ท่ีมีการใช้งานบ่อย (ใช้คาสั่ง Select) หรือใช้เป็น เงื่อนไข (Where) ในการค้นหาข้อมูล ซึ่งการเลือกฟิลด์ในการสร้างดัชนีสามารถเลือกจากฟิลด์ท่ีเป็น คีย์หลัก (ดัชนีหลัก) หรือไม่ใช่คีย์หลักก็ได้ (ดัชนีรอง) ขึ้นอยู่กับความเหมาะสมในการใช้งาน และไม่ จาเปน็ ตอ้ งเลอื กจากฟลิ ดเ์ ดียวมาสร้างดชั นีกไ็ ด้ 2.3.1.4 หลีกเล่ียงฟลิ ดท์ มี่ กี ารปรบั ปรงุ ข้อมลู บอ่ ยมาสรา้ งเป็นดชั นี 2.3.1.5 สามารถสร้างดัชนีมากกว่า 2 หรือ 3 ดัชนีบนตารางเดียวได้ทั้งนี้ให้ พิจารณาอยา่ งรอบคอบถงึ ประสิทธิภาพท่ีได้จากการใชง้ าน 2.3.2 การกาหนดดัชนีหรือการสร้างดัชนี หลักจากที่ได้พิจารณาแล้วว่าจะสร้างดัชนี สามารถดาเนินการโดยใช้คาส่ังภาษา SQL เช่น ต้องการค้นหาหนังสือ (book_name) ชื่อ “ฐานขอ้ มูล” จากตารางหนงั สอื (book) ดว้ ยชื่อหนงั สอื (book_name ) สามารถเขียนคาส่ังไดด้ งั น้ี Select * from book where book_name like “%ฐานข้อมูล%” เมื่อพิจารณาแล้ว book_name สามารถสร้างเป็นดัชนีเพื่อช่วยเพิ่ม ประสิทธภิ าพในการค้นหา โดยเขยี นเปน็ คาสัง่ ดังน้ี Create Index bookIndex On book (book_name) ผลของคาส่ังจะทาใหต้ าราง book (หนงั สอื ) มดี ัชนชี ่ือ bookIndex ไว้ชว่ ยให้ การคน้ หาขอ้ มูลไดเ้ ร็วขนึ้ นอกจากคาส่ังภาษา SQL ข้างต้นแล้วสามารถสร้างดัชนีด้วยโปรแกรม เช่น phpMyAdmin ชว่ ยในการสร้างดัชนขี องฐานขอ้ มูล MySQL ดังภาพที่ 3.30a และ 3.30b
75 3. การนาโครงสร้างข้อมูลระดับกายภาพไปใช้งาน เม่ือได้โครงสร้างข้อมูลระดับกายภาพแล้ว ข้ันตอนถัดไปคือการนาไปสร้างตารางภายใน ฐานข้อมูลในโปรแกรมระบบจัดการฐานข้อมูลที่เลือกใช้ อาทิ MySQL และเพ่ือให้เข้าใจข้ันตอนการ นาโครงสร้างไปใช้งานมากยิ่งข้ึง ข้ันตอนพ้ืนฐานในการสร้างฐานข้อมูลมี 2 ขั้นตอนซ่ึงจะอธิบายตาม การใช้งานฐานขอ้ มลู MySQL ดงั นี้ 3.1 การสร้างฐานข้อมูล สามารถสร้างฐานข้อมูลด้วยคาสั่งภาษา SQL คือ CREATE DATABASE หรือในฐานข้อมูล MySQL เม่ือผู้ดูแลฐานข้อมูลเข้ามาท่ีโปรแกรม phpMyAdmin แล้ว จะพบหน้าจอดงั ภาพท่ี 3.32 และสามารถดาเนินการตามรายละเอียดดงั กล่าวได้ 1.ระบชุ ื่อฐานขอ้ มลู 2.กดปมุ่ “สรา้ ง” 3. ปรากฎหน้าจอแสดงผล การสรา้ งฐานข้อมลู ภาพที่ 3.32 การสร้างฐานขอ้ มลู ใน MySQL 3.2 การสร้างโครงสร้างตารางข้อมูล สาหรับการสร้างโครงสร้างตารางข้อมูลสามารถใช้ คาส่ัง CREATE TABLE หรือดาเนินการด้วยโปรแกรม phpMyAdmin ของในฐานข้อมูล MySQL ดัง แสดงตามภาพที่ 3.33
76 1.ระบชุ ื่อตาราง 2.จานวนฟลิ ดใ์ นตาราง 3.กด “ลงมอื ” 4. ปรากฎหนา้ จอกาหนด รายละเอียดของแต่ละฟลิ ด์ 5.กาหนดรายละเอยี ด ของแตล่ ะฟลิ ด์ 7. แสดงผลการ สรา้ งตาราง 6.กด “บันทึก” 8.ชื่อตารางท่ี สร้างเรยี บร้อย ภาพที่ 3.33 การสร้างตารางในฐานขอ้ มูล MySQL ในการสร้างฐานข้อมูลนั้นมีหลักสาคัญที่ต้องดาเนินการคือการสร้างกฎควบคุมความ ถูกต้องของข้อมูล และความควบคุมปลอดภัยของข้อมูล ซึ่งสามารถใช้คาสงั่ ในโปรแกรมระบบจัดการ ฐานข้อมูลกาหนดข้อจากัดและกฎเกณฑ์ต่างๆท่ีต้องใช้กับฟิลด์ เช่น กาหนดฟิลด์ท่ีจะเป็นคีย์หลัก คีย์ นอก โดเมนหรือค่าท่ีเป็นไปได้ของบางฟิลด์ กาหนดให้ฟิลด์ต้องมีค่าข้อมูล (Not Null) และ กาหนดการควบคมุ ความถกู ต้องใหก้ บั ขอ้ มูล เป็นต้น
77 สรุป การออกแบบฐานข้อมลู ประกอบดว้ ย 4 ขนั้ ตอนคือ 1) การสารวจและวเิ คราะห์ความต้องการ ใช้งาน 2) การออกแบบฐานข้อมูลในระดับแนวคิด โดยจะนาข้อมูลท่ีสารวจและวิเคราะห์ว่าผู้ใช้ ต้องการจัดเก็บข้อมูลอะไรมานาเสนอเป็นแผนภาพอีอาร์ท่ีแสดงถึงความสัมพันธ์ระหว่างข้อมูลที่ ต้องการ 3) การออกแบบฐานข้อมูลในระดับตรรกะที่จะนาแผนภาพอีอาร์มาแปลงเป็นรีเลชันตาม แบบจาลองฐานข้อมูลเชิงสัมพันธ์ จากน้ันทาการลดความซ้าซ้อนของข้อมูลโดยทาให้เป็นบรรทัดฐาน และ 4) การออกแบบฐานข้อมูลในระดับกายภาพ นารีเลชันจากข้ันตอนการออกแบบฐานข้อมูลใน ระดับตรรกะมากาหนดเทคโนโลยี ไม่ว่าจะเป็นการเลือกซอฟต์แวร์บริหารจัดการฐานข้อมูล การ กาหนดรายละเอียดคุณสมบตั ขิ องขอ้ มลู และการนาโครงสร้างนัน้ ไปใช้งาน แผนภาพความสัมพันธ์ระหว่างข้อมูลหรือแผนภาพอีอาร์ (Entity Relationship Diagram หรือ E-R diagram) เป็นแผนภาพแสดงความสัมพันธ์ระหว่างข้อมูลท่ีได้จากขั้นตอนการออกแบบ ฐานข้อมูลในระดับแนวคิด ซ่ึงมีส่วนประกอบ 3 ส่วนคือ เอนทิต้ี แอตตริบิวต์ และความสัมพันธ์ จาก แผนภาพอีอาร์นักออกแบบฐานข้อมูลจะต้องนาไปแปลงเป็นรีเลชันหรือตาราง และทาให้รีเลชันนั้น เป็นบรรทัดฐานหรือปรับไม่ให้เกิดความซ้าซ้อนของข้อมูลก่อนนาไปสร้างตารางภายในฐานข้อมูล สาหรับการทาให้เป็นบรรทัดฐาน (Normalization) น้ันเป็นการพิจารณาความสัมพันธ์ท่ีเกิดระหว่าง แอตตริบิวต์ของรีเลชัน ว่าแอตตริบิวต์ใดควรอยู่กับรีเลชันใด ถ้าไม่เหมาะสมให้แตกออกเป็นรีเลชัน ใหม่ โดยใช้หลักการข้ึนต่อกันของแตล่ ะแอตตริบวิ ต์ภายในรเี ลชัน น้นั คือทกุ แอตตริบิวตท์ ไ่ี ม่ใชค่ ีย์หลัก จะต้องขึ้นต่อกันกับ แอตตริบิวต์คีย์หลักของรีเลชันเท่านั้น ถ้าพบว่ามีบางแอตตริบิวต์ที่ไม่ใช่คีย์หลัก ไปข้ึนต่อกันกับบางส่วนของแอตตริบิวต์คีย์หลัก หรือแอตตริบิวต์ท่ีไม่ใช่คีย์หลัก จะต้องทาการกาจัด ออกไปโดยการแตกเปน็ รีเลชันใหม่ เพื่อลดความซ้าซ้อนของข้อมูลทจ่ี ะเกดิ ในฐานข้อมูล เมือ่ ได้รเี ลชัน หรือตารางที่ลดความซ้าซ้อนของข้อมูลแล้ว ขั้นตอนถัดไปเป็นกาหนดเทคโนโลยีท่ีจะใช้ในการสร้าง ฐานข้อมูล พร้อมทั้งจะต้องกาหนดรายละเอียดคุณสมบัติของข้อมูล การสร้างดัชนีเพ่ือเพิ่มประสิทธิ ภาพในการค้นหาข้อมูล และทาการสร้างฐานข้อมูลในระบบบริหารจัดการฐานข้อมูล (DBMS) ที่ เลือกใช้
บทท่ี 4 ภาษามาตรฐานสาหรับการนิยามและการใช้ขอ้ มูล ภาษาเอสคิวแอล (SQL ย่อมาจาก Structured Query Language) หรือภาษาสอบถามข้อมลู เป็น ภาษาท่ีพัฒนาข้ึนมาเพ่ือปฏิบัติการกับฐานข้อมูลเชิงสัมพันธ์ (relational database) ในการบริหารจัดการ กับข้อมูลต่างๆ ในฐานข้อมูล มีลักษณะเป็นภาษาอังกฤษท่ีไวยากรณ์ง่ายในการทาความเข้าใจและนาไปใช้ งาน ในบทนี้ได้รวบรวมเน้ือหาเกี่ยวกับประเภทของคาส่ังในภาษา SQL ชนิดของข้อมูล ลักษณะการใชง้ าน และรายละเอียดประเภทของคาสั่งต่างๆ ที่ใช้ในภาษา SQL น้ันคือ ภาษานิยามข้อมูล ภาษาจัดการข้อมูล และภาษาควบคุมข้อมูล เพื่อท่ีจะได้นาไปใช้ในการจัดการฐานข้อมูลได้อย่างเหมาะสม ส่วนตัวอย่างท่ีใช้ ประกอบคาอธบิ ายในแต่ละประเดน็ ไดม้ าจากการรวบรวม พิจารณาและวเิ คราะหจ์ ากประสบการณ์การสอน ของผ้เู ขยี นทีน่ าเร่อื งใกลต้ ัวของผูเ้ รยี นมาเปน็ ตวั อยา่ งเพ่อื ใหง้ ่ายในการทาความเข้าใจ บทนาเกย่ี วกับภาษา SQL ภาษา SQL ได้พัฒนาจากแนวคิดของ relational calculus และ relational algebra ซึ่ง เป็นแนวคิดของฐานข้อมูลเชิงสัมพันธ์ท่ี E.F.Codd คิดค้นขึ้นเม่ือปี ค.ศ. 1970 จากน้ันปี ค.ศ. 1974 บรษิ ทั ไอบีเอม็ ไดพ้ ัฒนางานวิจยั ชอื่ “Structured English Query Language: SEQUEL” ในปี ค.ศ. 1976 ได้พัฒนาเป็น SEQUEL/2 ต่อมาได้เปล่ียนชือ่ เป็น SQL เน่ืองจากช่ือเดิมไปซ้ากับชอ่ื ผลิตภัณฑ์ การค้าของเจ้าอ่ืนที่ใช้มาก่อน หลังจากนั้นเป็นต้นมาเร่ิมมีบริษัทต่างๆ เช่น Oracle, DB2, SyBase, SQL Server และ MySQL เป็นต้น ผลิตระบบบริหารจัดการฐานข้อมูลเชิงสัมพันธ์ในเชิงพาณิชย์ ทา ให้เกิด SQL หลายรูปแบบตามแต่ละผลติ ภัณฑ์ จึงทาให้ American National Standards Institute (ANSI) ราวปี ค.ศ. 1982 ออกมาตรฐานชุดคาส่ัง SQL ขึ้นมา เพื่อให้ผู้ผลิตสร้างชุดคาส่ัง SQL ให้อยู่ ภายใต้มาตรฐานเดียวกัน (ณัฏฐพร พิมพายน, 2556: 178-182; พนิดา พานิชกุล และณัฐพงศ์ วารี ประเสริฐ, 2552: 158-159; มณโี ชติ สมานไทย, 2546: 109-119) 1. ประเภทของคาสัง่ ภาษา SQL คาส่ังภาษา SQL ที่ใช้ในการบริหารจัดการฐานข้อมูล สามารถแบ่งออกได้ 3 กลุ่มตาม ลักษณะการใชง้ าน ดังน้ี 1.1 คาสั่งท่ีใช้นิยามหรือกาหนดโครงสร้างข้อมูล (Data Definition Language) เป็นกลุ่ม คาสั่งทใี่ ชใ้ นการสรา้ ง เปลยี่ นแปลง และลบโครงสร้างของฐานขอ้ มลู ตาราง ววิ และดัชนี เปน็ ตน้
80 1.2 คาสั่งที่ใช้จัดการข้อมูล (Data Manipulation Language) คาส่ังในกลุ่มนี้ใช้ในการ จัดการข้อมูลในแต่ละตาราง ซ่ึงสามารถแบ่งเป็น 2 กลุ่มคือ กลุ่มคาส่ังที่ใช้เปล่ียนแปลงข้อมูล และ เรยี กดูขอ้ มลู 1.3 คาส่ังที่ใช้ควบคุมข้อมูล (Data Control Language) สาหรับกลุ่มคาสั่งประเภทนี้ ประกอบด้วยคาสั่งท่ีใช้กาหนดสิทธิหรือยกเลิกสิทธิของแต่ละผู้ใช้ ซึ่งสิทธิท่ีได้รับจะแตกต่างหรือ เหมือนกันข้ึนอยู่กับหน้าที่ท่ีรับผิดชอบของแต่ละคน ตัวอย่างสิทธิเช่น การเข้าถึงข้อมูลในฐานข้อมูล การเพมิ่ การแก้ไข และลบขอ้ มลู เปน็ ต้น 2. ชนิดของข้อมูลทีใ่ ช้ในภาษา SQL ชนิดของข้อมูลจะหมายถึงลักษณะข้อมูลหรือชนิดของค่าท่ีบรรจุอยู่ในคอลัมน์หรือฟิลด์ ต่างๆ ของตาราง ค่าทุกค่าในคอลัมน์ที่กาหนดจะต้องมีชนิดเดียวกัน เช่น ช่ือและนามสกุลนักศึกษา จะต้องเป็นตัวหนังสือ เงินเดือนของอาจารย์ต้องเป็นตัวเลขที่มีจุดทศนิยม และวันเดือนปีเกิดของ อาจารย์เป็นวันที่ เป็นต้น ส่วนการนาไปใช้หรือกาหนดชนิดของข้อมูลให้แต่ละคอลัมน์ของตารางใน ฐานข้อมูลจะต้องศึกษาของแต่ละระบบจัดการฐานข้อมูล (DBMS) ว่ามีชนิดของข้อมูลอะไรบ้างให้ใช้ งาน เพ่ือที่จะได้นาไปใช้ให้เหมาะสม ส่วนการกาหนดชนิดของข้อมูลน้ันจะพิจารณาตามลักษณะ ข้อมูลของแต่ละฟลิ ด์ ชนดิ ของข้อมลู พ้นื ฐานน้นั สามารถแบง่ ได้ 3 ชนิดดงั น้ี 2.1 ตวั อักขระ (Character) สามารถแบง่ ออกได้ 2 ประเภทคอื 2.1.1 ตัวอักขระท่ีมีความยาวคงที่ (Fixed-length Character) จะใช้ char(n) หรือ character(n) แทนชนิดขอ้ มลู ประเภทน้ี และสามารถเก็บข้อมูลท่ีมีความยาวได้มากท่สี ุด 255 อกั ขระ โดยจะจองพน้ื ทใ่ี นหน่วยความจาทมี่ ีความยาวเทา่ กบั จานวนอักขระที่ได้กาหนดไว้ นัน้ คือ n อกั ขระ 2.1.2 ตัวอักขระ ที่ มีคว า มย าว ไ ม่ค ง ที่ (Variable –length Character) จะใ ช้ varchar(n) แทนชนิดข้อมูลประเภทนี้ และเก็บข้อมูลที่มีความยาวได้มากสุด 4,000 อักขระ โดยจะ จองพืน้ ทีใ่ นหนว่ ยความจาท่ีมคี วามยาวแปรผันตามจานวนตวั อกั ขระท่จี ดั เกบ็ จรงิ 2.2 ตัวเลข (Numeric) ชนิดข้อมูลทเ่ี ป็นตัวเลขในภาษา SQL สามารถแบ่งออกไดด้ ังนี้ 2.2.1 ตวั เลขจานวนจรงิ (Number) แทนตัวเลขท่ีมแี ละไม่มีจุดทศนิยม ในภาษา SQL จะใช้ number(n) แทน ซ่ึง n หมายถงึ จานวนหลักที่ตอ้ งการจัดเก็บ 2.2.2 ตวั เลขท่ีมจี ดุ ทศนิยม (Decimal) ในภาษา SQL จะใช้ decimal(m,n) แทนชนิด ข้อมูลประเภทน้ี ซึ่ง m หมายถึงจานวนหลักของตัวเลขท้ังหมดนับรวมตัวเลขหลังจุดทศนิยม และ n หมายถงึ จานวนหลกั ของตวั เลขหลังจดุ ทศนิยม เช่น decimal(3,1) เก็บไดส้ งู สุดคือ 99.9 2.2.3 ตัวเลขที่ไม่มีจุดทศนิยม (Integer) หรือจานวนเต็มบวกหรือลบ จานวน 10 หลัก มคี า่ ต้งั แต่ -2,147,483,648 ถงึ +2,147,483,648
81 2.3 วันที่และเวลา (Data and Time) ชนิดข้อมูลเป็นวันที่หรือเวลา ในภาษา SQL จะใช้ date แทนชนิดข้อมูลประเภทวันที่และเวลามีรูปแบบของวันที่สามารถกาหนดตามความต้องการให้ เลือกใช้งาน เช่น yyyy-mm-dd (2016-11-05) และ dd/mm/yyyy (05/11/2016) เป็นต้น นอกจากนส้ี ามารถกาหนดชนดิ ขอ้ มลู ใหแ้ ต่ละแอตตริบวิ ต์เป็นเฉพาะวนั ทห่ี รอื เวลาได้ 3. ลกั ษณะการใชง้ านของภาษา SQL การนาภาษา SQL ไปใช้งานสามารถแบ่งออกได้ 2 ลักษณะคือ การฝังหรือแทรกภาษา SQL ไว้ในโปรแกรมอ่นื และ การเขียนภาษาทีม่ ีการโต้ตอบแบบทันที ซ่ึงมรี ายละเอยี ดดงั นี้ 3.1 ภาษา SQL ท่ีฝังอยู่ในโปรแกรมภาษาอื่น (Embedded mode) เป็นลักษณะการนา ภาษา SQL ไปใช้งานร่วมกับโปรแกรมที่เขียนขึ้นจากภาษาคอมพิวเตอร์ภาษาอื่น โดยจะฝังปนอยู่ ภายในรหัสของภาษาโปรแกรมน้ันๆ ส่วนภาษาดังกล่าวจะต้องเป็นภาษาท่ีสนบั สนุนการติดต่อใช้งาน ระบบฐานข้อมูล คาส่ังภาษา SQL จะทางานก็ต่อเมื่อมีการประมวลผลโปรแกรมท่ีฝังภาษา SQL น้ัน ไว้ เชน่ การฝังภาษา SQL ไวใ้ นภาษาพเี อชพี ดงั ภาพที่ 4.1 เปน็ ต้น ภาพที่ 4.1 การใช้งานภาษา SQL แบบฝังอยู่ในโปรแกรมภาษาอืน่ 3.2 ภาษา SQL แบบโต้ตอบทันที (Interactive mode) ลักษณะนี้จะใช้ติดต่อกับ ฐานขอ้ มลู โดยตรง โดยพิมพ์คาสั่งภาษา SQL ผ่านหนา้ จอที่ระบบฐานข้อมูลเตรยี มไวใ้ หใ้ ชง้ าน ผลลัพธ์ ที่ได้จะแสดงออกมาทันที เช่น เมื่อต้องการเรียกดูข้อมูลผ่านโปรแกรม phpMyAdmin ในฐานข้อมูล MySQL สามารถดาเนนิ การดงั ภาพท่ี 4.2 เป็นต้น
82 2.คลิกที่ SQL 3.พิมพค์ าสั่ง SQL 1.เลือกตารางท่ี 4.คลกิ “ลงมอื ” ตอ้ งการเข้าถงึ ภาพท่ี 4.2 การใช้งานภาษา SQL แบบโต้ตอบทนั ที กลุ่มคาสงั่ ภาษานิยามขอ้ มลู (Data Definition Language : DDL) ภาษา SQL มีกลุ่มคาสั่งสาหรับนิยามโครงสร้างของฐานข้อมูลอยู่ท้ังหมด 3 คาส่ังคือ คาส่ัง Create, Alter และ Drop ซ่ึงสามารถใช้กับฐานขอ้ มลู ตาราง ววิ และดัชนีได้เชน่ กนั ซง่ึ มีรายละเอียด ต่อไปน้ี (พนิดา พานิชกุล และณัฐพงศ์ วารีประเสริฐ, 2552: 160-165; มณีโชติ สมานไทย, 2546: 115) 1. การสร้างตารางข้อมูล (Create table) คาสง่ั ภาษา SQL ทใี่ ชใ้ นการสรา้ งตารางข้ึนใหม่ ในฐานขอ้ มลู คือ Create table มีรูปแบบการเขียนดังน้ี Create Table <table-name> (<column-name><data type>[<size>][[constraint <constraint-name>] constraint type], [<column-name><data type>[<size>],…]); โดยท่ี Create Table เป็นคาสัง่ ทต่ี ้องมีทุกครัง้ ท่ีต้องการสร้างตาราง table-name คอื ชอื่ ตารางทตี่ ้องการสรา้ ง column-name คือชอ่ื ของคอลัมน์ในตาราง table-name data type คอื ชนดิ ข้อมูลของคอลมั นน์ ั้นๆ constraint คือข้อกาหนดของคอลมั น์ที่ต้องการสร้าง constraint-name คอื ชอ่ื ของขอ้ กาหนด constraint type คือประเภทของข้อกาหนด
83 ตวั อยา่ งที่ 4.1 การสรา้ งตารางนกั ศึกษา สามารถเขยี นเป็นภาษา SQL ดังน้ี Create Table studenttab (std_code varchar(11), first_name varchar(50), last_name varchar(50), address varchar(100), gpa decimal(5,2), dept_no varchar(2)); จากตัวอย่างท่ี 4.1 ได้ตารางเก็บข้อมูลนักศึกษาชื่อ studenttab โดยตารางประกอบด้วย 6 คอลัมน์คือ คอลัมน์ std_code มชี นิดข้อมูลเป็น varchar หรือเก็บตัวอักขระความยาว 11 ตัวอักษร คอลัมน์ first_name มีชนิดข้อมูลเป็น varchar หรือเก็บตัวอักขระความยาว 50 ตัวอักษร คอลัมน์ last_name มีชนิดข้อมูลเป็น varchar หรือเก็บตัวอักขระความยาว 50 ตัวอักษร คอลัมน์ address มีชนิดข้อมูลเป็น varchar หรือเก็บตัวอักขระความยาว 100 ตัวอักษร คอลัมน์ gpa มีชนิดข้อมูลเป็น decimal หรือ เก็บตัวเลขจุดทศนิยมความยาว 5 หลัก (รวมตัวเลขหลังจุดทศนิยม) และตัวเลขหลัก จุดทศนิยม 2 หลัก เช่น 999.99 เป็นต้น และคอลัมน์ dept_no มีชนิดข้อมูลเป็น varchar หรือเก็บ ตัวอักขระความยาว 2 ตวั อกั ษร จากตัวอย่างข้างต้นเป็นการสร้างตารางแบบไม่มีการกาหนดข้อจากัดใด ๆ ซ่ึงในการสร้าง ตารางนนั้ จาเป็นจะตอ้ งมีการกาหนดขอ้ จากดั เพ่ือปอ้ งกนั การเกิดความซ้าซ้อนของข้อมูลดงั นี้ 1.1 กาหนดไม่ให้คอลัมน์เป็นค่านัล (Not Null) หมายถึง มีการกาหนดให้ค่าข้อมูลของ บางคอลัมน์มีค่านัลไม่ได้ หรือต้องมีค่าข้อมูล เช่น คอลัมน์ std_code หรือรหัสนักศึกษาจะต้องมีค่า ข้อมูล คอลัมน์ first_name หรือชื่อนักศึกษาจะต้องมีค่าข้อมูล และคอลัมน์ last_name หรือสกุล นักศึกษาจะตอ้ งมคี ่าขอ้ มลู เป็นตน้ โดยสามารถเขยี นเป็นคาส่ังภาษา SQL ไดด้ ังตัวอยา่ งท่ี 4.2 1.2 กาหนดคอลัมน์ไม่ให้มคี ่าซ้ากัน (Unique) มีการกาหนดให้ค่าข้อมูลของบางคอลัมน์ มีค่าไม่ซ้า หรือมีค่าข้อมูลเพียงค่าเดียวภายในตาราง เช่น คอลัมน์ std_code จะต้องมีค่าข้อมูลไม่ซ้า เป็นต้น โดยสามารถเขียนเปน็ คาสง่ั ภาษา SQL ไดด้ งั ตวั อย่างท่ี 4.2 ตวั อยา่ งที่ 4.2 การสรา้ งตารางนกั ศึกษา และกาหนดข้อจากัดใหบ้ างคอลมั น์ดังนี้ Create Table studenttab (std_code varchar(11) not null unique, first_name varchar(50) not null, last_name varchar(50) not null, address varchar(100), gpa decimal(5,2), dept_no varchar(2));
84 จากตัวอย่างที่ 4.2 เป็นคาส่ังท่ีทางานเหมือนกับตัวอย่างที่ 4.1 แต่มีการกาหนดข้อจากัด เพมิ่ เติมคอื คอลัมน์ std_code ตอ้ งไม่เปน็ ค่านัล (not null) และมคี า่ ไม่ซา้ คอลมั น์ first_name กับ last_name ได้กาหนดคุณสมบัติเพ่ิมเติมคือ ต้องไม่เป็นค่านัล (not null) ส่วนคอลัมน์ที่เหลือ สามารถมีคา่ ขอ้ มูลท่ีจัดเก็บเป็นคา่ นัลได้ (null) 1.3 กาหนดคีย์หลัก (primary key) คุณสมบัติอีกอย่างที่จาเป็นต้องกาหนดให้ตารางใน ฐานข้อมูลคือ ต้องกาหนดให้คอลัมน์ท่ีเหมาะสมเป็นคีย์หลัก เพ่ือให้ง่ายในการบริหารจัดการข้อมูล ภายในตาราง เช่น การเพม่ิ แกไ้ ข และลบข้อมูล เป็นต้น โดยเมอื่ กาหนดคยี ์หลกั ใหต้ ารางแล้ว คอลัมน์ ที่ถูกเลือกจะจัดเก็บค่าท่ีไม่ซ้า และต้องไม่เป็นค่านัล (not null) ในคาสั่งภาษา SQL สามารถกาหนด คีย์หลักให้กบั ตาราง 2 วิธีดังนี้ 1.3.1 กาหนดใหค้ อลมั นเ์ ดียวเปน็ คยี ห์ ลัก สามารถเขยี นคาสงั่ ภาษา SQL ตาม ตัวอย่างท่ี 4.3 ดังน้ี ตัวอยา่ งท่ี 4.3 ตอ้ งการสรา้ งตารางนกั ศกึ ษา และกาหนดบางคอลัมน์เปน็ คยี ห์ ลักของตารางดงั นี้ Create Table studenttab (std_code varchar(11) not null unique primary key, first_name varchar(50) not null, last_name varchar(50) not null, address varchar(100), gpa decimal(5,2), dept_no varchar(2)); จากตัวอย่างที่ 4.3 กาหนดคีย์หลักให้ตาราง studenttab คือคอลัมน์ std_code ซ่ึงเป็น การกาหนดเพยี งคอลัมน์เดยี ว 1.3.2 กาหนดให้หลายคอลัมน์เป็นคีย์หลัก ซ่ึงเขียนเป็นคาส่ังภาษา SQL ตาม ตัวอยา่ งที่ 4.4 ดังน้ี ตัวอย่างท่ี 4.4 การสร้างตารางนกั ศึกษา และกาหนดหลายคอลมั น์เปน็ คีย์หลักของตารางดงั นี้ Create Table studenttab (std_code varchar(11) not null unique, first_name varchar(50) not null, last_name varchar(50) not null, address varchar(100), gpa decimal(5,2), dept_no varchar(2), Primary Key (first_name,last_name));
85 จากตัวอย่างท่ี 4.4 กาหนดคีย์หลักให้ตาราง studenttab คือคอลัมน์ first_name และ last_name ซงึ่ เป็นการกาหนดคีย์หลักจากหลายคอลมั น์ 1.4 กาหนดคีย์นอก (foreign key) หรือคอลัมน์ท่ีใช้เช่ือมโยงหรืออ้างอิงข้อมูลกับอีก ตารางหนึ่ง ส่วนมากจะเป็นคอลัมน์ท่ีเก็บค่าข้อมูลเดียวกัน และนิยมตั้งช่ือคอลัมน์เดียวกัน ดังภาพท่ี 4.3 ท้ัง 2 ตารางมีคอลัมน์ที่เก็บข้อมูลเดียวกันคือ advisor_id (รหัสอาจารย์ที่ปรึกษา) ทาหน้าที่เป็น เช่ือมโยงข้อมูลระหว่าง 2 ตารางหรอื คยี น์ อก table name : studenttab-advisor คีย์นอก student_id student_fname student_lname advisor_id 58040332105 ชลมาศ ตรงอาชาแกว้ is001 58040332106 วิรนิ ญา เหล่าประเสรฐิ is001 57040332101 สรุ มี าศ จนั นาวัน is002 57040332103 ดนยั เตยี นพลกรัง is003 Table name : advisortab advisor_id advisor_fname advisor_lname is001 นาวา วงษพ์ รม is002 วราภรณ์ ขยายผล is003 ราชวิทย์ ทพิ ยเ์ สนา ภาพท่ี 4.3 การเช่ือมโยงข้อมูลระหว่างตาราง studenttab-advisor กบั advisortab ตัวอย่างที่ 4.5 การสร้างตารางจากภาพท่ี 4.3 ในการกาหนดคีย์นอกระหว่างตาราง studenttab- advisor กับ advisortab เขยี นเป็นคาส่ังภาษา SQL ดังนี้ Create Table studenttab-advisor (student_id varchar(11) not null primary key, student_fname varchar(50) not null, student_lname varchar(50), advisor_id varchar(5), Foreign key (advisor_id) References advisortab(advisor_id)); จากตัวอย่างที่ 4.5 เป็นการสร้างตาราง studenttab-advisor และกาหนดให้คอลัมน์ student_id เป็นคีย์หลักของตาราง และกาหนดคอลัมน์ advisor_id เป็นคีย์นอกเพื่อเชื่อมโยงข้อมลู กบั ตาราง advisortab ดว้ ยคอลมั น์ advisor_id ซง่ึ เปน็ คยี ห์ ลกั ของตาราง advisortab
86 1.5 กาหนดการตรวจสอบข้อมูล (Check) เพ่ือควบคุมความถูกต้องของค่าข้อมูลท่ี จัดเก็บในบางคอลัมน์ท่ีจาเป็นต้องเป็นค่าเฉพาะสามารถใช้คาสั่ง Check (<เงื่อนไข>) ต่อท้ายชนิด และขนาดขอ้ มูลของคอลมั น์ เขยี นเปน็ ภาษา SQL ดงั ตวั อย่างท่ี 4.6 ตวั อย่างที่ 4.6 การสรา้ งตารางและกาหนดการตรวจสอบขอ้ มูลดว้ ยคาสง่ั Check (<เง่ือนไข>) Create Table studenttab (first_name varchar(50) not null, last_name varchar(50) not null, address varchar(100), gpa decimal(5,2) Check (gpa>=0)); จากตัวอย่างท่ี 4.6 เป็นการสร้างตาราง studenttab และกาหนดข้อจากัดเพิ่มคือ ค่า ขอ้ มลู ท่เี กบ็ ในคอลัมน์ gpa จะต้องไมม่ ีค่าเป็นลบ 2. การแก้ไขโครงสร้างตารางข้อมูล (Alter table) การเปลี่ยนแปลงโครงสร้างตาราง สามารถดาเนินการได้ในหลายรูปแบบ เช่น การเพิ่มหรือลบคอลัมน์ และเปลี่ยนชนิดข้อมูลของ คอลัมน์ เป็นต้น ซง่ึ มีรายละเอยี ดในการแกไ้ ขโครงสร้างตารางดงั น้ี 2.1 การเพ่ิม แกไ้ ข และลบคอลัมน์ คาส่งั ท่ใี ช้คือ Alter Table ดังตวั อย่างต่อไปนี้ ตัวอย่างที่ 4.7 การเพ่ิมคอลัมน์ telephone มีชนิดข้อมูลเป็นตัวอักษรขนาด 50 ในตาราง studenttab เขยี นคาส่ังได้ดังน้ี Alter Table studenttab Add (telephone varchar(50)); ตัวอย่างท่ี 4.8 การแก้ไขคอลัมน์ telephone มีชนิดข้อมูลเป็นตัวอักษร แต่ขยายขนาดเป็น 100 ใน ตาราง studenttab เขียนคาส่ังได้ดังน้ี Alter Table studenttab Alter Column (telephone varchar(100)); ตัวอยา่ งที่ 4.9 การลบคอลัมน์ telephone ออกจากตาราง studenttab เขียนคาส่งั ได้ดงั น้ี Alter Table studenttab Drop Column telephone;
87 2.2 การเปลี่ยนชือ่ คอลมั น์ สามารถใช้คาสง่ั Alter Table ดงั นี้ ตัวอย่างท่ี 4.10 การเปล่ียนช่ือคอลัมน์ telephone เป็น phone ของตาราง studenttab เขียน คาสั่งได้ดังน้ี Alter Table studenttab Rename telephone to phone; 2.3 การเปลี่ยนชื่อตาราง คาสั่งที่ใช้ในการเปลี่ยนชื่อตารางคือ Rename Table... To … ดงั ตัวอยา่ งต่อไปนี้ ตัวอยา่ งท่ี 4.11 การเปล่ยี นชือ่ ตาราง studenttab เป็น student เขียนคาส่งั ได้ดังนี้ Rename Table studenttab To student; 3. การลบโครงสร้างตารางข้อมูล (Drop table) เมื่อสร้างตารางขึ้นมาแล้ว อาจมีความ จาเป็นท่ีต้องลบโครงสร้างตารางน้ันออกจากฐานข้อมูล ซึ่งจะมีผลกระทบถึงข้อมูลที่จัดเก็บในตาราง น้ันจะถูกลบออกไปโดยปริยาย ก่อนใช้งานคาสั่งประเภทน้ีควรตรวจสอบว่าตารางท่ีจะลบไม่ได้ใช้งาน แล้วจริงๆ เนอ่ื งจากอาจเกิดความเสียหายขึ้นภายในระบบฐานข้อมลู เม่อื มีการลบโครงสรา้ งผดิ ตาราง คาสัง่ ภาษา SQL ในการลบโครงสร้างตารางมรี ูปแบบการใช้งานดงั น้ี Drop Table <table-name>[Cascade Constraints]; โดยท่ี Drop Table คาส่งั ทต่ี ้องระบุเมื่อตอ้ งการลบโครงสร้างของตาราง table-name ชอ่ื ตารางที่ตอ้ งการลบโครงสร้าง Cascade Constraints ระบเุ มอ่ื ต้องการลบข้อจากดั ต่างๆ ท่ีมกี ารอา้ งถงึ ตาราง table-name ท้งิ ไปทั้งหมด ตัวอยา่ งที่ 4.12 การลบโครงสรา้ งตาราง studenttab เขียนเป็นภาษา SQL ดงั น้ี Drop Table studenttab; ผลจากการใช้คาสั่งตามตัวอย่างท่ี 4.12 จะทาให้ตาราง studenttab และข้อมูลท่ีจัดเก็บ ในตารางถกู ลบออกจากฐานขอ้ มลู 4. การสร้างดัชนี (Create index) ดัชนีถูกสร้างข้ึนมาเพื่อเพ่ิมความสามารถในการค้นหา ขอ้ มลู โดยจะเปน็ การดงึ ข้อมลู ตามคอลัมน์ที่ต้องการแยกเก็บเป็นตารางข้อมูลไวต้ ่างหาก ซ่งึ สะดวกใน การค้นหาข้อมูลในแต่ละแถว เม่ือมีการค้นหาข้อมูลในตารางข้อมูลที่มีการสร้างดัชนี ระบบจัดการ
88 ฐานข้อมูลจะค้นหาข้อมูลในตารางดัชนี เม่ือพบดัชนีหรือข้อมูลท่ีต้องการแล้วจะช้ีไปยังตารางข้อมูล เหล่าน้ันต่อไป ถึงแม้การสร้างดัชนีจะเปลืองพื้นที่ในหน่วยความจา แต่ก็ทาให้การค้นหาข้อมูลได้เร็ว ขนึ้ การสร้างดชั นีมรี ูปแบบภาษา SQL ดงั น้ี Create Index <index-name> On <table-name>(< column-name1>[,<column-name2>]…); โดยที่ Create Index คาสัง่ ท่ีใช้ในการสร้างดชั นี index-name ชือ่ ดัชนี On คาสงวนทีต่ อ้ งใส่ไว้หนา้ ชอ่ื ตารางทต่ี อ้ งการสร้างดชั นี table-name ชื่อตารางทต่ี ้องการสรา้ งดชั นี column-name1 ชือ่ คอลัมนท์ เี่ ลือกมาเปน็ ดชั นี ตัวอย่างที่ 4.13 การสร้างดัชนีช่ือ studentIndex โดยเลือกคอลัมน์ช่ือ (first_name) และนามสกุล (last_name) จากตาราง studenttab มาเปน็ ดัชนี เขยี นเปน็ ภาษา SQL ดงั นี้ Create Index studentIndex On studenttab (first_name,last_name); ผลของคาส่ังจะทาให้ตาราง studenttab มีดัชนีช่ือ studentIndex ไว้ช่วยให้การค้นหา ขอ้ มลู ได้เรว็ ข้นึ 5. การลบดชั นี (Drop index) เม่อื ต้องการลบดัชนสี ามารถทาไดด้ ้วยคาสั่ง Drop Index ซ่งึ มรี ูปแบบภาษาดงั น้ี Drop Index <index-name> โดยท่ี Drop Index คาส่งั ทใ่ี ช้ในการลบดัชนี index-name ช่อื ดชั นีทตี่ ้องการลบ ตัวอย่างที่ 4.14 การลบดชั นชี ่ือ studentIndex เขียนเปน็ ภาษา SQL ดงั นี้ Drop Index studentIndex; ผลของคาสัง่ จะทาให้ studentIndex ถกู ลบออกจากฐานข้อมูลทาใหต้ าราง studenttab ไมม่ ีดัชนี
89 กลุ่มคาสง่ั ภาษาจัดการข้อมูล (Data Manipulation Language : DML) ภาษา SQL ที่ใช้ในการจัดการข้อมูลภายในตารางต่างๆ ของฐานข้อมูลนั้น สามารถแบ่งเป็น 2 กลุ่มคาสั่งใหญ่ ๆ คือ คาส่ังท่ีเกี่ยวกับการแก้ไขข้อมูลที่ประกอบด้วย 3 คาสั่งย่อยคือ คาสั่ง Insert ใช้เพ่ือเพ่ิมข้อมูลลงตาราง คาส่ัง Update ที่ใช้แก้ไขข้อมูลที่มีอยู่แล้วในตาราง และคาส่ัง Delete ใช้ เม่ือต้องการลบข้อมูลออกจากตาราง ส่วนกลุ่มคาส่ังถัดไปคือ คาส่ัง Select ที่ใช้เพ่ือเรียกดูข้อมูล ภายในฐานขอ้ มลู ซึง่ มรี ายละเอยี ดการเขยี นคาส่ังดงั น้ี (มณโี ชติ สมานไทย, 2546: 116) 1. การเพ่ิมข้อมูล (Insert) ภาษา SQL ใช้คาสั่ง Insert Into เพ่ือเพ่ิมข้อมูลในตาราง สามารถแบ่ง 2 รูปแบบคอื 1.1 การเพิม่ ข้อมูลทีละแถว มรี ูปแบบคาส่ัง และตวั อย่างดังนี้ Insert Into <table-name>[(column-name1,column-name2,…)] Values(<value1,value2,…>) โดยท่ี Insert Into คาส่ังเพ่มิ ข้อมูลในตาราง table-name ชือ่ ตารางทต่ี ้องการเพ่ิม column-name1,column-name2,… ชื่อคอลัมน์ที่ต้องการเพิ่มข้อมูล ถ้าไม่ระบุชอ่ื คอลัมนจ์ ะหมายถึงการเพ่ิมขอ้ มลู ทุกคอลมั น์ของตาราง table-name Values() คาสงวนที่ต้องระบุเพื่อบ่งบอกถึงค่าข้อมูลที่อยู่ภายใน เคร่อื งหมาย () คอื ค่าทจี่ ะจดั เกบ็ ลงในตาราง value1,value2,... ค่าข้อมลู ที่จัดเกบ็ ตัวอย่างที่ 4.15 การเพิม่ ขอ้ มลู ทกุ คอลมั นใ์ นตาราง studenttab เขียนเป็นภาษา SQL ดังนี้ Insert Into studenttab Values (“59040332101”, “ทัศไนย”, “ขยันเรียนรู้”, “64 ม. ราชภฏั อดุ รธานี อ.เมือง จ.อุดรธานี”,3.21, “01”); ตัวอย่างท่ี 4.16 การเพ่มิ ข้อมลู เฉพาะคอลัมน์ std_code, first_name, last_name และ dept_no ในตาราง studenttab เขียนเปน็ ภาษา SQL ดงั น้ี Insert Into studenttab (std_code,first_name,last_name,dept_no) Values (“59040332101”, “ทัศไนย”, “ขยนั เรียนรู้”, “01”); 1.2 การเพิม่ ข้อมลู แบบกลมุ่ ข้อมูล เปน็ การเพ่ิมขอ้ มูลโดยดึงข้อมูลมาจากตารางอน่ื มาใส่ใน ตารางท่ีตอ้ งการเพมิ่ ขอ้ มูล การดึงข้อมลู จะใชค้ าสัง่ เรยี กดขู ้อมลู (Select) รว่ มกับคาสง่ั Insert Into มี รปู แบบภาษา SQL และตัวอยา่ งการใชง้ านดังนี้
90 Insert Into <table-name>[(column-name1,column-name2,…)] Select statement; โดยที่ Insert Into คาส่งั เพิม่ ข้อมลู ในตาราง table-name ช่อื ตารางทีต่ อ้ งการเพ่ิม column-name1,column-name2,… ชื่อคอลัมน์ท่ีต้องการเพิ่มข้อมูล ถ้าไม่ระบุชื่อคอลัมน์จะหมายถงึ การเพ่ิมขอ้ มูลทกุ คอลัมน์ของตาราง table-name Select statement ประโยคคาส่ังในการดงึ ข้อมลู มาจากตารางอื่น ตัวอย่างท่ี 4.17 การเพิม่ ข้อมูลเฉพาะคอลัมน์ std_code, first_name, last_name และ dept_no ในตาราง studenttab01 โดยนาขอ้ มูลมาจากตาราง studenttab ท่ี dept_no มีคา่ เทา่ กับ 01 เขยี น เปน็ ภาษา SQL ดงั นี้ Insert Into studenttab01 (std_code,first_name,last_name,dept_no) Select std_code,first_name,last_name,dept_no From studenttab Where dept_no = “01”; 2. การปรับปรุงข้อมูล (Update) เม่ือเพิ่มข้อมูลในตารางแล้ว และต้องการปรับปรุงข้อมูล สามารถใช้คาส่ัง Update ดาเนนิ การได้ ซ่งึ มรี ปู แบบของภาษาดังนี้ Update <table-name> Set <column-name1>[column-name2]=<expression | subquery> [Where <condition>]; โดยที่ ตารางอื่น Update คาส่ังในการปรบั ปรงุ ขอ้ มลู การปรบั ปรงุ table-name ชอื่ ตารางทีป่ รับปรงุ ขอ้ มลู Set column-name1 เป็นการกาหนดชอื่ คอลัมนท์ ่จี ะปรับปรุง Expression ค่าขอ้ มลู ทจ่ี ะนามาปรบั ปรุง Subquery ค่าข้อมูลท่ีจะนามาปรับปรุง ซึ่งได้มาจากการดึงข้อมูลมาจาก Where คาสงวนที่ต้องระบุเพื่อแสดงว่าการปรับปรุงในคร้ังนี้มีเง่ือนไขใน Condition เงื่อนไขในการปรบั ปรุงข้อมูล
91 ตัวอย่างท่ี 4.18 การเปล่ียนชื่อนักศึกษา (คอลัมน์ first_name) เป็นวีรยุทธ ให้กับนักศึกษาที่มีรหัส นักศึกษา (คอลัมน์ std_code) เป็น 59040332101 ในตาราง studenttab เขียนเป็นภาษา SQL ดังนี้ (มีการระบเุ ง่อื นไขในการปรับปรงุ ข้อมลู ) Update studenttab Set first_name= “วีรยุทธ” Where std_code= “59040332101”; ตัวอย่างที่ 4.19 การเปลี่ยนรหัสคณะ (คอลัมน์ dept_no) เป็น human ในตาราง studenttab01 เขยี นเป็นภาษา SQL ดังน้ี (ไมม่ ีการระบเุ งอ่ื นไขในการปรบั ปรงุ ข้อมลู ) Update studenttab01 Set dept_no= “human” ผลจากการทางานของคาสัง่ ขา้ งต้น จะทาใหข้ อ้ มลู ทจี่ ดั เกบ็ ในตาราง studenttab01 มีคา่ เปน็ human ทุกรายการ 3. การลบขอ้ มูล (Delete) คาสัง่ ท่ีใชล้ บข้อมลู ในตาราง คอื Delete ซง่ึ สามารถระบุหรือไม่ ระบเุ งอ่ื นไขในการลบไดต้ ามตอ้ งการ โดยมีรปู แบบของคาสั่งดงั นี้ Delete From <table-name> [Where <condition>]; โดยท่ี Delete คาส่ังที่ใชล้ บขอ้ มูล From table-name หลงั From คอื ชอื่ ตารางท่ตี ้องการลบข้อมลู Where condition หลัง Where คือเงอ่ื นไขที่ต้องการลบข้อมลู (ไมร่ ะบุก็ได้) ตัวอย่างท่ี 4.20 การลบข้อมูลจากตาราง studenttab เฉพาะรหัสคณะ (คอลัมน์ dept_no) มีค่า เป็น 01 เขยี นเป็นภาษา SQL ดังน้ี Delete From studenttab Where dept_no= “01” 4. การเรียกดูข้อมูล (Select) คาส่ังในการเรียกดูข้อมูลหรือสอบถามข้อมูลคือ Select ท่ี สามารถระบเุ ง่ือนไขในการเรยี กดูข้อมูลตามต้องการได้ ซ่งึ มกี ารเรยี กดูข้อมูลหลายรปู แบบดังนี้ 4.1 การเรียกดขู ้อมลู ทกุ คอลมั น์จากตาราง มรี ปู แบบดังนี้ Select * From <table-name>; โดยที่ Select * คาสง่ั ทต่ี อ้ งระบุ เมือ่ ต้องการเรยี กดูขอ้ มูลทกุ คอลมั น์
92 From ระบุเพ่ือให้ทราบว่าต้องการเรียกดูข้อมูลจากตารางไหน ซึ่ง สามารถระบุช่ือตารางได้หลายตารางโดยใช้ , (คอมม่า) คั่นระหว่างชอื่ ตาราง table-name ช่ือตารางทตี่ ้องการเรียกดขู อ้ มูล ตวั อยา่ งที่ 4.21 การเรยี กดขู อ้ มลู ทกุ คอลัมนจ์ ากตาราง studenttab เขยี นไดด้ งั น้ี Select * From studenttab; 4.2 การเรียกดขู อ้ มูลเฉพาะบางคอลัมน์จากตาราง มรี ูปแบบดงั น้ี Select <column-name1,column-name2,…> From <table-name>; โดยที่ Select เป็นคาส่งั ท่ตี อ้ งระบุ เมอ่ื ตอ้ งการเรียกดูข้อมลู column-name1,column-name2,… คอลัมน์ที่ต้องการเรียกดขู ้อมลู From ระบุเพ่อื ใหท้ ราบวา่ ต้องการเรยี กดูขอ้ มูลจากตารางไหน table-name ชือ่ ตารางท่ีต้องการเรยี กดูขอ้ มลู ตัวอย่างท่ี 4.21 การเรียกดูข้อมูลเฉพาะคอลัมน์ std_id, first_name และ last_name จากตาราง studenttab เขียนได้ดงั น้ี Select std_id,first_name,last_name From studenttab; 4.3 การเรยี กดขู ้อมูลเฉพาะบางแถวในตารางหรอื ตามเง่ือนไข มีตวั ดาเนินการท่ีใชใ้ นภาษา SQL แบ่งออกได้ 3 กลมุ่ ดังน้ี 4.3.1 ตัวดาเนินการสัมพันธ์ (Relational operator) ได้แก่ = (เท่ากับ) > (มากกว่า) < (น้อยกว่า) >= (มากกว่าหรือเท่ากับ) <= (น้อยกว่าหรือเท่ากับ) <> (ไม่เท่ากับ) ซ่ึงเป็นการ เปรยี บเทยี บคา่ สองค่าท่มี กั พบการกาหนดเง่อื นไขในการเรียกดูข้อมูล ตัวอย่างที่ 4.22 การเรียกดูข้อมูลเฉพาะคอลัมน์ std_id, first_name และ last_name จากตาราง studenttab ท่ีมเี กรดเฉล่ีย (คอลมั น์ gpa) มีคา่ มากกวา่ หรือเท่ากับ 3.50 เขยี นคาสัง่ ได้ดังน้ี Select std_id,first_name,last_name From studenttab Where gpa >= 3.50;
93 4.3.2 ตวั ดาเนนิ การบูลนี (Boolean operator) ได้แก่ And, Or และ Not เปน็ ตน้ ตัว ดาเนินการเหลา่ นี้จะเปรียบเทียบคา่ ที่เปน็ จรงิ หรอื เท็จเทา่ น้นั ตัวอย่างท่ี 4.23 การเรียกดูข้อมูลเฉพาะคอลัมน์ std_id, first_name และ last_name จากตาราง studenttab ท่ีมีเกรดเฉลี่ย (คอลัมน์ gpa) มีค่ามากกว่าหรือเท่ากับ 3.50 และ (and) รหัสคณะ (คอลมั น์ dept_no) ต้องเป็น 01 เท่าน้ัน เขยี นคาสง่ั ไดด้ งั น้ี Select std_id,first_name,last_name From studenttab Where gpa >= 3.50 and dept_no= “01”; ตัวอย่างท่ี 4.24 การเรียกดูข้อมูลเฉพาะคอลัมน์ std_id, first_name และ last_name จากตาราง studenttab ทีร่ หัสคณะ (คอลมั น์ dept_no) ต้องเปน็ 01 หรือ (or) 02 เท่าน้นั เขยี นคาสง่ั ไดด้ ังน้ี Select std_id,first_name,last_name From studenttab Where dept_no= “01” or dept_no= “02”; 4.3.3 ตัวดาเนินการพิเศษ (Special operator) ได้แก่ In, Between…and…, Like และ Is Null 4.3.3.1 ตัวดาเนินการ In เป็นการเปรียบเทียบจากค่าที่ได้กาหนดไว้เป็นชุดของ ขอ้ มูลท่ตี ้องการค้นหา ดังตวั อย่างท่ี 4.25 ตัวอย่างที่ 4.25 การเรียกดูข้อมูลเฉพาะคอลัมน์ std_id, first_name และ last_name จากตาราง studenttab ที่รหัสคณะต้องเป็น 01 หรือ 02 เท่าน้ัน เขียนในรูปแบบการนาคาส่ัง In ไปใช้แทน คาสงั่ or ดงั นี้ Select std_id,first_name,last_name From studenttab Where dept_no in (“01”,“02”); 4.3.3.2 ตัวดาเนินการ Between … and … เป็นการกาหนดเง่ือนไขแบบช่วง ข้อมูลทต่ี ้องการค้นหา มรี ูปแบบการเขียนคาสง่ั ดังน้ี ตัวอย่างท่ี 4.26 การเรียกดูข้อมูลเฉพาะคอลัมน์ std_id, first_name และ last_name จากตาราง studenttab ที่เกรดเฉล่ีย (คอลัมน์ gpa) มีค่าระหว่าง 2.75 ถึง 3.75 (หรือ มากกว่าหรือเท่ากับ 2.75 และนอ้ ยกวา่ หรอื เท่ากับ 3.75) เขียนในรูปของคาส่ัง Between … and … ได้ดงั นี้ Select std_id,first_name,last_name From studenttab Where gpa between 2.75 and 3.75;
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149