Unit 1 ความรู้เบื้องต้นเกี่ยวกับฐานข้อมูล

หน่วยที่ 1 ความรู้เบื้องต้นเกี่ยวกับฐานข้อมูล
__________________________________________________________________

ฐานข้อมูล (Database) คืออะไร
          ระบบในการจัดการข้อมูลอย่างมีระเบียบ โดยใช้คอมพิวเตอร์ เพื่อจุดประสงค์ที่ชัดเจน หรือประโยชน์ทางธุรกิจ เช่นระบบลงทะเบียนนักศึกษา ระบบทะเบียนราษฎร์ เป็นต้น

องค์ประกอบของฐานข้อมูล
ประกอบไปด้วย 4 องค์ประกอบหลักดังนี้
1. ข้อมูล (
Data) จะเป็นรหัสประจำตัว ชื่อที่อยู่ เบอร์โทรศัพท์ พวกนี้คือข้อมูลสำหรับจัดเก็บในฐานข้อมูลของเรา
2. คอมพิวเตอร์ (Computer) จะเป็นแบบตั้งโต๊ะ (Desktop) โน้ตบุ๊ค (Notebook) หรือแม้แต่เน็ตบุ๊ค (Netbook) ก็สามารถใช้งานเก็บฐานข้อมูลได้ทั้งนั้น
3. ซอฟต์แวร์ (Software) พอมีคอมพิวเตอร์แล้ว อันดับถัดไปก็ต้องเป็นซอฟต์แวร์ ตัวอย่างซอฟต์แวร์ที่พวกเราคุ้นเคยได้ยินกันบ่อยๆ ก็ได้แก่ Microsoft Excel, Microsoft Word แต่โปรแกรมที่เราใช้ในวิชานี้คือ Microsoft Access ซึ่งเป็นโปรแกรมเฉพาะด้านข้อมูลของโปรแกรมในชุด Microsoft Office
4. ผู้ใช้ (User) หมายถึงบุคคลที่ใช้คอมพิวเตอร์


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


รูปแบบของการจัดระเบียบข้อมูล
          รูปแบบของการจัดระเบียบของข้อมูล ซึ่งมีอยู่หลายรูปแบบ  ประกอบด้วยโครงสร้างพื้นฐานที่ลำดับจากหน่วยที่เล็กที่สุดไปยังหน่วยที่ใหญ่ขึ้นตามลำดับต่อไปนี้

1. บิท (Bit : Binary Digit) คือหน่วยของข้อมูลที่เล็กที่สุดที่เก็บอยู่ในหน่วยความจำภายในคอมพิวเตอร์ ซึ่ง Bit จะแทนด้วยตัวเลขหนึ่งตัว คือ 0 หรือ 1 อย่างใดอย่างหนึ่ง เรียกตัวเลข 0 หรือ 1 ว่าเป็น บิท 1 บิท
2. ไบท์ (Byte) คือหน่วยของข้อมูลที่นำบิทหลายๆบิทมารวมกัน แทนตัวอักษรแต่ละตัว เช่น A, B, …, Z, 0, 1, 2, … ,9 และสัญลักษณ์พิเศษอื่นๆ เช่น $, &, +, -, *, / ฯลฯโดยตัวอักษร 1 ตัวจะแทนด้วยบิท7 บิท หรือ 8 บิทซึ่งตัวอักษรแต่ละตัวจะเรียกว่า ไบท์ เช่น ตัว A เมื่อเก็บอยู่ในคอมพิวเตอร์จะเก็บเป็น 1000001 ส่วนตัว B จะเก็บเป็น 1000010 เป็นต้น
3. เขตข้อมูล (Field) คือ หน่วยของข้อมูลที่เกิดจากการนำตัวอักขระหลายๆตัวมารวมกัน เป็นคำที่มีความหมาย เช่น ชื่อ นามสกุล รหัสนักเรียน เป็นต้น
4. ระเบียน (Record) คือ หน่วยของข้อมูลที่มีการนำเขตข้อมูลหลายๆ เขตข้อมูล ที่มีความสัมพันธ์กันมารวมกัน หรือค่าของข้อมูลในแต่ละเขตข้อมูล ดังนั้น 1 Record ของข้อมูลนักศึกษาจะประกอบไปด้วย หลาย Field คือ ชื่อ นามสกุล รหัสนักศึกษา เป็นต้น
5. แฟ้มข้อมูล (File) คือ หน่วยของข้อมูลที่มีการนำระเบียนหลายๆ ระเบียนที่มีความสัมพันธ์กันมารวมกัน
6. ฐานข้อมูล (Database) คือ หน่วยของข้อมูลที่มีการนำแฟ้มข้อมูลหลายๆ แฟ้มข้อมูล ที่มีความสัมพันธ์กันมารวมกัน


