บทที่ 1
ความรู้เบื้องต้นเกี่ยวกับฐานข้อมูล
     ฐานข้อมูลที่มีประสิทธิภาพและตรงกับความต้องการของผู้ใช้นั้น ต้องอาศัยการพัฒนาฐานข้อมูลที่มีการวางแผนอย่างเป็นระบบและมีขั้นตอนที่ถูกต้อง โดยในบทนี้จะศึกษาถึงขั้นตอนการพัฒนาระบบฐานข้อมูล ซึ่งจะเน้นขั้นตอนการออกแบบฐานข้อมูลเป็นหลัก ตั้งแต่การพัฒนาแบบจาลองอี-อาร์ และการทำนอร์มัลไลเซชัน เพื่อให้ได้ฐานข้อมูลที่สมบูรณ์ที่สุด

ขั้นตอนการพัฒนาระบบฐานข้อมูล

วัฏจักรฐานข้อมูล (The Database Life Cycle: DBLC) เป็นขั้นตอนในการพัฒนาหรือจัดทำระบบฐานข้อมูล ซึ่งประกอบด้วย 6 ขั้นตอน ดังภาพตัวอย่าง

1. การศึกษาเบื้องต้น
     การศึกษาเบื้องต้นมีวัตถุประสงค์เพื่อวิเคราะห์สถานการณ์ขององค์กร กำหนดปัญหาและข้อจากัด กำหนดวัตถุประสงค์และขอบเขตของระบบ ดังรายละเอียดต่อไปนี้
     1.1 การวิเคราะห์สถานการณ์ขององค์กร
          เพื่อศึกษาสภาพแวดล้อมในการทำงานขององค์กร ความต้องการใน การปฏิบัติงาน โดยควรรู้ว่าโครงสร้างขององค์กรเป็นอย่างไร ใครเป็นผู้ควบคุมอะไร และใครทำรายงานให้ใคร เป็นต้น
     1.2 กำหนดปัญหาและข้อจำกัด
โดยการศึกษาว่า ระบบที่มีอยู่มีการทางานอย่างไร ข้อมูลที่ป้อนเข้าสู่ระบบ มีอะไรบ้าง และระบบสร้างรายงานอะไร มีการใช้รายงานเหล่านี้อย่างไรและใครเป็นผู้ใช้ เพื่อให้ทราบถึงปัญหาและข้อจำกัดในการป้อนข้อมูล หรือการค้นหาข้อมูลเพื่อการทำรายงาน
     1.3 กำหนดวัตถุประสงค์และขอบเขตของระบบ
ในการกาหนดวัตถุประสงค์ของระบบฐานข้อมูลควรสอดคล้องกับความต้องการของผู้ใช้ จากคำถามเหล่านี้
          - วัตถุประสงค์แรกเริ่มของระบบที่นาเสนอคืออะไร
          - ระบบนี้ต้องเชื่อมต่อกับระบบอื่นๆ ที่มีอยู่ในองค์กรหรือไม่
          - ระบบนี้จะมีการใช้ข้อมูลร่วมกันกับระบบหรือผู้ใช้อื่นหรือไม่
      เมื่อทราบวัตถุประสงค์แล้วก็ทาการกำหนดขอบเขตของระบบโดยการออกแบบ ตามความต้องการในการปฏิบัติงาน เพื่อใช้ในการออกแบบฐานข้อมูลต่อไป
2. การออกแบบฐานข้อมูล
     เมื่อผู้ออกแบบฐานข้อมูลมีความเข้าใจลักษณะขององค์กร ปัญหาและข้อจากัด รวมทั้งวัตถุประสงค์และขอบเขตของระบบแล้ว ก็ทาการออกแบบฐานข้อมูลดังต่อไปนี้

     2.1 การออกแบบเชิงแนวคิด
     โดยการพัฒนาแบบจาลองอี-อาร์ (E-R Model) ที่ใช้อธิบายถึงความสัมพันธ์ระหว่างสิ่งที่เราสนใจจะจัดเก็บ ที่เรียกว่า เอนทิตี (entity) และรายละเอียดหรือคุณสมบัติ (attribute) ของสิ่งที่จะจัดเก็บ แล้วทำการแปลงแบบจาลองอี-อาร์ เป็นโครงสร้างตารางฐานข้อมูล จากนั้นก็ทาการนอร์มัลไลเซชัน (normalization) เพื่อให้ได้โครงสร้างของตารางที่ดี สามารถควบคุมความซ้าซ้อนของข้อมูล หลีกเลี่ยงความผิดปกติของข้อมูล

     2.2 การเลือกโปรแกรมจัดการฐานข้อมูล
     ในการตัดสินใจเลือกซื้อโปรแกรมจัดการฐานข้อมูลขององค์กรใด ควรพิจารณาถึงสิ่งต่อไปนี้
          2.2.1 ค่าใช้จ่ายต่างๆ เช่น ราคาการซ่อมบารุง การปฏิบัติงาน ลิขสิทธิ์ การติดตั้ง การฝึกอบรม และค่าใช้จ่ายในการเปลี่ยนไปใช้ระบบใหม่
          2.2.2 คุณลักษณะและเครื่องมือของระบบจัดการฐานข้อมูล โปรแกรมฐานข้อมูลบางตัวจะรวมเอาเครื่องมือต่างๆ ที่ให้ความสะดวกในงานการพัฒนาโปรแกรมประยุกต์ ตัวอย่างเช่น การออกแบบหน้าจอ การสร้างรายงาน การสร้างโปรแกรมประยุกต์ และพจนานุกรมข้อมูล เป็นต้น ทาให้สะดวกในการบริหารฐานข้อมูล ใช้ง่าย มีความสามารถในการรักษาความปลอดภัย และการควบคุมการใช้งานพร้อมกัน เป็นต้น
          2.2.3 ความสามารถในการใช้ข้าม platforms ข้ามระบบและภาษา
          2.2.4 ความต้องการด้านฮาร์ดแวร์ หน่วยความจา และเนื้อที่ที่ใช้ในการจัดเก็บ

     2.3 การออกแบบทางตรรกะ
     จะเกี่ยวข้องกับการตัดสินใจใช้รูปแบบเฉพาะของฐานข้อมูล (แบบลาดับชั้น แบบเครือข่าย และแบบเชิงสัมพันธ์ เป็นต้น) การกำหนดรูปแบบของฐานข้อมูล ซึ่งการออกแบบ เชิงตรรกะจะเป็นการแปลงการออกแบบระดับเชิงแนวคิด ให้เป็นแบบจำลองของฐานข้อมูล ในระดับภายใน (internal model) ตามระบบการจัดการฐานข้อมูล (DBMS) เช่น MS-Access และ Oracle โดยการสร้างตาราง ฟอร์ม คิวรี และรายงาน เป็นต้น

     2.4 การออกแบบทางกายภาพ
     การออกแบบทางกายภาพ คือ กระบวนการในการเลือกหน่วยจัดเก็บข้อมูล และลักษณะการเข้าถึงข้อมูลของฐานข้อมูล การสร้างดรรชนี (index) การจัดทาคลัสเตอร์ (clustering) ซึ่งเป็นการจัดเก็บข้อมูลที่มีการใช้งานบ่อยๆ ไว้ในหน่วยเก็บข้อมูลเดียวกัน หรือการใช้เทคนิคแฮชชิง (hashing technique) ในการจัดตาแหน่งที่อยู่ของข้อมูลภายในหน่วยเก็บข้อมูล เป็นต้น

