แผนภูมิ ER: ตอน 1

 

 
Home Page  |   รายการบทความ   |   ลิงค์ที่เกี่ยวข้อง   |   laploy.com  |  เกี่ยวกับผู้เขียน

 

แผนภูมิ ER: ตอน 1

 

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

หัวข้อต่างๆ ที่ท่านจะได้เรียนในบทนี้คือ
•    นิยามแผนภูมิอีอาร์
     o    ตีนกา
     o    ความสัมพันธ์แบบหนึ่งต่อหนึ่ง
     o    ความสัมพันธ์แบบหนึ่งต่อหลาย
     o    ความสัมพันธ์แบบหลายต่อหลาย
     o    ความสัมพันธ์แบบศูนย์ หนึ่ง และหลายๆ
     o    ตารางแม่ ตารางลูก
     o    ความสัมพันธ์ที่จำแนกได้และไม่ได้
     o    นิยามกุญแจ
     o    นิยามกุญแจหลัก
     o    นิยามกุญแจเอกลักษณ์
     o    นิยามกุญแจนอก
•    สาธิตการออกแบบฐานข้อมูลอย่างง่าย
     o    ตัวอย่างการออกแบบ
     o    นิยามบูรณภาพสัมพันธ์

 

5.1. นิยามแผนภูมิอีอาร์
หากเครื่องมือที่ดีที่สุดของนักเขียนโปรแกรมคือโฟลชาร์ท เครื่องมือที่ดีที่สุดของนักออกแบบฐานข้อมูลก็คือแผนภูมิอีอาร์ (Entity / Relation Diagram ย่อ ERD) เพราะ ERD ช่วยให้เราแสดงภาพความสัมพันธ์ภายในเอนทิตี และระหว่างเอนทิตี ได้เป็นอย่างดี คำว่าเอนทิตี (entity) ในการออกแบบฐานข้อมูลก็คือตารางในฐานข้อมูลนั่นเอง ท่านได้เรียนเรื่อง ERD ไปแล้วเล็กน้อยในบทก่อนหน้านี้ ในบทนี้ท่านจะได้เรียนวิธีอ่านและเขียน ERD เพิ่มเติม

 

ภาพ 5-1 : แผนภูมิอีอาร์หรือ ERD เป็นแผนภูมิง่ายๆ ไม่มีอะไรซับซ้อน เป็นเครื่องมือสำหรับนักออกแบบฐานข้อมูลเพื่อใช้แสดงภาพความสัมพันธ์ในเอนทิตี และระหว่างเอนทิตี

 

5.1.1. ตีนกา
คำว่าตีนกาในหัวข้อนี้ไม่ใช่รอยเหี่ยวย่นข้างดวงตา แต่เป็นสัญลักษณ์ใน ERD ที่ใช้เพื่อแสดงความสัมพันธ์แบบหนึ่งต่อหลาย (one-to-many) หรือหลายต่อหลาย (many-to-many) โดยในด้านที่เป็น "หลาย" จะใช้สัญลักษณ์รูป "ตีนกา" ซึ่งเป็นรูปเส้นสามแฉก เหมือนอย่างรอยที่เกิดหากท่านจับตีนกามาจุ่มหมึก (ถ้ามันยอม) แล้วซับลงบนกระดาษ  (ผู้เขียนไม่แน่ใจเหมือนกันว่าตีนของอีกาอันที่จริงแล้วมีนิ้วอยู่กี่นิ้ว แต่สัญลักษณ์ใน ERD จะเป็นเส้นสามเส้น)

ภาพ 5-2 : ตีนกาคือสัญลักษณ์ที่ใช้เพื่อแสดงความสัมพันธ์ใน ERD ในด้านที่เป็น "หลาย" ยกตัวอย่างเช่นในภาพนี้ แสดงความสัมพันธ์แบบ "หนึ่งต่อหลาย" ด้านที่เป็น "หนึ่ง" คือตาราง Author ด้านที่เป็น "หลาย" คือตาราง Publication นั่นคือนักเขียน (Author) หนึ่งคนอาจมีหนังสือ (Publication) ได้หลายเล่ม

 