องค์ประกอบของฐานข้อมูลเชิงสัมพันธ์
1.    ข้อมูล (Data) และ ตาราง (Table)
โปรแกรมเกี่ยวกับฐานข้อมูลองค์ประกอบสำคัญก็คือ “ข้อมูล” โดยข้อมูลก็เป็นอะไรที่อยู่ใกล้ๆตัวเราเช่น ข้อมูลในบัตรประชาชน ซึ่งประกอบไปด้วย หมายเลขประจำตัว ชื่อ สกุล วันเกิด หมู่เลือดเป็นต้น
จากข้อมูลที่กล่าวมานั้นเป็นเพียงข้อมูล 1 เรคอร์ด ถ้าจะให้เข้าใกล้ฐานข้อมูลสัมพันธเข้าไปอีก ต้องนำข้อมูลของหลายๆ คนไปใส่ในตาราง ซึ่งจะมีรูปแบบดังนี้
ตารางข้อมูลประชาชน

2.    ฟิลด์ (Field)
“ฟิลด์” มีหน้าที่ในการเก็บข้อมูลแบบเดียวกันเอาไว้ด้วยกัน เช่น ฟิลด์ชื่อ จะเก็บข้อมูลชื่อของประชาชนเท่านั้น หรือฟิลด์นามสกุล ก็จะเก็บข้อมูลนามสกุลประชาชนเท่านั้น ต้องไม่มีข้อมูลอื่นแอบแฝงเข้ามา

แสดงฟิลด์ของตารางข้อมูลบัตรประชาชน


 


ถ้าไปเปิดตำราเล่มอื่นที่เกี่ยวกับฐานข้อมูล เราอาจจะได้ยิน “แอตตริบิวต์” ก็ไม่ต้องแปลกใจ เพราะทั้ง ฟิลด์ คอลัมน์ และแอตตริบิวต์ ต่างเป็นเรื่องเดียวกันขึ้นอยู่กับว่าไครถนัดเรียกแบบไหน

3.    เรคอร์ด (Record)
“เรคอร์ด” เป็นกลุ่มข้อมูลของฟิลด์หลายๆ ฟิลด์ ที่มีความสัมพันธ์กัน จะให้เข้าใจคือ ข้อมูตามแนวนอนของตาราง
แสดงเรคอร์ดของตารางข้อมูลบัตรประชาชน
 ถ้าไปเปิดตำราเล่มอื่นที่เกี่ยวกับฐานข้อมูล เราอาจจะได้ยิน “โรว” ก็ไม่ต้องแปลกใจ เพราะทั้ง เรคอร์ด โรว หรือแถว ต่างเป็นเรื่องเดียวกันขึ้นอยู่กับว่าไครถนัดเรียกแบบไหน
4.    เอ็นทิตี้ (Entity) และ แอตตริบิวต์ (Attribute)
จากตาราง ฟิลด์ และเรคอร์ด เราจำเป็นต้องมาดูในอีกส่วนของฐานข้อมูลเชิงสัมพันธ์ ซึ่งเขาอธิบายด้วยสิ่งที่เรียกว่า “เอ็นทิตี้” และ “แอตตริบิวต์”
โดยเอ็นทิตี้ ก็คือ กลุ่มข้อมูลหรือเปรียบเทียบให้เข้าใจง่ายก็คล้ายกับ “ชื่อของตาราง” เช่น เอ็นทริตี้ประชาชน (หรือตารางข้อมูลประชาชน)
ส่วนแอตตริบิวต์ ก็คือสมาชิกภายในเอ็นทิตี้ เช่น เอ็นทิตี้ของประชาชนควรประกอบได้ด้วย หมายเลขประจำตัว หมายเลขประจำตัว ชื่อ นามสกุล และอื่นๆ
ทั้งเอ็นทิตี้และแอตตริบิวต์ พอเรานำมาประกอบเข้าด้วยกันก็จะได้ดังรูป



 
          เวลาที่เขาออกแบบฐานข้อมูลกัน ก็จะหยิบเฉพาะเอ็นทิตี้มาก่อน โดยเราอาจจะเห็นเป็นแบบนี้ในหนังสือบางเล่ม