3. การติดตั้งระบบ
     ขึ้นอยู่กับระบบจัดการฐานข้อมูลที่ใช้ โดยเริ่มต้นจากการสร้างฐานข้อมูล กำหนดผู้จัดการฐานข้อมูล กำหนดพื้นที่ๆ ที่ต้องการใช้ และการสร้างตารางต่างๆ ในระบบ

4. การทดสอบและประเมินผล
     เพื่อการตรวจสอบดูว่าระบบที่พัฒนามาสามารถทำงานได้ตามที่ต้องการหรือไม่ ซึ่งควรมีการเตรียมข้อมูลทดสอบไว้ล่วงหน้า

5. การดำเนินการ
     เมื่อฐานข้อมูลผ่านขั้นตอนการทดสอบและประเมินผล ต่อไปก็เป็นขั้นตอน การดำเนินการ หรือการติดตั้งระบบ ซึ่งต้องเป็นระบบที่สมบูรณ์พร้อมให้ผู้ใช้ได้ใช้งานนั่นเอง ซึ่งอาจรวมไปถึงการฝึกอบรมให้แก่ผู้ใช้ ที่เป็นพนักงานที่ต้องใช้งานจริงด้วย

6. การบารุงรักษาและการปรับปรุง
     หลังจากระบบได้เริ่มดำเนินการ ผู้จัดการฐานข้อมูลจะต้องเตรียมการบำรุงรักษาฐานข้อมูลโดยการสำรองข้อมูลไว้ เพื่อสะดวกในการกู้คืนข้อมูล เมื่อระบบมีปัญหา และหากมีการใช้งานไปนานๆ อาจต้องทาการปรับปรุงแก้ไขโปรแกรมให้เหมาะสมกับเหตุการณ์ และ ความต้องการของผู้ใช้ที่เปลี่ยนแปลงไป
     เมื่อเราทราบขั้นตอนการพัฒนาระบบฐานข้อมูลทั้งหมดแล้ว ในบทนี้จะเน้นถึงรายละเอียดของขั้นตอนการออกแบบฐานข้อมูลเชิงแนวคิด ตั้งแต่การพัฒนาแบบจาลองอี-อาร์ (E-R Model) และการทำนอร์มัลไลเซชัน (normalization) ดังรายละเอียดที่จะกล่าวต่อไป

แบบจำลองอี-อาร์

     แบบจาลองอี-อาร์ (Entity-Relationship Model: E-R Model) เป็นแบบจาลองข้อมูล ที่ประยุกต์มาจากแนวคิดเรื่อง Semantic Model และมีการพัฒนามาเป็น E-R Model โดย Peter Pin Shan Chen จาก Massachusetts Institute of Technology ในปี ค.ศ. 1976 และได้รับ ความนิยมมาจนถึงปัจจุบัน
     1. ความหมายและความสาคัญของแบบจาลองอี-อาร์
แบบจาลองอี-อาร์ เป็นเครื่องมือที่ใช้ในการออกแบบฐานข้อมูล ที่แสดงความสัมพันธ์ระหว่างเอนทิตีหรือสิ่งที่เราต้องการจะจัดเก็บไว้ในฐานข้อมูล โดยนาเสนอในรูปของของแผนภาพ ที่เรียกว่า อี-อาร์ไดอะแกรม (E-R Diagram) ด้วยการใช้สัญลักษณ์ต่างๆ
     แบบจาลองอี-อาร์ มีความสำคัญในการเป็นสื่อกลางเพื่อสื่อสารกับบุคลากรต่างๆ ที่เกี่ยวข้องกับระบบฐานข้อมูล ไม่ว่าจะเป็นในระดับผู้บริหาร นักเขียนโปรแกรม และผู้ใช้ในระดับปฏิบัติการ เป็นต้น ทำให้เข้าใจระบบได้อย่างถูกต้องตรงกัน เนื่องจากมีการแสดงภาพรวม ของระบบในลักษณะของรูปภาพหรือแผนภาพ ทำให้เข้าใจง่าย ดังนั้นระบบที่ออกแบบมาจึงมีความถูกต้องและเป็นไปตามวัตถุประสงค์ขององค์กร
     2. องค์ประกอบของแบบจาลองอี-อาร์