5.1.2. ความสัมพันธ์แบบหนึ่งต่อหนึ่ง
ความสัมพันธ์แบบหนึ่งต่อหนึ่งเป็นแบบที่ไม่ค่อยพบบ่อยนัก นอกจากจะจงใจออกแบบให้เป็นเช่นนั้น ท่านจะพบความสัมพันธ์แบบหนึ่งต่อหนึ่งได้ในการแปลงนอร์มัลฟอร์มระดับที่สี่เพื่อขจัดค่า NULL ออกจากตารางแม่ (เพื่อประหยัดเนื้อที่ในฮาร์ดดิสก์ ดูรายละเอียดในบทต่อไป)  เนื่องจากปัจจุบันฮาร์ดดิสก์มีความจุสูงมากและมีราคาถูก และใน SQL2008 มีชนิดข้อมูลที่เปลี่ยนความกว้างได้ ความสัมพันธ์แบบหนึ่งต่อหนึ่งจึงไม่เป็นที่นิยมเพราะมีประสิทธิภาพต่ำ

สัญลักษณ์แทนความสัมพันธ์แบบหนึ่งต่อหนึ่งเป็นขีดเพียงขีดเดียว

ภาพ 5-3 : ความสัมพันธ์แบบหนึ่งต่อหนึ่งแสดงเป็นนัยว่ามีหน่วยข้อมูลหนึ่งหน่วยอยู่ในทั้งสองตาราง สัญลักษณ์จึงใช้ขีดๆ เดียว

 

5.1.3. ความสัมพันธ์แบบหนึ่งต่อหลาย
ความสัมพันธ์แบบหนึ่งต่อหลายเป็นรูปแบบที่พบได้บ่อยที่สุดในฐานข้อมูลสัมพันธ์ นั่นคือข้อมูลหนึ่งแถวในตาราง ก เชื่อมโยงกับข้อมูลหลายแถวในตาราง ข ยกตัวอย่างเหมือนที่เรียนไปแล้วในหัวข้อตีนกา ตาราง Author เก็บข้อมูลนักเขียนหนึ่งแถวคือนักเขียนหนึ่งคน นักเขียนคนเดียวอาจเขียนหนังสือไว้หลายเล่ม ดังนั้นในตาราง Publication ซึ่งเก็บข้อมูลหนังสือหนึ่งเล่มต่อหนึ่งแถวจึงอาจเชื่อมโยงกับตาราง Authorในแบบหนึ่งต่อหลาย

ภาพ 5-4 : ความสัมพันธ์แบบหนึ่งต่อหลายแสดงเป็นนัยว่ามีหน่วยข้อมูลหนึ่งหน่วยในตาราง ก และหลายหน่วยในตาราง ข ตรงตาราง ก จึงใช้รูปขีดๆ เดียว ส่วนตาราง ข ซึ่งมีข้อมูลหลายหน่วยจะใช้สัญลักษณ์รูปตีนกา

 

5.1.4. ความสัมพันธ์แบบหลายต่อหลาย
ความสัมพันธ์แบบหลายต่อหลายหมายถึงทุกๆ แถวในตาราง ก อาจเชื่อมโยงกับหลายๆ แถวในตาราง ข ตัวอย่างคลาสสิกของความสัมพันธ์แบบนี้คือ ตารางเก็บรายชื่อนักเรียนกับตารางเก็บรายชื่อวิชา ปรกตินักเรียนทุกคนจะลงทะเบียนเรียนมากกว่าหนึ่งวิชา (คือไม่มีนักเรียนคนใดลงทะเบียนเรียนเพียงวิชาเดียว) และในทางกลับกัน ทุกๆ วิชาจะมีนักเรียนเข้าเรียนมากกว่าหนึ่งคน (ไม่มีวิชาใดที่มีนักเรียนลงทะเบียนเรียนเพียงคนเดียว) ผลลัพธ์คือความสัมพันธ์แบบหลายต่อหลายระหว่างนักเรียนกับวิชาต่างๆ

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

ภาพ 5-5 : ความสัมพันธ์แบบหลายต่อหลายสามารถนำมาสร้างเป็นตารามใหม่ได้อีกหนึ่งตาราง ในภาพนี้ตาราง Publisher เก็บข้อมูลสำนักพิมพ์ ตาราง Publication เก็บข้อมูลหนังสือ สองตารางนี้มีความสัมพันธ์แบบหลายต่อหลาย จึงสามารถนำมาสร้างเป็นตารามใหม่ได้อีกหนึ่งตารางคือ Edition

 

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

ยกตัวอย่างเช่นความสัมพันธ์ระหว่างตาราง Rank และตาราง Edition โดยตาราง Rank เก็บข้อมูลการจัดอันดับของหนังสือ (ว่าได้รับความนิยมเพียงใด) และตาราง Edition เก็บข้อมูลการจัดพิมพ์ในแต่ละครั้ง เนื่องจากในตาราง  Edition จะมีข้อมูลหนังสือเรื่องหนึ่งอยู่หนึ่งแถวมันจึงมีความสัมพันธ์แบบ "หนึ่ง" ส่วนตาราง Rank อาจไม่มีข้อมูลหนังสือเล่มนั้นอยู่เลย หรืออาจข้อมูลหนังสือเล่มนั้นอยู่หนึ่งแถว มันจึงมีความสัมพันธ์แบบ "ศูนย์และหนึ่ง"