จากภาพแสดงเอ็นทิตี้ของประชาชน และเอ็นทิตี้ของผู้เสียภาษี

 __________________________________________________________________________


ความหมายของฐานข้อมูลเชิงสัมพันธ์
      เป็นการจัดเก็บรวบรวมข้อมูลเป็นแถวและคอลัมน์ในลักษณะตารางสองมิติ ที่ประกอบด้วย แอททริบิวต์ที่แสดงคุณสมบัติขิงรีเลชั่นหนึ่งๆ ฐานข้อมูลเชิงสัมพันธ์เป็นฐานข้อมูลซึ่งให้ภาพของข้อมูลในระดับ ภายนอก(ExternalLevel)และระดับแนวความคิด(ConceptualLevel)

คําศัพท์พื้นฐานเกี่ยวกับโมเดลเชิงสัมพันธ์
1. รีเลชัน(Relation) ประกอบด้วยแถวและคอลัมน์ของข้อมูลซึ่งเรียกได้อีกอย่างว่า ตาราง (Table)
2. ทูพเพิล(tuple) คือ แถวแต่ละแถวในตารางจะมีความหมายเหมือนกับระเบียน
3. แอททริบิวท์(attribute) คือ คอลัมน์แต่ละคอลัมน์ของตารางจะมีความหมายเหมือนกับเขตข้อมูล
4. คาร์ดินัลลิตี้(Cardinality) คือ จํานวนทูพเพิลที่มีอยู่ในรีเลชัน
5. ดีกรี(Degree) คือ จํานวนแอททริบิวท์ที่มีอยู่ในรีเลชัน

เปรียบเทียบรูปแบบคำศัพท์พื้นฐานเกี่ยวกับฐานข้อมูลเชิงสัมพันธ์

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

คุณลักษณะในการจัดเก็บข้อมูลของรีเลชั่น
1. ข้อมูลในแต่ละทูพเพิลจะไม่ซ้ำกัน ทั้งนี้เพราะการจัดการฐานข้อมูลที่ดีไม่ควรจะมีข้อมูลที่ซ้ำซ้อนปรากฏอยู่ในรีเลชั่น โดยระบบจัดการฐานข้อมูล จะมี กลไกที่ใช้ในการควบคุมไม่ให้มีความซ้ำซ้อนเกิดขึ้น

2. การเรียงลําดับของข้อมูลในแต่ละทูพเพิลไม่ถือว่าสําคัญ การจัดเก็บของข้อมูลในรีเลชั่น จะถูกจัดเรียงตามลําดับลงบนสื่อที่เก็บข้อมูล แต่การเรียกใช้ข้อมูลในรีเลชั่นสามารถเรียกใช้ตามที่ผู้ใช้ต้องการ

3. การเรียงลําดับของข้อมูลในแต่ละแอททริบิวท์ไม่ถือว่าสําคัญ ไม่มีการระบุว่าแอททริบิวท์ซ้ายสุดคือ แอททริบิวท์แรก หรือแอททริบิวท์ขวาสุด คือแอททริบิวท์สุดท้ายทั้งนี้เพราะการอ้างอิงถึงแอททริบิวท์ใดจะใช้ชื่อ คือ แอททริบิวท์สุดท้าย ทั้งนี้เพราะการอ้างอิงถึงแอททริบิวท์ใดจะใช้ชื่อ ของแอททริบิวท์นั้นๆในการอ้างอิง มาใช้ลําดับที่แอททริบิวท์นั้นปรากฏ
4. ข้อมูลที่อยู่ในแอททริบิวท์เดียวกันจะต้องมีชนิดข้อมูลเป็นแบบเดียวกัน
5. แต่ละแอททริบิวท์จะต้องมีชื่อแอททริบิวท์ที่แตกต่างกัน
6. ค่าของข้อมูลในแต่ละแอททริบิวท์ของทูพเพิลหนึ่งๆจะบรรจุขอมูลได้เพียงค่าเดียวไม่ใช้กลุ่มของข้อมูลที่แสดงค่าที่มากกว่าหนึ่งแถว (Repeater Group)

โดเมน (Domain)
เป็นการนิยามขอบเขตของค่าที่เป็นไปได้ให้กับข้อมูลในแต่ละ Attribute เพื่อป้องกันไม่ให้เกิดการป้อนขูอมูลที่เกินขอบเขตที่กําหนด