แบบจาลองอี-อาร์ ประกอบด้วย เอนทิตี แอตทริบิวต์ คีย์ และความสัมพันธ์ ดังรายละเอียดต่อไปนี้
          2.1 เอนทิตี
     เอนทิตี (entity) คือ สิ่งต่างๆ ที่ผู้ใช้งานฐานข้อมูลต้องการจะจัดเก็บ ซึ่งมีลักษณะเป็นคeนาม ทั้งรูปธรรมและนามธรรม เช่น บุคคล สถานที่ วัตถุสิ่งของ และเหตุการณ์ต่างๆ เป็นต้น ตัวอย่างของเอนทิตีใน “ระบบการลงทะเบียนเรียนของนักศึกษา” ประกอบด้วย รายวิชา นักศึกษา การลงทะเบียน ผลการเรียนประจำเทอม สาขาวิชา คณะ และโปรแกรมวิชา เป็นต้น
     เอนทิตีที่รวบรวมได้จากระบบสามารถแยกแยะและจัดเป็นหมวดหมู่ได้ตามชนิดของเอนทิตี ได้ดังต่อไปนี้
          - หมวดบุคคล ได้แก่ เอนทิตี > นักศึกษา พนักงาน ประชาชน ผู้ป่วย และลูกค้า เป็นต้น
           - หมวดสถานที่ ได้แก่ เอนทิตี > รัฐ ประเทศ จังหวัด ภาค สาขา และวิทยาเขต เป็นต้น
          - หมวดวัตถุ ได้แก่ เอนทิตี > อาคาร เครื่องจักร ผลผลิต หนังสือ วัตถุดิบ และรถยนต์ เป็นต้น
          - หมวดเหตุการณ์ ได้แก่ เอนทิตี > การขาย การลงทะเบียน การเดินทาง การสั่งซื้อของ การออกใบเสร็จรับเงิน และการให้รางวัล เป็นต้น
     ในอี-อาร์ไดอะแกรม ใช้สัญลักษณ์รูปสี่เหลี่ยมผืนผ้า แทนหนึ่งเอนทิตี โดยใช้ชื่อของเอนทิตีนั้นๆ กำกับอยู่ภายใน เช่น

นักศึกษา แทน เอนทิตีนักศึกษา

          2.2 แอตทริบิวต์
     แอตทริบิวต์ (attribute) คือ คุณสมบัติต่างๆ ของเอนทิตีที่เราต้องการจัดเก็บในฐานข้อมูล ตัวอย่าง เช่น
          - เอนทิตีบัตรประชาชน ประกอบด้วยแอตทริบิวต์ หรือสิ่งที่บ่งบอกคุณสมบัติของประชาชนแต่ละคน ได้แก่ หมายเลขบัตรประชาชน ชื่อ นามสกุล วันเดือนปีเกิด ภูมิลำเนา วันที่ออกบัตร วันที่บัตรหมดอายุ ส่วนสูง น้าหนัก และกรุ๊ปเลือด เป็นต้น

          - เอนทิตีพนักงาน ประกอบด้วยแอตทริบิวต์ ได้แก่ รหัสพนักงาน ชื่อ นามสกุล ที่อยู่ เบอร์โทรศัพท์ สถานภาพสมรส และเงินเดือน เป็นต้น
          - เอนทิตีสินค้า ประกอบด้วยแอตทริบิวต์ ได้แก่ รหัสสินค้า ชื่อสินค้า ราคา และจานวน เป็นต้น
         - เอนทิตีนักศึกษา ประกอบด้วยแอตทริบิวต์ ได้แก่ รหัสนักศึกษา ชื่อ นามสกุล เพศ วันเดือนปีเกิด ที่อยู่ และเบอร์โทรศัพท์ เป็นต้น
          - เอนทิตีวิชา ประกอบด้วยแอตทริบิวต์ ได้แก่ รหัสวิชา ชื่อวิชา และจานวนหน่วยกิต เป็นต้น
     ค่าของข้อมูลในแต่ละแอตทริบิวต์ประกอบกัน เรียกว่า ทูเพิล (tuple) ซึ่งเป็นแถวของข้อมูลในตาราง โดยแต่ละแถวหรือแต่ละทูเพิลจะประกอบด้วยหลายแอตทริบิวต์หรือ หลายคอลัมน์ของข้อมูล จำนวนแถวของข้อมูลในตารางเรียกว่า Cardinality และจำนวน แอตทริบิวต์ทั้งหมดในตารางเรียกว่า Degree อย่างเช่น มี 4 Cardinality 5 Degree

     ในอี-อาร์ไดอะแกรม ใช้สัญลักษณ์รูปวงรี แทนหนึ่งแอตทริบิวต์ โดยใช้ชื่อของ แอตทริบิวต์นั้นๆ กำกับอยู่ภายใน เช่น

     2.3 คีย์
          คีย์ (key) คือ แอตทริบิวต์ที่สามารถใช้บ่งบอกความแตกต่างของแต่ละทูเพิลได้ อาจเป็น แอตทริบิวต์เดี่ยวๆ หรือ กลุ่มของแอตทริบิวต์ก็ได้

ประเภทของคีย์ประกอบด้วย
               2.3.1 ซุปเปอร์คีย์ (super key) คือ แอตทริบิวต์หรือกลุ่มของแอตทริบิวต์ ที่สามารถบ่งบอกความแตกต่างของแต่ละทูเพิลได้

จากตารางที่ 1.1 ประกอบไปด้วยซุปเปอร์คีย์ดังต่อไปนี้
     - รหัสนักศึกษา
     - รหัสนักศึกษา, ชื่อ
     - รหัสนักศึกษา, ชื่อ, นามสกุล
     - เลขที่บัตรประชาชน

                    2.3.2 คีย์คู่แข่ง (candidate key) คือ ซุปเปอร์คีย์ที่น้อยที่สุด ที่สามารถบ่งบอกความแตกต่างของแต่ละทูเพิลได้
          จากตารางที่ 1.1 ประกอบไปด้วยคีย์คู่แข่งดังต่อไปนี้
     – รหัสนักศึกษา
     – เลขที่บัตรประชาชน
               2.3.3 คีย์หลัก (primary key) คือ คีย์คู่แข่งที่ถูกเลือก เพื่อใช้บ่งบอกความแตกต่างของแต่ละทูเพิล
          จากตารางที่ 1.1 คีย์หลัก คือ รหัสนักศึกษา หรือเลขที่บัตรประชาชน อย่างใดอย่างหนึ่ง