ภาพ 5-6 : สัญลักษณ์ที่ใช้เพื่อแสดงความสัมพันธ์แบบศูนย์และหนึ่งคือรูปวงกลม (แทนศูนย์) และขีดหนึ่งขีด (แทนหนึ่ง) อย่างที่เห็นทางกรอบซ้าย ซึ่งแสดงความสัมพันธ์ระหว่างตาราง Rank และ Edition โดยในฝั่ง Rank เป็นแบบศูนย์และหนึ่ง ขณะที่ในฝั่ง Edition เป็นแบบหนึ่ง ดังนั้นความสัมพันธ์ระหว่างตาราง Rank และ Edition จึงเป็นแบบหนึ่งต่อศูนย์และหนึ่ง  ส่วนสัญลักษณ์ที่ใช้เพื่อแสดงความสัมพันธ์แบบศูนย์และหนึ่งหรือหลายๆ คือรูปตีนกาบวกขีดและวงกลมอย่างที่เห็นด้านบนของตารง Edition ทางกรอบขวาในภาพ

 

5.1.6. ตารางแม่ ตารางลูก
ในแบบจำลองฐานข้อมูลสัมพันธ์ท่านจะได้พบความสัมพันธ์แบบตารางแม่ (Parent Table ย่อ PT) และตารางลูก (Child Table ย่อ CT)อยู่เสมอ  นิยามของ PT คือตารางซึ่งมีข้อมูลที่ถูกอ้างถึงใน CT ส่วนนิยามของ CT คือตารางที่อ้างถึงข้อมูลใน PT ยกตัวอย่างเช่น ในภาพ 5-6 ตาราง Publication เป็น PT ของตาราง Edition และพูดได้อีกอย่างหนึ่งว่าตาราง Edition เป็น CT ของตาราง Publication

วิธีดูว่าตารางใดเป็น PT ตารางใดเป็น CT ให้ดูที่ FK หากตาราง ก มี FK ที่เชื่อมโยงไปยังตาราง ข จะถือว่าตาราง ก เป็น CT ของตาราง ข หรือพูดได้อีกอย่างหนึ่งว่าตาราง ข เป็น PT ของตาราง ก ยกตัวอย่างเช่น ในภาพ 5-6 ตาราง Edition มี FK คือคอลัมน์ publication_id ที่เชื่อมโยงไปยังคอลัมน์ชื่อเดียวกันในตาราง Publication

 

5.1.7. ความสัมพันธ์ที่จำแนกได้และไม่ได้
ฐานข้อมูลสัมพันธ์มักมีตารางจำนวนมากเชื่อมโยงกันด้วยความสัมพันธ์แบบกุญแจหลักหรือไพร์มารีคีย์ (PK) และกุญแจนอกหรือฟอร์เรนคีย์ (FK) ความสัมพันธ์เกิดระหว่าง PT และ CT ความสัมพันธ์ที่ว่านี้มีหลายแบบได้แก่


•    ความสัมพันธ์แบบจำแนกได้: คือความสัมพันธ์ที่ CT ถูกแยกแยะโดย PT ในบางส่วน และถูกกำหนดความผู้พันธ์ในอีกบางส่วน ยกตัวอย่างเช่นในภาพ 5-7 ตาราง CoAuthor ซึ่งเก็บชื่อผู้เขียนร่วม มี PT สองตารางคือ Author และตาราง Publication โดยในตาราง CoAuthor จะมี PK เดียวกับ PT ทั้งสอง

•    ความสัมพันธ์แบบจำแนกไม่ได้: คือความสัมพันธ์ที่ CT ไม่ขึ้นกับ PT นั่นคือ PK ของ CT ไม่ใช่กุญแจเดียวกันกับ PK ของ PT

•    ตารางผูกพัน: คือตารางที่มี FK เป็น PK ที่มาจาก PT เช่นตาราง CoAuthor ในภาพ 5-7

•    ตารางไม่ผูกพัน: หรือเอนทิตีอิสระคือตารางที่ไม่มี FK ที่เป็น PK ใน PT เช่นตาราง Publication ในภาพ 5-7

ภาพ 5-7 : แผนภูมิ ER นี้แสดงความสัมพันธ์ที่จำแนกได้และไม่ได้

 

About these ads

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

ติดตาม

Get every new post delivered to your Inbox.

%d bloggers like this: