771 likes | 2.68k Views
Chapter 8 : ขั้นตอน การแปลงแผนภาพ ER มา เป็น รีเลชั่น ER-to-Relational Mapping Algorithm. 4121203A ระบบฐานข้อมูล. สรุปขั้นตอนการสร้าง E-R Diagram. 1. กำหนดว่ามีเอนทีตีอะไรบ้าง 2. กำหนดความสัมพันธ์ระหว่างเอนทีตี 3. กำหนดแอทริบิวต์ของเอนทีตีให้ครบ
E N D
Chapter 8 : ขั้นตอนการแปลงแผนภาพ ER มาเป็นรีเลชั่นER-to-Relational Mapping Algorithm 4121203A ระบบฐานข้อมูล
สรุปขั้นตอนการสร้าง E-R Diagram • 1. กำหนดว่ามีเอนทีตีอะไรบ้าง • 2. กำหนดความสัมพันธ์ระหว่างเอนทีตี • 3. กำหนดแอทริบิวต์ของเอนทีตีให้ครบ • 4. พิจารณาแอทริบิวต์ที่ขึ้นกับความสัมพันธ์ • 5. เลือกคีย์หลัก
Step 1 Entity Students • ขั้นตอนการแปลง Entity • กรณี Simple Attribute - สร้างตารางสำหรับ Entity - ชื่อของตาราง นำมาจาก ชื่อของ Entity - ชื่อของคอลัมน์ นำมาจากชื่อของ Attribute ของ Entity - Primary Key ของ ตาราง นำมาจาก Primary Key ของ Entity BirthYear S_ID Last_name First_name
Step 1 Entity city street state • ขั้นตอนการแปลง Entity • กรณี Composite Attributes - นำเพียงแอตทริบิวต์แบบ simple ที่บรรจุอยู่ในแอตทริบิวต์แบบ Composite มาเท่านั้น Customer Zip Code Address cus_ID Last_name First_name
Step 1 Entity Students • ขั้นตอนการแปลง Entity • กรณี Multivalued Attribute - ต้องมีการสร้างรีเลชั่นสองรีเลชั่น - รีเลชั่นแรกจะบรรจุค่าแอตทริบิวต์ที่มีอยู่ใน Entity ทั้งหมด ยกเว้นแอตทริบิวต์ที่เป็นแบบ Multivalued - รีเลชั่นที่สองให้บรรจุ 2 แอตทริบิวต์ - แอตทริบิวต์แรกคือ คีย์หลักที่อยู่ในรีเลชั่นแรก - แอตทริบิวต์สอง คือ แอตทริบิวต์ที่เป็น Multivalued Tel S_ID Tel Last_name First_name
Multivalued Attributes Instructor - Relational Model จะยอมให้มีเพียง 1 ข้อมูลในแต่ล่ะ attribute - Multivalued attribute ใน ER Model จะถูกสร้างเป็นตารางใหม่ เพื่อเก็บข้อมูลโดยเฉพาะ Tel ID Degrees Name
Step2WeakEntity ขั้นตอนการแปลง Weak Entity • - สร้างตารางใหม่สำหรับ Weak Entity นำ Primary Key จาก Master Entity มาเป็น Primary Key ร่วมกับ Primary Key เดิมของ Weak Entity • Attribute นั้นจะมาเป็น Foreign Key สำหรับชี้ไปยัง ตารางของ Master Entity
Step2WeakEntity Last Name First Name emp_firstName emp_LastName birthDate dependentname emp_ID gender M 1 claims EMPLOYEE DEPENDENT
Step2WeakEntity Building_name Room_number … … 1 M has Room Building
Step 3 : One-to-Many Relationship แปลงความสัมพันธ์แบบ One-to-Many - นำ Primary Key ฝั่ง One ไปเพิ่มเป็นคอลัมน์ ในฝั่ง Many - คอลัมน์ นั้นจะเป็น Foreign Key อ้างถึง Primary Key ของตารางที่ต้องการอ้างถึง(ฝั่ง One) - การแปลง Many-to-One ก็กระทำอย่างเดียวกัน
Step 4 : Many -to-Many Relationship • แปลงความสัมพันธ์แบบ Many-to-Many - สร้างตารางของความสัมพันธ์ขึ้นมา 1 ตารางเพื่อเก็บ Primary Key ของทั้ง 2 ตาราง - คอลัมน์ที่ได้ใหม่ทั้ง 2 คอลัมน์จะเป็น Foreign Key ชี้ไปยังตารางที่ดึงมา - ใช้ Entity ใหม่ ที่ได้มาเป็นทั้ง 2 Entity เป็น Primary Key ของตารางความสัมพันธ์
Step 4 : Many -to-ManyRelationship … C_ID … S_ID N M takes STUDENT COURSE … C_ID … S_ID M 1 1 M takes STUDENT COURSE
Step 4: Many -to-ManyRelationship … C_ID Registration_date … S_ID • ในกรณีที่ความสัมพันธ์มีแอตทริบิวท์ ให้นำแอตทริบิวท์ นั้นไปต่อท้ายแอตทริบิวท์ที่นำมาจากตารางทั้ง 2 ฝั่ง N M takes STUDENT COURSE … C_ID … S_ID M 1 1 M takes STUDENT COURSE Registration_date
ข้อสังเกต ข้อสังเกต • คอลัมน์ของตารางที่คล้ายๆ กัน ควรมีชื่อที่แตกต่างกัน • เช่น ID เป็นชื่อของ Primary Key ของตาราง 2 ตาราง 1 ใน 2 ตารางนั้นควรจะเปลี่ยนชื่อก่อนที่จะเพิ่มตารางใหม่ลงไป • การเปลี่ยนควรจะ ทำโดยการเพิ่มชื่อของ Entity ลงไป ใน ชื่อ Attribute นั้น เช่น Student_id, Instructor_id
Step5: One-to-OneRelationship โดยทั่วไป การแปลงเหมือนกับการแปลงแบบ One-to-Many Relationship คือ เพิ่ม Primary Key จากด้านใดด้านหนึ่งไปเป็น Attribute ของอีกด้าน
Step5: One-to-OneRelationship • สำหรับการออกแบบที่ดีขึ้น การแปลง One-to-One Relationship จะแบ่งออกเป็น 3 กรณี
Step5: One-to-OneRelationship • Transforming One-to-One Relationship : (0,1) และ (1,1) - จะดีที่สุดถ้านำ Primary Key ฝั่ง (0,1) ไปเพิ่มเป็น Attribute ทางฝั่ง (1,1) เพื่อหลีกเลี่ยง Null
Step5: One-to-OneRelationship • Transforming One-to-One Relationship : (0,1) และ (0,1) • - นำ Primary Key ของฝั่งใดฝั่งหนึ่ง ไปเป็น attribute ของอีกฝั่งหนึ่ง(ไม่สามารถหลีกเลี่ยงค่า Null ได้
Step5: One-to-OneRelationship • หรือเปลี่ยนความสัมพันธ์ให้เป็นตารางใหม่ โดยนำ Primary Key ของทั้ง 2 ฝั่งไปเป็น attribute เพื่อหลีกเลี่ยงค่า Null
Step5: One-to-OneRelationship Transforming One-to-One Relationship: (1,1) และ (1,1) - รวม 2 ตารางเป็น 1 ตาราง - เลือก Primary key จาก Primary Key ของตารางใดตารางหนึ่ง - Primary Key ของตารางที่เหลือจะเป็น Alternate Key
Step6 : การแปลงความสัมพันธ์แบบ Unary • ความสัมพันธ์แบบ Unary เป็นความสัมพันธ์ระหว่างเอ็นทิตี้เดียว หรือเรียกว่า ความสัมพันธ์แบบรีเคอร์ซีพ • ความสัมพันธ์ • ความสัมพันธ์แบบ Unary ชนิดหนึ่งต่อกลุ่ม (1:M) • ความสัมพันธ์แบบ Unary ชนิดกลุ่มต่อกลุ่ม (M:N)
Step6 : การแปลงความสัมพันธ์แบบ Unary • ความสัมพันธ์แบบ Unary ชนิดหนึ่งต่อกลุ่ม (1:M) emp_Name emp_ID birthDate M EMPLOYEE 1 manages
Step6 : การแปลงความสัมพันธ์แบบ Unary • ความสัมพันธ์แบบ Unary ชนิดกลุ่มต่อกลุ่ม (M:N) item_Name • จะต้องสร้างรีเลชั่น 2 รีเลชั่นด้วยกัน • โดยรีเลชั่นแรกจะมีคีย์หลักพร้อมแอตทริบิวต์ที่เกี่ยวข้อง • ส่วนอีกรีเลชั่นประกอบด้วย 2 แอตทริบิวต์ที่ใช้เป็นคีย์หลัก ซึ่งแอตทริบิวท์ทั้ง 2 ก็คือค่าข้อมูลเดียวกันกับคีย์หลักในเอ็นทิตี้แรก แต่เปลี่ยนชื่อให้แตกต่างกัน item_No unitCost N ITEM M quantity contains
Step7 : การแปลงความสัมพันธ์แบบ Ternary (and n-ary) • ความสัมพันธ์แบบ Ternary เป็นความสัมพันธ์ระหว่างเอ็นทิตี้3 ตัวด้วยกัน physician _Name patient_Name physician_ID patient_ID M M Patient_ Treatment PHYSICAIN PATIENT time results date M TREATMENT description treatmentCode
Step7 : การแปลงความสัมพันธ์แบบ Ternary (and n-ary) • ขั้นที่ 1 ในการแปลง physician _Name patient_Name physician_ID patient_ID 1 M M 1 Patient_ Treatment PHYSICAIN PATIENT M 1 time results date TREATMENT description treatmentCode
Step7: การแปลงความสัมพันธ์แบบ Ternary (and n-ary) • จะต้องสร้างรีเลชั่น 4 รีเลชั่นด้วยกัน • โดยจะมีเอ็นทิตี้หนึ่งเชื่อมโยงระหว่าง 3 เอ็นทิตี้เข้าด้วยกัน • เอ็นทิตี้นั้นจะนำคีย์หลักใน 3เอ็นทิตี้มาเป็นคีย์หลัก และอาจเพิ่มเติมคีย์หลักได้ • ขั้นที่ 2 ในการแปลง
Step8 : การแปลงความสัมพันธ์แบบ Supertypeและ Subtype • ปกติแล้วแบบจำลองข้อมูลเชิงสัมพันธ์จะไม่สนับสนุนความสัมพันธ์แบบ Supertype/Subtype แต่อย่างไรก็ตาม ก็ยังมีแนวทางในการออกแบบเพื่อรองรับความสัมพันธ์ดังกล่าวได้ดังนี้ • ให้สร้างรีเลชั่นแยกออกต่างหาก สำหรับซูเปอร์ไทป์และแต่ละซับไทป์ • แอตตริบิวต์ของซับไทป์จะได้รับการถ่ายทอดจากรีเลชั่นที่เป็นซูเปอร์ไทป์ รวมถึงแอตตริบิวต์ที่เป็นคีย์หลักด้วย • กำหนดคีย์หลักให้กับแต่ละรีเลชั่นที่เป็นซับไทป์ โดยจะต้องมีแอตตริบิวต์ที่แตกต่างกัน เพื่อใช้ระบุความแตกต่างของแต่ละซับไทป์ • กำหนด Subtype Discriminator ให้กับ Supertype
Step8 : การแปลงความสัมพันธ์แบบ Supertypeและ Subtype name address empNo dataHired EMPLOYEE d CONSULTANT SALARIED_EMP HOURLY_EMP hourlyRate salary contractNo bonus BillingRate
Step8 : การแปลงความสัมพันธ์แบบ Supertypeและ Subtype
ปัญหาในอีอาร์โมเดล (Problem with ER Model) เป็นปัญหาที่เกิดจากในขั้นตอนการออกแบบในเชิงความคิดหรือทางลอจิคอล เป็นการสร้างความสัมพันธ์ระหว่างเอ็นติตี้ที่ผิดก่อให้เกิดการแปลความหมายความสัมพันธ์สัมพันธ์ผิดพลาดได้ โดยความผิดพลาดหรือปัญหาใน ER Model จะมีอยู่สองรูปแบบด้วยกันคือ 1. Fan Traps 2. Chasm Traps
ปัญหาจากการออกแบบฐานข้อมูลด้วยอี-อาร์โมเดลปัญหาจากการออกแบบฐานข้อมูลด้วยอี-อาร์โมเดล 1. Fan Trap เป็นปัญหาที่เกี่ยวข้องกับลักษณะการจัดความสัมพันธ์ระหว่างเอนทิตีทำให้เกิดความไม่ชัดเจนในการแสดงข้อมูลที่สนใจออกมา ซึ่งมักพบในกรณีที่เอนทิตีหนึ่งมีความสัมพันธ์แบบหนึ่งต่อกลุ่มกับเอนทิตีอื่นตั้งแต่สองเอนทิตีขึ้นไป
ตัวอย่างปัญหา Fan Trap สถาบันการศึกษาแห่งหนึ่งเปิดทำการสอนหลายคณะ โดยในแต่ละคณะประกอบด้วยภาควิชาต่าง ๆ หลายภาควิชา และอาจารย์หลายคน ซึ่งอาจารย์แต่ละคนจะสังกัดคณะใดคณะหนึ่งเท่านั้น หากกำหนดให้ความสัมพันธ์ระหว่างแต่ละเอนทิตีเป็นดังนี้
อาจารย์สังกัดภาควิชาใด?? เนื่องจากไม่มีความสัมพันธ์ระหว่างเอนทีตีภาควิชา
ปัญหาจากการออกแบบฐานข้อมูลด้วยอี-อาร์โมเดลปัญหาจากการออกแบบฐานข้อมูลด้วยอี-อาร์โมเดล 2. Chasm Trap เป็นปัญหาที่เกี่ยวข้องกับการแสดงข้อมูลที่ควรจะมีไม่ได้ หรือไม่สามารถเชื่อมโยงเพื่อให้ได้ข้อมูลที่ครบถ้วนได้โดยปัญหานี้มักพบเมื่อเอนทีตีหนึ่งมีความสัมพันธ์กับเอนทิตีอื่นตั้งแต่สองเอนทิตี ขึ้นไป แต่ไม่สามารถเชื่อมโยงความสัมพันธ์ระหว่างข้อมูลได้
ตัวอย่าง Chasm Trapกำหนดให้แต่ละภาควิชาประกอบด้วยอาจารย์หลายคน ซึ่งอาจารย์แต่ละคนจะสังกัดภาควิชาใดภาควิชาหนึ่งเท่านั้น และอาจารย์แต่ละคนอาจทำการสอนได้มากกว่าหนึ่งชุดวิชา โดยแต่ละชุดวิชาอาจมีอาจารย์ผู้สอนมากกว่าหนึ่งคนก็ได้ หากกำหนดให้ความสัมพันธ์ระหว่างแต่ละเอนทิตีเป็นดังนี้
ถ้าชุดวิชาไม่เคยเปิดสอน ก็จะไม่มีอาจารย์คนใดสอน ทำให้ไม่ทราบว่าชุดวิชานั้นอยู่ในภาควิชาใด
แบบฝึกหัด 1. จงวาดรูป ER Diagram ของระบบร้านเช่าวีดีโอแห่งหนึ่ง ประกอบด้วย • แฟ้มสมาชิก(member) ข้อมูลที่เก็บ รหัสลูกค้า , ชื่อ , ที่อยู่,เบอร์โทร • แฟ้มชื่อเรื่อง(title) ข้อมูลที่เก็บ รหัสเรื่อง, ชื่อเรื่อง , ผู้กำกับ , นักแสดง (Mutivalue attribute) • แฟ้มประเภท(category)ข้อมูลที่เก็บ รหัสประเภท,รายละเอียด จากนั้นให้แปลง ER Diagram ข้างต้น ให้เป็นตารางให้ถูกต้อง
2. จงแปลง ER Diagram ต่อไปนี้ให้เป็นตาราง 1 M N M M 1
3. จงแปลง ER Diagram ต่อไปนี้ให้เป็นตาราง วันที่เข้าเรียน คณะ เลขที่บัตร วันเกิด รหัสวิชา รหัสนักศึกษา ชื่อ 1 1 N M มี ลงทะเบียน ประวัตินักศึกษา วิชา นักศึกษา M ชั้นปี ชื่อวิชา เชื้อชาติ ที่อยู่ มี หน่วยกิต 1 อาจารย์ที่ปรึกษา รหัสอาจารย์ ชื่ออาจารย์ ห้องพัก
4. จงแปลง ER Diagram ต่อไปนี้ให้เป็นตาราง M N 1 M N M