MySQL

Home

MySQL Tutorial
Knowledge Developer Database Internet Resource
การออกแบบฐานข้อมูลเว็บ
1.แนวคิดฐานข้อมูลเชิงสัมพันธ์
2. การออกแบบฐานข้อมูล
3. สถาปัตยกรรมฐานข้อมูลเว็บ
 
MySQL
1. การออกแบบฐานข้อมูลเว็บ
2. การสร้างฐานข้อมูลเว็บ
 

การออกแบบฐานข้อมูล

ความต้องการตารางข้อมูลใหม่และคีย์เป็นเรื่องของศิลปะ ดังนั้น ควรอ่านเพิ่มเติมเกี่ยวกับไดอะแกรม entity relationship และ normalization โดยส่วนใหญ่สามารถทำตามหลักการออกแบบพื้นฐาน ให้พิจารณาสิ่งเหล่านี้ในบริษัทของ Widebase Book

ความคิดเกี่ยวกับโลกความจริงในแบบจำลอง

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

โดยทั่วไป แต่ละชั้นของอ๊อบเจคโลกจริงในแบบจำลองจะต้องตารางข้อมูลของตัวเอง เช่น เมื่อต้องการเก็บสารสนเทศเดียวกันเกี่ยวกับลูกค้าทั้งหมด ถ้ามีชุดของข้อมูลที่มี “ รูปร่าง ” เหมือนกัน สามารถทำให้สร้างตารางข้อมูลตรงตามกับข้อมูล

ในตัวอย่าง Widebase Book มีความต้องการเก็บสารสนเทศเกี่ยวกับลูกค้า หนังสือที่ขายและรายละเอียดใบสั่งซื้อ ลูกค้าทั้งหมดมีชื่อและ ที่อยู่ ใบสั่งซื้อมีวันที่ จำนวนรวม และชุดของหนังสือที่มีการสั่งซื้อ หนังสือมีเลข ISBN ชื่อผู้เขียน ชื่อหนังสือ และ ราคา

สารสนเทศนี้ต้องการอย่างน้อย 3 ตารางในฐานข้อมูลนี้ คือ Customer Orders และ Book สำหรับ schema ได้รับการแสดงในภาพ 7.3

หลีกเลี่ยงการเก็บข้อมูลซ้ำซ้อน

จากคำถามก่อนหน้านี้ “ ทำไมไม่เก็บที่อยู่ของ สมศรี ยืนยง ในตารางข้อมูล Orders” ถ้า สมศรี สั่งซื้อ Widebase Book จากการซื้อครั้งหนึ่งเมื่อการสั่งซื้อเสร็จแล้วจะมีการเก็บสารสนเทศหลายครั้ง เมื่อจัดเก็บข้อมูลของตารางข้อมูล Order แล้วจะดูเหมือนกับภาพ 7.4

ในกรณีนี้ มี 2 ปัญหาพื้นฐาน

ปัญหาแรก สูญเสียพื้นที่ ทำไมต้องเก็บรายละเอียดของ สมศรี 3 ครั้ง ถ้าจำเป็นต้องเก็บเพียงครั้งเดียว

ภาพ 7.2 แต่ละใบสั่งซื้ออ้างถึงลูกค้าในตารางข้อมูล Customers

OrderID

Amount

Date

CustomerID

Name

Address

City

20

2,150.00

21- Jan-2005

1

สมศรี ยืนยง

15/14 ถนนพหลโยธิน พญาไท

กรุงเทพฯ

21

785.00

25-Jan-2005

1

สมศรี ยืนยง

15/14 ถนนพหลโยธิน พญาไท

กรุงเทพฯ

22

1,150.00

26- Jan-2005

1

สมศรี ยืนยง

15/14 ถนนพหลโยธิน พญาไท

กรุงเทพฯ

ภาพ 7.3 การออกแบบฐานข้อมูลที่เก็บข้อมูลซ้ำซ้อน

ปัญหาที่ 2 สามารถนำสู่การปรับปรุงผิดหลัก (update anomalies) สถานการณ์นี้จะเปลี่ยนฐานข้อมูลและปรับปรุงด้วยข้อมูลไม่แน่นอน ความมั่นคงของข้อมูลถูกละเมิดและไม่สามารถทราบได้ว่าข้อมูลใดถูกต้อง และชุดใดผิดโดยทั่วไปนำสู่การสูญเสียสารสนเทศ

การปรับปรุงผิดหลัก 3 ชนิด คือ การปรับปรุง การเพิ่ม และลบ