คุณสมบัติของโดเมน
1. ค่าที่นิยามให้กับข้อมลจะต้องมีค่าเป็น Scalar
2. ข้อมูลที่สามารถนํามากําหนด Domain ได้ จะต้องเป็นข้อมูลที่เป็นอิสระ จากข้อมูลอื่น
3. ข้อมูลที่สามารถนํามากําหนดโดเมนได้จะต้องเป็นข้อมูลประเภทเดียวกัน
4. โดเมนที่กําหนดให้กับ Attribute ที่จะต้องถูก Attribute อื่นอ้างถึง สามารถถ่ายทอดโดเมนของตนให้กับ Attribute ในอีก Relation หนึ่งที่อ้างถึงไปด้วย
5. ค่าของโดเมนที่กําหนดให้กับข้อมูล ไม่จําเป็นที่จะต้องปรากฏอยู่ในข้อมูลนั้น ๆ

ประเภทของรีเลชั่น
1. รีเลชั่นหลัก (Base Relation) เป็นตารางที่มีการจัดเก็บข้อมูลจริงไว้ เพื่อนําข้อมูลนั้นไปใช้

2. วิว (View) เป็นรีเลชั่นที่ถูกสร้างขึ้นตามความต้องการใช้ข้อมูลของผู้ใช้แต่ละคน

คีย์ (Key)
เพื่อเพิ่มประสิทธิภาพในการจัดการข้อมูลควรกำหนด คีย์ (Key) ให้กับตารางเพื่อใช้จำแนกทูพเพิลและกำหนดความสัมพันธ์ระหว่างตาราง เช่น กำหนดรหัสประจำตัวให้กับนักเรียนทุกคนในตารางนักเรียน

ประเภทของคีย์
1. คีย์หลัก (Primary Key) แอททริบิวท์หรือกลุ่มของแอททริบิวท์ที่มีข้อมูลไม่ซ้ำกัน ประกอบด้วยจํานวนแอททริบิวท์ที่น้อยที่สุดที่จะสามารถใช้เจาะจง หรืออ้างอิงถึงแถวใดแถวหนึ่งในรีเลชั่นได้


2. คีย์รวม (Composite Key) ประกอบด้วยแอททริบิวท์มากกว่าหนึ่งแอททริบิวท์มารวมกันเป็น
คีย์หลัก

3. คีย์คู่แข่ง (Candidate Key) แอททริบิวท์ที่มีคุณสมบัติที่สามารถเลือกเป็นคีย์หลักได้

4. คีย์สำรอง (Alternate Key) คีย์คู่แข่งที่ไม่ได้เลือกเป็นคีย์หลัก

5. คีย์นอก (Foreign Key) เป็นแอททริบิวท์หรือกลุ่มของแอททริบิวท์ที่อยู่ในรีเลชั่นหนึ่ง ๆ ที่ค่าของแอททริบิวท์นั้นไปปรากฏเป็นคีย์หลักในอีกรีเลชั่น(หรืออาจเป็น รีเลชั่นเดิมก็ได้)


6. ค่าว่าง (Null Values) แอททริบิวท์ที่ไม่มีค่าข้อมูลเก็บอยู่ ไม่ใช่ช่องว่างหรือเลข 0

 __________________________________________________________________________


ความสัมพันธ์ (Relationships)
ความสัมพันธ์ (Relationships) หมายถึง ความสัมพันธ์ระหว่างตารางหรือเอนทิตี้ เช่น ความสัมพันธ์ระหว่างตารางประชาชน และ ตารางผู้เสียภาษี ดังตาราง
ตารางข้อมูลประชาชน


ตารางข้อมูลผู้เสียภาษี

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

ความสัมพันธ์ระหว่างเอนทิตี้ อาจแบ่งออกเป็น 3 ประเภท คือ
      1.       ความสัมพันธ์แบบหนึ่งต่อหนึ่ง (One-to-one Relationships)
      2.       ความสัมพันธ์แบบหนึ่งต่อกลุ่ม (one-to-many Relationships)
      3.       ความสัมพันธ์แบบกลุ่มต่อกลุ่ม (Many-to-many Relationships)

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


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

สามารถเขียนในรูปแบบของเอนทิตี้และแอททริตี้ได้ดังนี้


และเขียนในรูปแบบของเอนทิตี้ได้ดังนี้




ความสัมพันธ์แบบหนึ่งต่อกลุ่ม 1 : N (one-to-many Relationships)
          ความสัมพันธ์แบบหนึ่งต่อกลุ่ม (one-to-many Relationships) เป็นการแสดงความสัมพันธ์ของข้อมูลในเอนทิตี้หนึ่ง ที่มีความสัมพันธ์ข้อมูลหลาย ๆ ข้อมูล ในอีกเอนทิตี้หนึ่ง จะให้เข้าใจง่ายๆ คือข้อมูล 1 เรคอร์ดจากตารางหนึ่งสามารถสัมพันธ์กับข้อมูลในอีกตารางหนึ่งตั้งแต่ 1 เรคอร์ดขึ้นไปจนถึงหลายๆ เรคอร์ด ตัวอย่างดังตาราง

จากตารางจะเห็นว่าห้องสอบ 1 ห้องมีนักเรียนผู้เข้าสอบได้หลายคน
เมื่อแปลงจากตารางให้อยู่ในรูปแบบของ เอ็นทิตี้กับแอททริบิวท์ จะได้ดังรูป

และถ้าหยิบมาเฉพาะเอ็นทิตี้ ก็จะได้ดังนี้




ความสัมพันธ์แบบกลุ่มต่อกลุ่ม (Many-to-many Relationships)
      ความสัมพันธ์แบบกลุ่มต่อกลุ่ม (Many-to-many Relationships) เป็นการแสดงความสัมพันธ์ ของข้อมูลสองเอนทิตี้ในลักษณะกลุ่มต่อกลุ่ม ตัวอย่างเช่น หนังสือ 1 เรื่องจะมีผู้ยืมหนังสือได้มากกว่า 1 คน ในขณะเดียวกัน ผู้ยืมหนังสือ 1 คน ก็สามารถยืมหนังสือได้มากกว่า 1 เรื่อง
ตารางหนังสือ

ตารางผู้เช่าหนังสือ

เมื่อแปลงจากตารางให้อยู่ในรูปแบบของ เอ็นทิตี้กับแอททริบิวท์ จะได้ดังรูป



และถ้าหยิบมาเฉพาะเอ็นทิตี้ ก็จะได้ดังนี้


_____________________________________________________________________________

การทำนอร์มอลฟอร์ม (Normalization)

การนอร์มัลไลเซซัน (Normalization) เป็นทฤษฎีหรือกระบวนการที่ใช้ในการทำให้เอนทิตี้และแอททริบิวต์ที่ได้ออกแบบไว้มาจัดกลุ่มตารางให้ความสัมพันธ์กัน ให้อยู่ในรูปแบบที่เรียกว่า รูปแบบบรรทัดฐาน หรือ Normal Form เพื่อเพิ่มประสิทธิภาพให้แก่ฐานข้อมูล โดยทำให้ฐานข้อมูลไม่มีความซ้ำซ้อนและไม่มีขนาดใหญ่จนเกินไป โดย การทำ “Normalization” มีลำดับดังนี้
        1.       0NF เป็นตาราง (Table)
        2.       1NF (First Normal Form)
        3.       2NF (Second Normal Form)
        4.       3NF (Third Normal Form)
        5.       BCNF (Boyce/Codd Normal Form)
        6.       4NF (Forth Normal Form)
        7.       5NF (Fifth Normal Form)
โดยส่วนใหญ่ ในการทำนอร์มอลฟอร์มจะทำถึง 3NF เท่านั้น ส่วนพวกที่มากกว่านี้แทบจะไม่พบในชีวิตประจำวัน

0NF เป็นตาราง
          ในการสร้างฐานข้อมูลนั้น ข้อมูลจะต้องสามารถทำเป็นตารางได้ ซึ่งตารางที่มีมานั้น อาจมีข้อมูลไม่ครบทุกช่อง (ซึ่งตารางที่ผ่านมา ได้ทำการทำนอร์มอลฟอร์มมาแล้ว ซึ่งตารางดังกล่าวยังไม่ได้ทำ) ดังตารางที่ 1

ดังนั้น 0NF คือตารางที่มีช่องว่าง ซึ่งไม่สามารถนำข้อมูลมาใส่ฐานข้อมูลได้ จึงต้องมีการนำมา 1NF เสียก่อน

