การออกแบบฐานข้อมูลเว็บ
การประยุกต์ฐานข้อมูลกับเว็บจะช่วยทำให้การค้นหา การดึงและแสดงผลแบบ Server Side Include กับข้อมูลที่มีการเปลี่ยนแปลงบ่อยมีประสิทธิภาพ โดยระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (Relational Database Management System) ได้รับการใช้อย่างแพร่หลาย
แนวคิดฐานข้อมูลเชิงสัมพันธ์
ฐานข้อมูลเชิงสัมพันธ์ คือ ฐานข้อมูลที่ได้รับการใช้มากที่สุด โดยขึ้นกับพื้นฐานทางทฤษฎีที่เข้มแข็ง ด้านพีชคณิตเชิงสัมพันธ์ ไม่มีความจำเป็นในการทำความเข้าใจทางทฤษฎีความสัมพันธ์ในการใช้ฐานข้อมูลเชิงสัมพันธ์ แต่จำเป็นต้องเข้าใจแนวคิดฐานข้อมูลพื้นฐานบางประการ
ตารางข้อมูล(Table)
ฐานข้อมูลเชิงสัมพันธ์ประกอบด้วย relation ตามปกติ เรียกว่า ตารางข้อมูล (Table) ตารางข้อมูลคล้ายกับตารางของข้อมูล ถ้าใช้โปรแกรมกระดาษทำการ ( เช่น Microsoft Excel) จะเป็นการใช้ตารางเชิงสัมพันธ์
ในภาพ 7.1 แสดงตารางข้อมูลตัวอย่าง โดยเก็บชื่อ ที่อยู่ ของลูกค้าร้านหนังสือ Widebase Book
CustomerID |
Name |
Address |
City |
1 |
สมศรี ยืนยง |
15/14 ถนนพหลโยธิน พญาไท |
กรุงเทพฯ |
2 |
กมล จิตมั่น |
125/10 ถนนอิสรภาพ บางกอกใหญ่ |
กรุงเทพฯ |
3 |
มานะ สายใจ |
14/2 ถนนสุขาภิบาล 2 บึงกุ่ม |
กรุงเทพฯ |
ภาพ 7.1 แสดงรายชื่อลูกค้า
ตารางข้อมูลมีชื่อ (Customer) คอลัมน์จำนวนหนึ่ง แต่ละคอลัมน์ ตรงกับข้อมูลที่ต่างกัน และแถวตรงกับลูกค้าแต่ละราย
คอลัมน์ (Column)
แต่ละคอลัมน์ในตารางข้อมูลมีชื่อเป็นเอกลักษณ์ และเก็บข้อมูลต่างกัน แต่ละคอลัมน์มีประเภทข้อมูลเดียวกัน ตัวอย่างเช่น ตารางข้อมูล Customer ในภาพ 7.1 จะสามารถเห็น Customer เป็น integer และ อีก 3 คอลัมน์ เป็น string บางครั้งเรียกคอลัมน์ว่า ฟิลด์ หรือ attribute
แถว (Row)
แต่ละแถวในตารางแสดงลูกค้าแต่ละราย เนื่องจากมีรูปแบบตาราง จึงทำให้มีคุณลักษณะเหมือนกัน แถวได้รับการเรียกว่า เรคคอร์ด หรือ tuple
ค่า (Value)
แต่ละ แถวประกอบด้วยชุดของค่าอิสระตามคอลัมน์ แต่ละค่าต้องมีประเภทข้อมูลที่เจาะจงโดยคอลัมน์
คีย์ (Key)
การเจาะจงลูกค้าเป็นสิ่งที่สำคัญ ตามปกติชื่อไม่ใช่วิธีการที่ดีในการทำสิ่งนี้ ถ้ามีชื่อธรรมดาอยู่ด้วยจะเข้าใจว่าทำไมเช่น ชื่อ สมศรี ยืนยง จากตารางข้อมูล Customer ถ้าเปิดดูในสมุดโทรศัพท์ อาจจะมีชื่อนี้ซ้ำกัน
การแยก สมศรี ได้หลายวิธี โอกาสที่มีเฉพาะ สมศรี ยืนยง อาศัยอยู่ในที่อยู่ของเธอมีมาก การพูดเกี่ยวกับ สมศรี ยืนยง จาก15/14 ถนนพหลโยธิน พญาไท กรุงเทพฯ มีความยืดเยื้อและมากเกินไป รวมถึงต้องการมากกว่า 1 คอลัมน์ ในตารางข้อมูล
สิ่งที่ควรในตัวอย่างนี้ และควรทำในโปรแกรมประยุกต์ คือ กำหนด Customer ID เป็นเอกลักษณ์ที่เป็นหลักการเดียวกับการใช้หมายเลขบัญชีธนาคารที่เป็นเอกลักษณ์ ทำให้การเก็บรายละเอียดในฐานข้อมูล ง่ายขึ้น การกำหนดหมายเลข เจาะจง สามารถประกันว่าไม่มีการซ้ำหลายคอลัมน์
ตามปกติ ฐานข้อมูลประกอบด้วย หลายตารางข้อมูล และ ใช้ คีย์ เป็นการอ้างอิงจาก ตารางข้อมูลหนึ่งไปยังอีกตาราง ใน ภาพ 7.2 เพิ่มตารางที่ 2 ให้ฐานข้อมูล ตารางข้อมูลนี้เก็บใบสั่งซื้อของลูกค้า แต่ละแถวในตารางข้อมูล Orders แทน 1 ใบสั่งซื้อ วางโดยลูกค้า 1 ราย สามารถรู้ว่า ลูกค้า คือ ใคร เพราะเก็บ CustomerID ของลูกค้า ใบสั่งซื้อ OrderID2 สามารถเห็นลูกค้า คือ CustomerID 1 เป็นผู้วางถ้าดูที่ตารางข้อมูล Customer สามารถพบว่า CustomerID 1 คือ สมศรี ยืนยง
ภาพ 7.2 แต่ละใบสั่งซื้ออ้างถึงลูกค้าในตารางข้อมูล Customers
คำว่า ฐานข้อมูลเชิงสัมพันธ์ สำหรับความสัมพันธ์นี้ คือ foreign key โดย CustomerID เป็น primary key ใน Customers แต่เมื่อปรากฎในอีกตารางข้อมูล เช่น Orders นี้จะอ้างอิงในฐานะ foreign key
Schema
ชุดสมบูรณ์ของการออกแบบสำหรับฐานข้อมูล เรียกว่า schema ของฐานข้อมูล สิ่งนี้เกี่ยวข้องกับพิมพ์เขียวสำหรับฐานข้อมูล schema จะแสดง ตารางข้อมูลพร้อมกับคอลัมน์ ประเภทข้อมูลของคอลัมน์ ระบุถึง primary key ของแต่ละ table และ foreign key โดย schema ไม่รวมข้อมูลแต่อาจจะต้องแสดงข้อมูลตัวอย่างกับ schema เพื่อการอธิบาย schema สามารถแสดงใน ไดอะแกรม ที่กำลังใช้ ในไดอะแกรม entity relationship (ER diagram) หรือในรูปแบบข้อความ เช่น
Customer ( CustomerID , Name, Address, City)
Orders ( OrderID ,CustomerID, Amount, Date)
ข้อความที่ขีดเส้นใต้ใน schema คือ primary key ในตารางข้อมูล ข้อความที่ขีดเส้นประ คือ foreign key ในตารางข้อมูล
ความสัมพันธ์
foreign key แสดงความสัมพันธ์ระหว่างตารางข้อมูล 2 ตาราง ตัวอย่างเช่น การเชื่อมโยงจาก Orders มาที่ Customers แสดงความสัมพันธ์ระหว่าง แถวในตารางข้อมูล Order และแถวในตารางข้อมูล Customer
ชนิดพื้นฐานของความสัมพันธ์ในฐานข้อมูลเชิงสัมพันธ์มี 3 ชนิด โดยจัดแยกตามจำนวนข้อมูลในแต่ละด้านความสัมพันธ์ ความสัมพันธ์ คือ หนึ่ง - ต่อ - หนึ่ง (one-to-one) หนึ่ง - ต่อ - หลาย (one-to-many) หลาย - ต่อ - หลาย (many-to-many)
ความสัมพันธ์แบบ หนึ่ง - ต่อ - หนึ่ง (one-to-one) หมายถึง มี 1 ข้อมูลในความสัมพันธ์ ตัวอย่างเช่น ถ้าเราแยกที่อยู่ออกจากตารางข้อมูล Customers จะต้องมีความสัมพันธ์ หนึ่ง - ต่อ - หนึ่ง ระหว่างชุดข้อมูลต้องมี (foreign key จาก Addresses ไปยัง Customers)
ความสัมพันธ์แบบ หนึ่ง - ต่อ - หลาย (one-to-many) หมายถึง 1 แถว ในตารางข้อมูลหนึ่ง เชื่อมกับหลายแถวในอีกตาราง ตัวอย่างเช่น ลูกค้า 1 คน สามารถมีหลายใบสั่งซื้อ ในความสัมพันธ์นี้ตารางที่เก็บหมายเลขแถวจะต้องมี forieng ไปตารางที่มี 1 แถวข้อมูล ดังนั้น จึงมี CustomerID ในตารางข้อมูล Orders เพื่อแสดงความสัมพันธ์
ความสัมพันธ์แบบ หลาย - ต่อ - หลาย (many-to-many) หมายถึง หลายแถวในตารางข้อมูลหนึ่งเชื่อมกับหลายแถวในอีกตาราง ตัวอย่างเช่น ถ้ามีตารางข้อมูล 2 ตาราง Books และ Authors อาจจะพบว่าหนังสือ 1 เล่ม เขียนโดยนักเขียน 2 คน แต่ละคนเขียนหนังสือเล่มอื่นด้วย ตามปกติความสัมพันธ์ประเภทนี้ ควรอีกตารางข้อมูลเก็บข้อมูลทั้งหมด อาจจะต้องมี Books, Authors และ Books_Authors โดยตารางที่ 3 เก็บเฉพาะคีย์ของตารางอื่นในฐานะ foriegn key เป็นคู่ เพื่อแสดงว่าผู้เขียนเกี่ยวข้องกับหนังสือเล่มใด
|