ถ้า สมศรี ย้ายบ้านขณะที่มีใบสั่งค้างอยู่ จะต้องมีการปรับปรุงที่อยู่ 3 แห่งแทนที่ 1 แห่ง โดยต้องทำงาน 3 ครั้ง ข้อเท็จจริงนี้เห็นได้ง่าย และเปลี่ยนข้อมูลเพียง 1 แห่ง จะนำไปสู่ข้อมูลไม่แน่ปัญหานี้ เรียกว่า การปรับปรุงผิดหลัก (modification anomalies) เพราะเกิดขึ้นเมื่อพยายามปรับปรุงฐานข้อมูล

ด้วยการออกแบบนี้ต้องมีการเพิ่มรายละเอียดของ สมศรี ทุกครั้งที่มีการสั่งซื้อ ดังนั้น แต่ละครั้งต้องมีการตรวจสอบและทำให้มั่นใจว่ารายละเอียดที่ตรงกันทุกแถวในฐานข้อมูล ถ้าไม่มีการตรวจสอบ อาจจะมีเพิ่มข้อมูล 2 แถว ด้วยสารสนเทศเกี่ยวกับ Julie ขัดแย้งกัน ตัวอย่างเช่น แถวหนึ่งบอกว่า สมศรี อยู่ใน Airport West และอีกแถวบอกว่าอยู่ใน Airport นี่เรียกว่า การเพิ่มผิดหลัก (insertion anomalies) เพราะเกิดขั้นเมื่อกำลังเพิ่มข้อมูล

การลบผิดหลัก (deletion anomalies) เพราะเกิดขึ้นเมื่อลบแถวจากฐานข้อมูล ตัวอย่างเช่น เมื่อมีการส่งหนังสือตามใบสั่งซื้อแล้วจะมีการลบจากฐานข้อมูล เมื่อใบสั่งซื้อของ สมศรี ได้รับการส่งไปแล้วจะมีการลบทั้งหมดจากตารางข้อมูล Orders หมายความว่า จะไม่มีที่อยู่ของ สมศรี อีกต่อไป ทำให้ไม่สามารถส่งข้อเสนอพิเศษให้ สมศรี และเมื่อมีการสั่งซื้อครั้งต่อไป จะต้องมีการเก็บรายละเอียดทั้งหมดอีก

การใช้ค่าคอลัมน์แบบอะตอม

สิ่งนี้หมายความว่า แต่ละคุณลักษณะหรือฟิลด์ในแต่ละแถว ใช้เก็บเพียงสิ่งเดียว เช่น ต้องการทราบถึงหนังสือในใบสั่งซื้อ โดยวิธีการทำมีหลายวิธี

ตารางข้อมูล Orders สามารถได้รับการเพิ่มคอลัมน์ เพื่อแสดงรายการหนังสือจากการสั่งซื้อ ตามภาพ 7.5

OrderID

CustomerID

Amount

Date

Book Orders

1

3

3,225.00

21- Jan-2005

0-623-54125-7, 0-630-78510-6

2

2

215.00

25-Jan-2005

0-652-32157-5

3

1

84.00

26- Jan-2005

0-630-78510-6

4

4

2,127.00

30-Jan-2005

0-652-32157-5, 0-652-21504-3

นี่ไม่ใช่ความผิดที่ดีด้วยเหตุผลบางประการ เนื่องจากกำลังทำ nesting กับตารางทั้งตารางภายใน 1 คอลัมน์ ตารางข้อมูลที่สัมพันธ์กับใบสั่งซื้อกับหนังสือ เมื่อทำงานด้วยวิธีนี้ จะมีความลำบากมากขึ้นเพื่อตอบคำถาม “ จำนวนการสั่งซื้อ คู่มือการใช้ Microsoft Access 2000” ระบบไม่สามารถนับฟิลด์ได้ ดังนั้นควรกระจายค่าแต่ละคุณลักษณะเพื่อดูว่าถ้าเก็บค่าจับคู่ได้ภายใน

เนื่องจากว่ากำลังทำการสร้างตารางข้อมูลภายในตารางข้อมูล ดังนั้น ควรสร้างตารางข้อมูลใหม่ตารางนี้เรียกว่า Order_Item และ แสดงในภาพ 7.6