คุณสมบัติของคีย์หลัก
        1) คีย์หลักซ้ากันไม่ได้
     2) คีย์หลักอาจเป็นแค่หนึ่งแอตทริบิวต์หรือกลุ่มของแอตทริบิวต์ก็ได้ อย่างเช่น ในตารางที่ 1.1 มีแอตทริบิวต์เดียวที่เป็นคีย์หลัก ซึ่งอาจจะเป็น “รหัสนักศึกษา” หรือ ”เลขที่บัตรประชาชน” ก็ได้ แต่ข้อมูลบางตารางอาจต้องอาศัยแอตทริบิวต์ตั้งแต่ 2 ตัวขึ้นไปมาประกอบกันเป็นคีย์หลัก เพื่อให้เกิดความแตกต่างระหว่างทูเพิล ดังเช่นในตารางที่ 1.2
     จากตารางที่ 1.2 ไม่สามารถให้แอตทริบิวต์รหัสนักศึกษา เป็นคีย์หลักเพียงแอตทริบิวต์เดียวได้ เพราะจะเห็นว่า รหัสนักศึกษา 5520249001 ของทูเพิลหรือแถวที่ 1 จะไปซ้ากับแถวที่ 2 แต่ถ้าให้แอตทริบิวต์ “รหัสนักศึกษา” และ “รหัสวิชา” เป็นคีย์หลัก แล้วพิจารณาข้อมูลของ 2 แอตทริบิวต์นี้ จะเห็นว่าข้อมูลไม่ซ้ากันแล้ว ดังนั้นตารางที่ 1.2 จึงมีคีย์หลักซึ่งประกอบด้วยแอตทริบิวต์ 2 ตัวประกอบกัน คือ “รหัสนักศึกษา” และ “รหัสวิชา”
          3) คีย์หลักจะเป็นค่าว่าง (null) ไม่ได้ เพราะฉะนั้นในการกรอกข้อมูลต่างๆ ลงในตาราง แอตทริบิวต์ใดที่เรากาหนดให้เป็นคีย์หลักต้องกรอกข้อมูลให้ครบ คือ จะไม่มีค่าไม่ได้ แต่แอตทริบิวต์อื่นอาจจะปล่อยเว้นว่างไว้ก็ได้ถ้าไม่ทราบค่า
                   2.3.4 คีย์นอก (foreign key) คือ แอตทริบิวต์ที่ใช้ในการเชื่อมต่อกับเอนทิตี อื่นๆ เพื่อแสดงความสัมพันธ์
คุณสมบัติของคีย์นอก คือ
                         - คีย์นอกสามารถมีค่าซ้ากันได้
                        - คีย์นอกสามารถเป็นค่าว่างได้
                         - คีย์นอกที่ไม่เป็นค่าว่างจะเป็นค่าที่ชี้ไปยังคีย์หลักของเอนทิตีที่สัมพันธ์กัน


               2.3.5 คีย์รอง (secondary key) คือ แอตทริบิวต์ที่ไม่เป็น key หลัก แต่สามารถใช้ในการค้นหาข้อมูลนั้นๆ ได้ โดยคีย์รองจะมีค่าซ้ากันได้ ตัวอย่างเช่น ในตารางที่ 1.3 มีรหัสนักศึกษาเป็นคีย์หลัก แต่หากต้องการค้นหาข้อมูลจากชื่อนักศึกษา แอตทริบิวต์ชื่อก็จะเป็น คีย์รอง หรือถ้าต้องการค้นหาข้อมูลจากนามสกุลนักศึกษา แอตทริบิวต์นามสกุลก็จะเป็น คีย์รอง เป็นต้น

         2.4 ความสัมพันธ์
     ความสัมพันธ์ (relationship) เป็นการอธิบายความสัมพันธ์ระหว่างเอนทิตีที่มีความความสัมพันธ์กัน ว่ามีความสัมพันธ์กันอย่างไร โดยในอี-อาร์ไดอะแกรมใช้สัญลักษณ์รูปสี่เหลี่ยมข้าวหลามตัด ที่มีชื่อของความสัมพันธ์นั้นกากับอยู่ภายใน และเชื่อมต่อกับเอนทิตีที่เกี่ยวข้องกับความสัมพันธ์ด้วยเส้นตรง ดังตัวอย่างด้านล่าง
     ความสัมพันธ์ระหว่างเอนทิตีแบ่งเป็น 3 ประเภท คือ ความสัมพันธ์แบบ หนึ่งต่อหนึ่ง ความสัมพันธ์แบบหนึ่งต่อกลุ่ม และความสัมพันธ์แบบกลุ่มต่อกลุ่ม ดังรายละเอียดต่อไปนี้
               2.4.1 ความสัมพันธ์แบบหนึ่งต่อหนึ่ง (one to one relationship หรือ 1:1) หมายถึง ข้อมูลในเอนทิตีหนึ่ง มีความสัมพันธ์กับข้อมูลในอีกหนึ่งเอนทิตีเพียงข้อมูลเดียว ตัวอย่างเช่น นักศึกษาแต่ละคนจะมีสูติบัตรได้เพียงใบเดียวเท่านั้น และสูติบัตรหนึ่งใบก็เป็นของนักศึกษาได้เพียงคนเดียวเท่านั้นเช่นกัน


     ในการพิจารณาความสัมพันธ์ระหว่างเอนทิตีแบบหนึ่งต่อหนึ่ง ต้องมองสองทิศ คือ มองจากซ้ายไปขวา และก็ต้องมองจากขวาไปซ้าย แล้วจึงนาความสัมพันธ์ทั้งสองทิศ มาพิจารณารวมกัน ดังภาพที่ 1.6

                2.4.2 ความสัมพันธ์แบบหนึ่งต่อกลุ่ม (one to many relationship หรือ 1:M) หมายถึง ข้อมูลในเอนทิตีหนึ่ง มีความสัมพันธ์กับข้อมูลในอีกหนึ่งเอนทิตีมากกว่าหนึ่งข้อมูล ตัวอย่างเช่น ลูกค้าหนึ่งคนมีใบเสร็จได้หลายใบ เนื่องจากลูกค้าหนึ่งคนอาจมาซื้อสินค้าหลายครั้ง แต่ใบเสร็จหนึ่งใบต้องเป็นของลูกค้าเพียงคนเดียวเท่านั้น
     ในการพิจารณาความสัมพันธ์ระหว่างเอนทิตีแบบหนึ่งต่อกลุ่ม ต้องมองสองทิศ คือ มองจากซ้ายไปขวา และก็ต้องมองจากขวาไปซ้าย แล้วจึงนาความสัมพันธ์ทั้งสองทิศ มาพิจารณารวมกัน ดังภาพต่อไปนี้

               2.4.3 ความสัมพันธ์แบบกลุ่มต่อกลุ่ม (many to many relationship หรือ M:M) หมายถึง ข้อมูลมากกว่า หนึ่งข้อมูลในเอนทิตีหนึ่ง มีความสัมพันธ์กับข้อมูลในอีกหนึ่งเอนทิตีมากกว่าหนึ่งข้อมูล ตัวอย่างเช่น นักศึกษาหนึ่งคนสามารถลงทะเบียนเรียนได้หลายวิชา และวิชาแต่ละวิชามีนักศึกษาลงทะเบียนเรียนได้หลายคน