1NF (First Normal Form)
          กฎของการทำ 1NF คือ ต้องทำการเติมตารางที่เว้าแหว่งในแต่ละฟิลด์ให้เต็มทุกช่องโดย 1 ช่องต้องมีข้อมูลแค่ 1 ข้อมูลเท่านั้น ที่สำคัญจะต้องไม่มีเรคอร์ดซ้ำ (Repeating Groups)
          จากตารางที่ 1 เราสังเกตได้ว่าในตารางนั้นมีช่องว่างอยู่ ซึ่งตารางแบบนี้ไม่เหมาะสมที่จะใส่ในฐานข้อมูล โดยใน 1NF จะต้องทำการเติมช่องว่างให้เต็ม จะได้ดังตารางที่ 2


หลังจากทำ 1NF แล้วตารางอาจยังดูแปลกๆอยู่ เพราะ
              1.       ตารางดูใหญ่มาก มีข้อมูลมากเกินความจำเป็น
              2.       ข้อมูลซ้ำซ้อน
              3.       ถ้าเลิกขายสินค้าชิ้นไหนก็ต้องลบข้อมูลออกหลายจุด
              4.       ถ้ามีสินค้าใหม่ออกจำหน่าย ก็ต้องใส่ข้อมูลหลายแห่ง

ดังนั้นการทำ 1NF ยังไม่เพียงพอ จึงต้องทำ 2NF ต่อไป 

2NF (Second Normal Form)
กฎของการทำ 2NF คือ ต้องเป็น 1NF มาก่อน แล้วต้องมีคีย์หลัก (Primary keyส่วนข้อมูลที่อยู่ในฟิลด์อื่นจะเรียกว่า ไม่มีคีย์ (Non-key) และฟิลด์ดังกล่าวต้องขึ้นกับฟิลด์ที่เป็นคีย์หลักด้วย โดย คีย์หลักนี้สามารถเป็นคีย์เดี่ยวหรือคีย์รวม (Compound key) ก็ได้ และถ้าเป็นคีย์รวม แล้วฟิลด์ที่ไม่มีคีย์ต้องขึ้นกับคีย์รวมด้วย

วิธีการนำตาราง 1NF มาทำเป็น 2NF
      1. พิจารณาว่าข้อมูลในตารางของเรามีอะไรบ้าง อาจนำความรู้จากเรื่องเอ็นทิตี้และแอททริบิวท์มาช่วยจากตารางที่ 2 แปลงได้ ดังนี้


2. พิจารณาความสัมพันธ์ของข้อมูล โดยในที่นี้จะเป็นข้อมูล 2 กลุ่มที่มีความสัมพันธ์กันเองคือ “รายการอาหาร” และ “ข้อมูลการสั่งอาหาร” ทำให้เราสามารถแยกเป็น 2 เอ็นทิตี้ได้ดังนี้

ข้อสังเกต
                  1.  ราคาอาหารจะขึ้นอยู่กับชนิดของอาหารเท่านั้นไม่ได้ขึ้นกับฟิลด์อื่นเลย ทำให้สามารถแยกมาเป็น 1 ตารางได้
                  2.  อาหารที่สั่ง และจำนวนที่สั่ง จะขึ้นอยู่กับลูกค้าว่าจะอะไร แต่อย่างไรก็ตามเราไม่สามารถนำข้อมูลลูกค้าของร้านอาหารตามสั่งมาใส่ในฐานข้อมูลได้ ก็เลยต้องใช้ Order No กับโต๊ะที่ลูกค้านั้ง รวมกับวัน-เวลาที่ลูกค้ามาใช้บริการเป็นหลักให้อาหารที่สั่งกับจำนวนที่สั่ง ก็เลยได้มาอีก 1 ตาราง
                  3.  แอททริบิวท์ที่เป็น “ยอดรวม” เป็นค่าที่สามารถหาได้จากการคำนวณ โดยนำจำนวนที่สั่งมาคูณกับราคาอาหาร ก็เลยไม่จำเป็นต้องมีฟิลด์นี้อยู่ในตาราง ดังนั้นจึงตัดทิ้งได้

      3. หาคีย์หลักให้กับเอ็นทิตี้ทั้งสอง โดยถ้าเอ็นทิตี้ไหนไม่มีคีย์หลัก ให้เพิ่มแอททริบิวท์คีย์หลักของตารางนั้นๆ (อาจกำหนดรหัสของอาหารด้วยว่ารายการไหนรหัสอะไร) ดังนี้

      4. แปลงเอ็นทิตี้และแอททริบิวท์เป็นตาราง จากนั้นดูว่าคีย์หลักที่เราใส่มานั้นใช้ได้หรือไม่ โดยพิจารณาจากตารางที่ 3 และตารางที่ 4 ดังนี้




จากตารางที่ 3 รายการอาหารดูแล้วไม่น่ามีปัญหา แต่เมื่อมาดูตารางที่ 4 ข้อมูลการสั่งอาหารดูแล้วมีปัญหาแน่ๆ เพราะดูเหมือนว่าจะไม่มีฟิลด์ไหนเป็นคีย์หลักได้เลย ดังนั้นจึงต้องรวม Order No วันที่ โต๊ะที่ เวลาและรายชื่ออาหารเข้าไปเป็นคีย์หลัก ซึ่งในการรวมฟิลด์หลายๆฟิลด์นี้เองที่เรียกว่าคีย์รวม (Compound key)

หมายเหตุ ในแง่ของฐานข้อมูล โดยปกติแล้วเราจำไม่นำชื่อของอะไรก็ตามมาเป็นคีย์หลัก หรือส่วนหนึ่งของคีย์รวม เพราะจะมีปัญหาในการกำหนด Index key ดังนั้นจึงทำการเปลี่ยน จากรายการชื่ออาหารที่สั่งเป็นรหัสสินค้าแทน ดังนี้


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

วิธีพิจารณาคือ “รายการอาหารหลายรายการสามารถอยู่ในข้อมุลการสั่งอาหารได้หลายข้อมูล”
หลังจากทำ 2NF ยังไม่สามารถน้ำข้อมูลมาใช่ได้ เนื่องจาก
1.       มีข้อมูลซ้ำซ้อนเยอะ
2.       ความสัมพันธ์ก็แบบ M:N
ดังนั้นเราควรไปทำ 3NF ต่อไป

3NF (Third Normal Form)
          กฎของการทำ 3NF คือ จะต้องเป็น 2NF มาก่อนและต้องไม่มีการขึ้นต่อกันเองในหมู่ Non-key หมายความว่า พวกที่ไม่ใช่คีย์หลัก ต้องขึ้นตรงกับคีย์หลักเท่านั้น
          สำหรับตาราง “รายการอาหาร” ดูแล้วไม่น่ามีปัญหาอะไร เพราะอาหารที่สั่ง กับราคาอาหารต่างก็ขึ้นกับรหัสอาหารทั้งหมด ดังนั้นตารางนี้ถึงว่าเป็น 3NF แล้ว
          ตาราง “ข้อมูลการสั่งอาหาร” จะเห็นว่า “อาหารที่สั่ง (รหัสอาหาร) ” กับ “จำนวน” นอกจากจะขึ้นกับ Order No แล้ว ยังขึ้นกลับ วันที่ โต๊ะ และเวลาอีกด้วย ซึ่งกรณีนี้แสดงว่ามีความสัมพันธ์แบบ Non-key อยู่แน่นอน ดังนั้นเราจึงแบ่ง “ข้อมูลการสั่งอาหาร” ออกเป็นเอ็นทิตี้ย่อยดังนี้

 เมื่อมาดูในมุมมองของตารางข้อมูลจะได้ดังนี้


ส่วนตารางข้อมูลการสั่ง สามารถตัดส่วนที่ซ้ำๆ ออกได้ ทำให้คีย์หลักของเรา เปลี่ยนไป จากที่รวม ทั้ง Order No วันที่ โต๊ะที่ และเวลา ก็เหลือเพียง Order No เป็นคีย์หลักก็เพียงพอแล้ว

เขียนในรูปแบบของเอ็นทิตี้กับแอททริบิวท์ ได้ดังนี้


จากนั้นทำการพิจารณาความสัมพันธ์ของเอ็นทิตี้ ซึ่งจะมีความสัมพันธ์ในรูปแบบนี้

ตารางที่ได้นั้นก็สามารถนำไปใส่ในฐานข้อมูลได้แล้ว ซึ่งการทำนอมอลฟอร์มนั้น ถ้าทำถึง 3NF มักจะเพียงพอต่อการนำไปใส่ฐานข้อมูลโดยไม่ก่อให้เกิดปัญหา









โพสต์ยอดนิยมจากบล็อกนี้

หน่วยที่ 4 การจัดการข้อมูลด้วยคิวรี