ตารางข้อมูลนี้เชื่อมระหว่างตารางข้อมูล Orders และ Book ตารางประเภทนี้ เป็นประเภทปกติเมื่อมีความสัมพันธ์แบบ many-to-many ระหว่าง 2 อ๊อบเจค ในกรณีนี้ 1 ใบสั่งซื้อ ประกอบด้วยหนังสือหลายเล่ม และ หนังสือแต่ละเล่ม สามารถสั่งโดยคนหลายคน

เลือกคีย์ให้เหมาะสม

ทำให้มั่นใจว่าคีย์เป็นแบบไม่ซ้ำ ในกรณีนี้ต้องสร้างคีย์เฉพาะสำหรับลูกค้า (customerid) และสำหรับใบสั่งซื้อ (orderid) เพราะอ๊อบเจคในโลกความจริงไม่มี identifier ที่สามารถประกันว่าเป็นค่าไม่ซ้ำ แต่ไม่จำเป็นสร้าง identifier สำหรับหนังสือ เนื่องจากมีอยู่แล้วในรูปของ ISBN จะเป็นค่าไม่ซ้ำ เมื่อมีหนังสือ 1 รายการในใบสั่งซื้อ ได้รับการปฏิบัติเป็น 1 แถว ด้วยเหตุผลนี้ตาราง Order_item มีคอลัมน์ quantity

Order_Item

OrderID

ISBN

Quantity

1

0-623-54125-7

1

2

0-630-78510-6

2

3

0-652-32157-5

2

4

0-652-21504-3

1

5

0-672-58412-6

2

6

0-672-36527-4

1

ภาพ 7.6 การออกแบบให้ค้นหาจำนวนการสั่งหนังสือ

คิดถึงคำถามที่ต้องการถามฐานข้อมูล

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

หลีกเลี่ยงการออกแบบที่มีฟิลด์ว่างจำนวนมาก

ถ้าต้องการเพิ่มคำวิจารณ์หนังสือกับฐานข้อมูล มีอย่างน้อย 2 วิธี ที่สามารถทำได้

วิธีแรก เพิ่มคอลัมน์ Review ลงในตาราง Books วิธีนี้ ฟิลด์ Review ได้รับการเพิ่มให้กับหนังสือแต่ละเล่ม ถ้ามีหนังสือจำนวนมากในฐานข้อมูล และผู้วิจารณ์ไม่มีแผนวิจารณ์ทั้งหมด หลายแถวจะไม่มีค่าในฟิลด์นี้ที่เรียกว่า มีค่าว่าง (null value)

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

โดยทั่วไปปัญหาค่าว่างจำนวนมากหลีกเลี่ยงได้โดยการออกแบบอีกวิธี ในกรณีนี้ สามารถใช้การออกแบบที่ 2 ในภาพ 7.7 เฉพาะหนังสือที่มีการวิจารณ์จะได้รับการเพิ่มรายการในตารางข้อมูล book_reviews

Book

ISBN

Author

Title

Price

Reviews

0-623-54125-7

ไชยวัฒน์ ตระการรัตน์สันติ

คู่มือการใช้ Microsoft Access 2000

300.00

 

0-320-55200-5

Luke Welling

PHP and MySQL Web Development

1200.00

 

0-845-69207-1

Francesco Baleno

VB.Net

3200.00

 

Book_Reviews

ISBN

Reviews

0-623-54125-7

 

0-320-55200-5

 

0-845-69207-1

 

ภาพ 7.7 เพิ่มคอลัมน์ วิจารณ์หนังสือ สามารถเพิ่มคอลัมน์ Reviews ที่ตารางข้อมูล Book หรือ เพิ่มตารางข้อมูลสำหรับการวิจารณ์หนังสือ

หมายเหตุ การออกแบบนี้มีพื้นฐาน จากความคิดว่ามีนักวิจารณ์ภายในคนเดียว ถ้าต้องการให้มีบุคคลอื่นวิจารณ์ ก็สามารถเพิ่ม customerid ลงในตารางข้อมูล book_reviews

สรุปประเภทตารางข้อมูล

ตามปกติ เมื่อเสร็จสิ้น การออกแบบฐานข้อมูลแล้ว จะพบตารางข้อมูล 2 ชนิด

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

ตารางเชื่อมโยงใช้อธิบาย ความสัมพันธ์แบบ หลายต่อหลาย ของอ๊อบเจคจริง 2 ชุด เช่น ความสัมพันธ์ระหว่าง orders กับ books ตารางเหล่านี้ มักจะสัมพันธ์กับทรานแซคชันบางชนิดในโลกจริง

 

  

สงวนลิขสิทธิ (C) widebase