ในการพิจารณาความสัมพันธ์ระหว่างเอนทิตีแบบกลุ่มต่อกลุ่ม ต้องมองสองทิศ คือ มองจากซ้ายไปขวา และก็ต้องมองจากขวาไปซ้าย แล้วจึงนาความสัมพันธ์ทั้งสองทิศ มาพิจารณารวมกัน ดังภาพต่อไป

3. สัญลักษณ์ในแบบจาลองอี-อาร์
ตัวอย่าง
     นักศึกษา และ วิชา เป็นเอนทิตีที่เราสนใจจะจัดเก็บ ซึ่งเอนทิตีนักศึกษาจะประกอบด้วยแอตทริบิวต์ ได้แก่ รหัสนักศึกษา ชื่อนักศึกษา นามสกุล และเบอร์โทรศัพท์ เป็นต้น โดยมีรหัสนักศึกษาเป็นคีย์หลัก ส่วนเอนทิตีวิชาจะประกอบด้วยแอตทริบิวต์ ได้แก่ รหัสวิชา ชื่อวิชา และจานวนหน่วยกิต เป็นต้น โดยมีรหัสวิชาเป็นคีย์หลัก ซึ่งความสัมพันธ์ระหว่างเอนทิตีนักศึกษาและเอนทิตีวิชา เป็นแบบกลุ่มต่อกลุ่ม คือ นักศึกษาหนึ่งคนสามารถลงทะเบียนเรียนได้หลายวิชา และวิชาแต่ละวิชามีนักศึกษาลงทะเบียนเรียนได้หลายคน ดังนั้นเราสามารถนาเสนอในรูปของของแผนภาพ ที่เรียกว่า อี-อาร์ไดอะแกรม (E-R Diagram) ด้วยการใช้สัญลักษณ์ต่างๆ ดังนี้

4. การแปลงแบบจาลองอี-อาร์เป็นโครงสร้างตารางฐานข้อมูล
     ขั้นตอนในการแปลงแบบจาลองอี-อาร์เป็นโครงสร้างของตารางในฐานข้อมูล มีขั้นตอนดังต่อไปนี้
     4.1 แปลงเอนทิตีปกติในแบบจาลองอี-อาร์เป็น 1 ตาราง ซึ่งประกอบด้วยแอตทริบิวต์ของเอนทิตีนั้นๆ โดยชื่อของตารางก็คือชื่อของเอนทิตี และแอตทริบิวต์ของเอนทิตี ก็คือ แอตทริบิวต์ของตาราง สำหรับแอตทริบิวต์ที่เป็นคีย์หลักของตาราง ให้ขีดเส้นใต้ที่แอตทริบิวต์นั้น เช่นเดียวกับในแบบจาลองอี-อาร์ ซึ่งจากภาพข้างต้น นำมาแปลงเป็นตารางได้ 2 ตาราง คือ

     4.2 แปลงความสัมพันธ์เป็นตาราง
          4.2.1 แปลงความสัมพันธ์แบบ 1 : M นั้นไม่ต้องสร้างตารางใหม่ แต่ให้นำแอตทริบิวต์ ที่เป็นคีย์หลักของเอนทิตีที่อยู่ด้านความสัมพันธ์ที่เป็น 1 ไปเพิ่มเป็นแอตทริบิวต์ของตารางด้านที่มีความสัมพันธ์เป็น M
          4.2.2 แปลงความสัมพันธ์แบบ M : M จะได้ตารางใหม่ 1 ตาราง ซึ่งประกอบด้วยแอตทริบิวต์ของความสัมพันธ์นั้นรวมกับแอตทริบิวต์ที่เป็นคีย์หลักของ 2 เอนทิตีที่มีความสัมพันธ์ แบบ M : M
          จากแบบจาลองอี-อาร์ในภาพที่ 1.11 สามารถสร้างตารางตามขั้นตอนนี้ได้อีก 1 ตาราง คือ ตารางการลงทะเบียน ซึ่งประกอบด้วยแอตทริบิวต์ รหัสนักศึกษา (คีย์หลักของ เอนทิตีนักศึกษา) และ รหัสวิชา (คีย์หลักของเอนทิตีวิชา) ฉะนั้นตารางใหม่ที่เกิดขึ้น ซึ่งก็คือ ตารางการลงทะเบียน มี รหัสนักศึกษาและรหัสวิชา เป็นคีย์หลัก ดังนี้


          จากการแปลงแบบจาลองอี-อาร์ตามขั้นตอนข้างต้น สรุปตารางที่ได้ทั้งหมด 3 ตาราง ดังต่อไปนี้

     ทั้งนี้โครงสร้างฐานข้อมูลที่ได้จากการแปลงแบบจาลองอี-อาร์นั้นจะอยู่ใน 1NF ดังนั้นจึงจำเป็นต้องนำมำทานอร์มัลไลเซชันต่อ เพื่อให้ได้ฐานข้อมูลที่ปราศจากความซ้าซ้อนหรือซ้าซ้อนน้อยที่สุด แต่ถ้าได้ทำการออกแบบฐานข้อมูลโดยการใช้แบบจาลองอี-อาร์ มาอย่างถูกต้องแล้ว เมื่อแปลงเป็นโครงสร้างฐานข้อมูลแบบสัมพันธ์ จะได้โครงสร้างความสัมพันธ์ที่จัดกลุ่มของแอตทริบิวต์มาเป็นอย่างดี และบางทีโครงสร้างของความสัมพันธ์ที่ได้นั้นอาจอยู่ในนอร์มัลฟอร์มที่สูงกว่านอร์มัลฟอร์มที่ 1 แล้ว อย่างไรก็ตามขั้นตอนถัดมาจาเป็นต้องวิเคราะห์ความสัมพันธ์ระหว่าง แอตทริบิวต์ ซึ่งก็คือ วิธีนอร์มัลไลเซชันที่จะกล่าวต่อไป













