Basic Database System Part 7 - ออกแบบ Database ด้วย ER Model ตอนที่ 2

Basic Database System Part 7 - ออกแบบ Database ด้วย ER Model ตอนที่ 2

ตอนที่แล้วเราได้รู้วิธีการเขียน ER Model กันมาแล้ว ตอนนี้เราจะมาเปลี่ยน ER Model ให้กลายเป็น Relational Database Model เพื่อเอาไปเป็นตัว Table ตั้งต้นก่อนจะนำไปทำ Normalization Process

เปลี่ยน ER Model ไปเป็น Relational Database Model

เราจะเอา ER Model จากตัวอย่างโจทย์การประชุมวิชาการทางศาสนามาเป็นตัวอย่างการแปลง ER Model ไปเป็น Relational Database Model

1. แปลงเป็น Entity ให้กลายเป็น Relation Table ตาม Attribute ที่มี โดยให้ Key Attribute มาเป็น Primary key

จากตัวอย่างเราจะแปลง Entity : SPEAKER , RELIGION , TEXT ไปเป็น Relation Table ซึ่งจะแปลงเป็น Table ได้ดังภาพ

2. แปลง Relationship แบบ M to M หรือ Relationship ที่เกิดจาก Entity ที่มากกว่า 2 ไปเป็น Relation Table โดยเอา Primary key ของแต่ละ Entity ไปเป็น Primary key ของ Table ใหม่ (และเป็น FK ด้วย) และเอา Attribute ของ Relationship ไปเป็น Attribute ในตาราง

จากตัวอย่างเราจะเห็น Relationship ที่เป็น M to M อยู่คือ SPEAK กับ READ ซึ่งจะแปลงเป็น Table ได้ดังภาพ

3. ดูที่ Relationship แบบ 1 To M จากนั้นนำ Primary key ของฝั่ง M ไปเป็น Foreign key ของ Table ฝั่ง 1

จากตัวอย่างเราจะเห็น Relationship : HAS ที่เกิดจาก Entity : RELIGION กับ Entity : TEXT เป็น 1 to M ซึ่งจะทำให้เราแก้ไข Table : TEXT เป็น

4. ดูที่ Relationship แบบ 1 to 1 จากนั้นตัดสินใจเลือกฝั่งใดฝั่งหนึ่งเป็น Table หลักจากนั้นให้ Table รองเอา Primary key ของ Table หลักมาเป็น Foreign key

เนื่องจากความสัมพันธ์นี้ไม่มีตัวอย่างการประชุมวิชาการเลยขอเอาความสัมพันธ์ พนักงาน กับ แผนก มาเป็นตัวอย่าง

ซึ่งเราจะเห็นว่ามี Entity พนักงาน กับ แผนก โดยเราตัดสินใจว่าจะเอา Entity พนักงานเป็น Table หลัก ซึ่งเราจะได้ Table ออกมาดังภาพ

ผลลัพธ์การเปลี่ยน ER Model เป็น Relational Table

ผลลัพธ์จากการเปลี่ยน ER Model การประชุมวิชาการทางศาสนา ไปเป็น Relational Model จะเป็นดังภาพ

Associative Entity

อันนี้เป็น Type พิเศษของ Relationship ซึ่งเกิดจาก Relationship แบบ M to M ที่อยากจะมีแบบหลายครั้ง พูดแบบนี้คุณอาจคิดไม่ออก ลองนึกภาพการยืมหนังสือในห้องสมุด โดยมี Entity คือ สมาชิก กับ หนังสือ เราจะเขียน ER Model ได้ดังภาพ

จากนั้นเราเปลี่ยน ER Model เป็น Relational Table ได้ดังภาพ

ดูแล้วเหมือนไม่มีปัญหาอะไร แต่ปัญหามันจะเกิดขึ้นถ้าเราอยากเก็บประวัติการยืมหนังสือ ตัวอย่างช่น ถ้าหากสมาชิก M001 ต้องการยืมหนังสือชื่อ “Database Design” ข้อมูลที่จะ Save ลง Table : ยืม จะเป็นดังภาพ

คราวนี้ถ้าเราอยากเก็บว่า M001 ยืมหนังสือชื่อ “Database Design” ไปแล้วกี่ครั้งมันจะทำไม่ได้เพราะ Primary key จะซ้ำ ตรงนี้บางท่านบอกว่างั้นก็เพิ่ม Attribute วันที่ยืมเข้าไปสิ ซึ่งก็ทำได้ครับ พอทำแล้วสัญลักษณ์จะเปลี่ยนไปเป็นแบบภาพด้านล่าง เพื่อให้เข้าใจว่า Relationship แบบนี้เกิดซ้ำได้

ซึ่ง Table ที่ได้จะเป็น

แต่สมมติว่า Associative Entity นี้จะต้องไปมี Relationship กับ Entity อื่น ซึ่งอาจจะทำให้เกิดการเอา Primary key ของ Associative Entity ไปเป็น Foreign key ซึ่งจากตัวอย่างนี้ต้องใช้ถึง 3 Attribute ซึ่งบางกลุ่มเห็นว่ามันยุ่งยากจึงมีการสร้าง Surrogate key (key แทน ) มาใช้แทน Primary key 3 attribute ซึ่งสามารถทำได้ดังภาพ

ซึ่งสามารถเปลี่ยนเป็น Table ได้ดังภาพ

โดย Primary key จะกลายเป็น ID_การยืม ส่วน Primary key เก่า 3 Attribute จะกลายเป็น Unique Key แทน

สรุป

ตอนนี้เราได้เห็นวิธีการเปลี่ยน ER Model ให้กลายเป็น Relational Database Model เพื่อนำไปตั้งต้นในการทำ Normalization Process ต่อ ซึ่งจะเห็นได้ว่าไม่ยากเลย และตอนนี้ได้แนะนำ Entity อีก Type นึงซึ่งก็คือ Associative Entity ว่ามันคืออะไร เอาไปใช้ตอนไหน

สำหรับตอนนี้น่าจะเป็นตอนสุดท้ายในชุด Basic Database System ก็หวังว่าทุกตอนน่าจะสร้างประโยชน์ให้กับผู้ที่เข้ามาอ่านไม่มากก็น้อย และสุดท้ายผมอยากจะฝากไว้ว่า “พื้นฐานเป็นเรื่องสำคัญ” ถ้าคุณเข้าใจพื้นฐานคุณจะสามารถต่อยอดความรู้อื่นๆได้ไม่ยาก แล้วพบกันใหม่ในหัวข้ออื่นๆสวัสดีครับ