นอร์มัลไลเซชัน (Normalization)

     การออกแบบฐานข้อมูลที่ดี ต้องมีความซ้าซ้อนในการจัดเก็บข้อมูลน้อยที่สุด หรือไม่มีความซ้ำซ้อนเลย ซึ่งต้องอาศัยหลักการในการทานอร์มัลไลเซชันดังรายละเอียดต่อไปนี้
          1. แนวคิดเกี่ยวกับนอร์มัลไลเซชัน
     นอร์มัลไลเซชันเป็นวิธีการที่ใช้ในการตรวจสอบและแก้ไขปัญหาเกี่ยวกับความซ้าซ้อนของข้อมูล โดยดำเนินการให้ข้อมูล ในแต่ละรีเลชั่น (relation) อยู่ในรูปที่เป็นหน่วยที่เล็กที่สุดที่ไม่สามารถแตกออกเป็นหน่วยย่อยๆ ได้อีก โดยยังคงความสัมพันธ์ระหว่างข้อมูลในรีเลชั่นต่างๆ ไว้ตามหลักการที่กาหนดไว้ใน relational model การทำนอร์มัลไลเซชันนี้ เป็นการดำเนินการอย่าง เป็นลำดับ ที่กำหนดไว้ด้วยกันเป็นขั้นตอน ตามปัญหาที่เกิดขึ้นในขั้นตอนนั้นๆ ซึ่งแต่ละขั้นตอน จะมีชื่อตามโครงสร้างข้อมูลที่กำหนดไว้ดังนี้ 1. First Normal Form (1NF) 2. Second Normal Form (2NF) 3. Third Normal Form (3NF) 4. Boyce-Codd Normal Form (BCNF) 5. Fourth Normal Form (4NF) และ 6. Fifth Normal Form (5NF) ในการออกแบบฐานข้อมูลเพื่อลดความซ้าซ้อนในการจัดเก็บข้อมูลอย่างน้อยต้องมีคุณสมบัติเป็น 3 NF เพราะจริงๆ แล้ว ในการทำงานทั่วๆ ไป แค่ 3 NF ก็สามารถใช้งานได้แล้ว แต่สำหรับ BCNF ไปจนถึง 5NF เป็นฐานข้อมูลชนิดพิเศษจริงๆ ที่แทบจะไม่มีในชีวิตประจำวัน โอกาสพบประมาณ 0.01 % ดังนั้นในที่นี้จะศึกษาเพียงแค่ 1NF 2NF และ 3NF เท่านั้น เพื่อใช้เป็นแนวทางในการศึกษาระดับอื่นต่อไป

          2. รูปแบบของนอร์มัลฟอร์ม (Normal Form : NF)
     2.1 First Normal Form (1NF)
     ตารางที่ผ่านการทำนอร์มัลไลเซชันระดับที่ 1 หรือ First Normal Form ต้องมีคุณสมบัติดังนี้

ไม่มีคอลัมน์ใดในตารางที่มีค่ามากกว่า 1 ค่า คือ ค่าในแต่ละคอลัมน์ต้องเป็น atomic หรือไม่อยู่ในรูปของ repeating group

     หมายความว่าข้อมูลที่เก็บในแต่ละคอลัมน์จะต้องมีลักษณะเป็นค่าเดียว (single valued) ไม่สามารถแบ่งย่อยได้อีก

     ในการทำนอร์มัลไลเซชันจะต้องดูข้อมูลในตารางเป็นหลัก ตัวอย่างเช่น ข้อมูลในตารางต่อไปนั้น แสดงการเก็บข้อมูลเกี่ยวกับนักศึกษา ซึ่งแต่ละคนสามารถอยู่ชมรมและมีงานอดิเรกได้มากกว่า 1 อย่าง
     จากตารางดังกล่าว จะเห็นว่าข้อมูลในคอลัมน์ชมรมและงานอดิเรกมีค่ามากกว่า 1 ค่า แสดงว่าไม่เป็น atomic หรืออยู่ในรูปของ repeating group ดังนั้นตารางที่ 1.5 จึงไม่เป็น 1NF โดยเราจะเรียกตารางที่ยังไม่ผ่านแม้แต่ 1NF ว่า Unnormalized Form (UNF) ซึ่งมีวิธีการ ที่จะทาให้เป็น 1NF คือ
          1) แยกคอลัมน์ที่มีค่ามากกว่า 1 ค่าออกเป็นแถวใหม่
          2) เพิ่มข้อมูลที่เหมาะสมเข้าไปในคอลัมน์ที่ว่างอยู่ของแถวที่เกิดขึ้นใหม่
     จากตารางที่ 1.5 ที่ไม่มีคุณสมบัติเป็น 1NF สามารถทาให้มีคุณสมบัติเป็น 1NF ได้ดังตารางที่ 1.6 ซึ่งมีรหัสนักศึกษา ชมรม และงานอดิเรก เป็นคีย์หลัก

     สาเหตุที่แยกคอลัมน์ที่มีค่ามากกว่า 1 ค่าออกเป็นแถวใหม่ เนื่องจากไม่รู้จานวนที่แน่นอนของค่าที่มีอยู่ในคอลัมน์นั้น เช่น ไม่ทราบว่านักศึกษาแต่ละคนจะมีงานอดิเรกกันคนละไม่เกินกี่อย่าง แต่ถ้าเราทราบจeนวนที่แน่นอนของคอลัมน์ที่มีหลายค่านั้น เราอาจแยกเป็นคอลัมน์ใหม่ได้เลย ตัวอย่างเช่น การเก็บชื่อผู้แต่งของหนังสือในห้องสมุด ซึ่งหนังสือเล่มหนึ่งอาจจะมีผู้แต่งหลายคน แต่ในการเก็บชื่อผู้แต่งจะเก็บเพียง 3 คนเท่านั้น ในกรณีนี้ควรจะแบ่งคอลัมน์ซึ่งเก็บชื่อผู้แต่งออกเป็นหลายคอลัมน์โดยขึ้นกับจeนวนผู้แต่งที่มากที่สุดที่มีอยู่หรือเราต้องการเก็บข้อมูลเอาไว้ ซึ่งจะทeให้ค่าของแต่ละคอลัมน์ เป็น Atomic ดังตารางต่อไปนี้

     ถึงแม้ว่าตารางข้างต้น จะได้รับการออกแบบให้อยู่ในรูป 1NF แล้ว แต่ลักษณะของข้อมูลภายในอาจก่อให้เกิดปัญหาขึ้นได้อีก เช่น ข้อมูลที่เกี่ยวกับนักศึกษารหัส 55001 ถูกจัดเก็บไว้ในแถวที่ 1, 2 และ 3 ได้แก่ ชื่อ และที่อยู่ โดยจะเห็นว่าเป็นการเก็บข้อมูลที่ซ้าซ้อนกัน ทำให้สิ้นเปลืองเนื้อที่ในการจัดเก็บ และก่อให้เกิดปัญหาในการเปลี่ยนแปลงข้อมูลด้วย เช่น ถ้านักศึกษารหัส 55001 มีการเปลี่ยนชื่อ หรือที่อยู่ ก็ต้องทำการแก้ไขข้อมูลหลายแถว ซึ่งถ้ามีการแก้ไขข้อมูลไม่ครบ ก็อาจทำให้ข้อมูลภายในตารางเกิดความขัดแย้งกันได้ ดังนั้นจึงต้องมีการนอร์มัลไลเซชันระดับที่ 2 ต่อไป

     2.2 Second Normal Form (2NF)
          ตารางที่ผ่านการทานอร์มัลไลเซชันระดับที่ 2 หรือ Second Normal Form ต้องมีคุณสมบัติดังนี้
                          1) ต้องมีคุณสมบัติของ 1NF
               2) ทุก nonprime attribute จะต้องขั้นกับ prime (primary key) ทุกตัว

     นั่นคือแอตทริบิวต์ที่ไม่ใช่คีย์หลักจะต้องมีค่าขึ้นอยู่กับคีย์หลักเท่านั้น โดยถ้าคีย์หลักประกอบด้วยแอตทริบิวต์ที่มากกว่า 1 ตัวก็จะต้องขึ้นอยู่กับแอตทริบิวต์ทั้งหมดที่เป็นคีย์หลัก ไม่ใช่ขึ้นอยู่กับบางตัว
     การที่จะรู้ว่าแอตทริบิวต์ใดขึ้นอยู่กับแอตทริบิวต์ใดนั้น ต้องใช้ความรู้ในเรื่องฟังก์ชันการขึ้นต่อกัน หรือ functional dependency ซึ่งเป็นสิ่งที่ใช้แสดงความสัมพันธ์ระหว่าง แอตทริบิวต์ ในรูปแบบฟังก์ชัน เพื่อช่วยในการตัดสินใจว่าแอตทริบิวต์ที่ไม่ใช่คีย์หลักควรจะปรากฏเป็นคอลัมน์อยู่ในตารางหรือควรจะแยกออกมาสร้างเป็นตารางใหม่
     สมมุติว่า X และ Y เป็นแอตทริบิวต์ในตารางหนึ่ง ถ้า Y ขึ้นอยู่กับ X จะสามารถเขียนฟังก์ชันการขึ้นต่อกันได้ดังนี้

     การที่ Y ขึ้นอยู่กับ X หมายความว่า ทุกๆค่าของ X ที่เราเลือกขึ้นมา จะสามารถหาค่าของ Y มา 1ค่าที่สอดคล้องกับค่าของ X ได้เสมอ เช่น จากตารางที่ 1.8 เป็นตารางที่เก็บข้อมูลเกี่ยวกับนักศึกษา ถ้าถาว่านักศึกษาคนใดที่มีรหัสนักศึกษาเป็น 55111 ก็สามารถตอบได้ทันทีว่าคือ นักศึกษาที่ชื่อว่า สามารถประเสริฐกุล ดังนั้นชื่อนักศึกษาจึงขึ้นอยู่กับรหัสนักศึกษา ซึ่งเขียนเป็นฟังก์ชันการขึ้นต่อกันได้ว่า รหัสนักศึกษา > ชื่อ นั่นเอง

     เมื่อเข้าใจในเรื่องฟังก์ชันการขึ้นต่อกันแล้ว เราลองมาพิจารณาว่าตารางต่อไป จะมีคุณสมบัติเป็น 2NF หรือไม่

     ก่อนอื่นเราต้องพิจารณาว่าตารางที่ 1.9 มีคุณสมบัติเป็น 1NF หรือไม่ จากข้อมูลในตารางจะเห็นว่าไม่มีคอลัมน์ใดในตารางที่มีค่ามากกว่า 1 ค่า แสดงว่าผ่านคุณสมบัติเป็น 1NF จากนั้นต้องพิจารณาต่อว่ามีแอตทริบิวต์ใดเป็น prime หรือคีย์หลัก ส่วนที่เหลือก็จะเรียกว่า nonprime จากตารางที่ 1.9 จะมีแอตทริบิวต์ รหัสลูกค้า และ รหัสสินค้า เป็น prime ส่วน ชื่อลูกค้า ที่อยู่ ชื่อสินค้า และจานวนสินค้า เป็น nonprime
     จากคุณสมบัติของ 2NF คือ nonprime ต้องขึ้นกับ prime ทุกตัว ในการพิจารณาว่าเป็น 2NF หรือไม่ จะต้องพิจารณา nonprime ทีละตัว ซึ่งมีผลสรุปการขึ้นต่อกันดังนี้

     จากข้อมูลในตารางข้างต้น จะสังเกตว่าชื่อลูกค้า, ระดับ และประเภทจะขึ้นกับ รหัสลูกค้าเพียงอย่างเดียว ไม่ขึ้นกับรหัสสินค้าเลย ทาให้ไม่เป็นไปตามคุณสมบัติของ 2NF และนอกจากนี้ยังมีกรณีอื่นอีกที่ทาให้ตารางข้างต้น ไม่เป็นไปตามคุณสมบัติของ 2NF ได้แก่

     จากข้อมูลในตาราข้างต้นจะสังเกตว่าชื่อสินค้าจะขึ้นกับรหัสสินค้าเพียง อย่างเดียว ไม่ขึ้นกับรหัสลูกค้าเลย ทำให้ไม่เป็นไปตามคุณสมบัติของ 2NF มีเพียงจำนวนสินค้าอย่างเดียวที่ขึ้นกับรหัสลูกค้า และรหัสสินค้า สรุปว่า
                                        รหัสลูกค้า,รหัสสินค้า      > จำนวนสินค้า
                                        รหัสลูกค้า                         > ชื่อลูกค้า, ระดับ, ประเภท
                                        รหัสสินค้า                         > ชื่อสินค้า

ดังนั้นถ้าต้องการให้ตารางข้างต้น มีคุณสมบัติเป็น 2NF จะต้องทำการแตกตารางออกมา ตามความสัมพันธ์ของฟังก์ชันการขึ้นต่อกัน เป็น 3 ตาราง ดังนี้


     จากตารางที่ 1.10 หากต้องการเพิ่มข้อมูลลูกค้าขึ้นมาอีก 1 คน อาจมีปัญหาเกิดขึ้น คือ ถ้าลูกค้าที่จะเพิ่มเข้าไปเป็นลูกค้าในระดับ A แสดงว่าต้องเป็นลูกค้าชั้นดี ในช่องประเภทต้องใส่ว่า “ชั้นดี” เท่านั้น ถ้าหากใส่ว่า ปานกลาง หรือพอใช้ ข้อมูลก็จะขัดแย้งกัน เพราะฉะนั้นตารางที่ผ่าน 2NF บางตารางอาจเกิดปัญหาในเรื่องของการเพิ่มข้อมูลได้ ดังนั้นจึงต้องมีการนอร์มัลไลเซชันระดับที่ 3 ต่อไป

     2.3 Third Normal Form (3NF)
          ตารางที่ผ่านการทานอร์มัลไลเซชันระดับที่ 3 หรือ Third Normal Form ต้องมีคุณสมบัติดังนี้
            1) ต้องมีคุณสมบัติของ 2NF
            2) nonprime ต้องไม่ขัั้นnonprime

     จากตารางที่ 1.13 จะมีแอตทริบิวต์ เลขที่ใบเสร็จ เป็น prime ส่วน รหัสลูกค้า ชื่อลูกค้า และที่อยู่ เป็น nonprime นักศึกษาต้องพิจารณาก่อนว่าตารางที่ 1.13 มีคุณสมบัติเป็น 2NF หรือไม่ ซึ่งจากข้อมูลจะสังเกตว่ามีคุณสมบัติเป็น 2NF เนื่องจากไม่อยู่ในรูป repeating group และ nonprime ทุกตัวขึ้นกับ prime ทุกตัว คือ รหัสลูกค้า ชื่อลูกค้า และที่อยู่ ขึ้นกับ เลขที่ใบเสร็จ ซึ่งเป็น prime เพียงตัวเดียว

เลขที่ใบเสร็จ ---> รหัสลูกค้า, ชื่อลูกค้า, ที่อยู่

     เมื่อมีคุณสมบัติเป็น 2NF แล้ว ก็พิจารณาต่อว่า nonprime ขึ้นกับ nonprime หรือไม่ ถ้าไม่มี nonprime ตัวใดขึ้นต่อกัน ก็แสดงว่ามีคุณสมบัติเป็น 3NF แต่จากข้อมูลในตารางที่ 1.13 มี nonprime บางตัวที่ขึ้นต่อกัน ได้แก่ ชื่อลูกค้าและที่อยู่ ขึ้นกับรหัสลูกค้า ทาให้ไม่เป็นไปตามคุณสมบัติของ 2NF

รหัสลูกค้า ---> ชื่อลูกค้า, ที่อยู่

     ดังนั้นจึงต้องมีการแตกตารางที่ 1.13 ออกมาเป็น 2 ตาราง ตามความสัมพันธ์ของฟังก์ชันการขึ้นต่อกัน ดังนี้
     อีกตัวอย่างหนึ่ง จากตารางที่ 1.10 ซึ่งผ่านการนอร์มัลไลเซชันระดับที่ 2 แล้ว แต่ยังมีปัญหาการเพิ่มข้อมูลอยู่ ดังที่กล่าวมาแล้วข้างต้น จึงต้องมีการทาให้เป็น 3NF เนื่องจาก nonprime บางตัวขึ้นกับ nonprime คือ ระดับ ---> ประเภท ดังนั้นจึงต้องแยก เป็น 2 ตาราง ดังต่อไปนี้