06.1 logical database design[transform erd into relations]
-
Upload
opas-kaewtai -
Category
Education
-
view
1.123 -
download
2
Transcript of 06.1 logical database design[transform erd into relations]
การออกแบบฐานข้อมูลเชิงตรรกะ (Logical Database Design)
http://www.flickr.com/photos/aboyandhisbike/
การแปลงไดอะแกรมอีอาร์เป็นรีเลชั่น
1. Map Strong Entities
2. Map Weak Entities
3. Map Binary Relationship• ความสัมพันธ์แบบหน่ึงต่อกลุ่ม• ความสัมพันธ์แบบหน่ึงต่อหน่ึง• ความสัมพันธ์แบบกลุ่มต่อกลุ่ม
4. Map Unary Relationship
5. Map Ternary Relationship
6. Map Associative Entity
7. Map Supertype/Subtype
แบ่งออกเป็น 7 ขั้นตอน โดยในแต่ละข้ันตอนไม่จำเป็นต้องทำพร้อมกันตามลำดับ บางขั้นตอนสามารถทำไปพร้อมกัน หรืออาจมีบางขั้นตอนไม่ถูกทำก็ได้
โดยมีรายละเอียดของขั้นตอนดังน้ี
1. Map Strong Entities
● สร้างรีเลชั่นโดยใช้ชื่อของเอนทิตี้เป็นชื่อของรีเลชั่น และรีเลชั่นประกอบไปด้วยแอตทริบิวของเอนทิตี้น้ันๆ
● Composite Attribute ให้เก็บเฉพาะ Simple Attribute ทีป่ระกอบเป็น Composite Attribute น้ันๆ● เช่น Composite Attribute ช่ือ stdName ท่ีประกอบไปด้วยแอตทริบิวต์ย่อย
frstName และ lastName ในกรณีนี้จะเก็บแต่ frstName และ lastName ส่วน stdName ทำการตัดท้ิงได้
● Derived Attribute อาจตัดทิ้ง เพราะสามารถคำนวณได้จากแอตทริบิวต์อื่นๆ● Multi-valued Attribute ต้องแยกเป็นอีกหน่ึงรีเลชั่น
1. Map Strong Entities
STUDENT(stdID, frtName, lastName, stdBirthDate)STUDENT_TEL(stdID, stdTel)
2. Map Weak Entities
● สร้างรีเลชั่นของ Weak Entity ที่ประกอบไปด้วย Simple Attribute ทั้งหมดของตนเอง
● คัดลอกคีย์หลัก (Primary Key) ของ Strong Entity มาวางบนรีเลชั่นน้ี เพื่อทำหน้าที่เป็นคีย์นอก (Foreign Key)
● คีย์หลักของของรีเลชั่นน้ีจะประกอบด้วยคีย์หลักของ Weak Entity รวมกับคีย์หลักของ Strong Entity
2. Map Weak Entities
EMPLOYEE(empID, empName, empAddr)DEPENDENCE(depName, empNo, depAddr, depTel)
3. Map Binary Relationship
ความสัมพันธ์ระหว่างสองเอนทิตี้น้ััน อาจเป็นความสัมพันธ์ดังน้ี● ความสัมพันธ์แบบหนึ่งต่อกลุ่ม (1:M) ให้แปลงเอนทิตี้ที่เป็น 1-side เป็น รีเลชั่น
ตามปกติ แต่เอนทิตี้ที่เป็น M-side ให้คัดลองคีย์หลักของเอนทิตี้ 1-side มาวางบนรีเลชั่นเพื่อเป็นคีย์นอกด้วย
● ความสัมพันธ์แบบหนึ่งต่อหนึ่ง (1:1) ให้รวมทั้งสองเอนทิตี้เป็นหน่ึงรีเลชั่น โดยเลือกคีย์หลักของเอนทิตี้ใดเอนทิตี้หน่ึงเป็นคียหลักของรีเลชั่น
● ความสัมพันธ์แบบกลุ่มต่อกลุ่ม (M:N) สร้างรีเลชั่นของ เอนทิตี้ M-side และ N-side แล้วสร้างรีเลชั่นของความสัมพันธ์แล้ววางแอตทริบิวต์ที่อยู่บนความสัมพันธ์ (ถ้ามี) จากน้ันคัดลอกคีย์หลักของทั้งเอนทิตี้ M และ N side มาวางที่รีเลชั่นความสัมพันธ์ แล้วเลือกให้ทั้งสองเป็นคีย์หลักของรีเลชั่นน้ี
ความสัมพันธ์แบบหน่ึงต่อกลุ่ม (1:M)
CUSTOMER(custID, custName, custAddr)CAR(carNo, modelCode, carYear, custID)
ความสัมพันธ์แบบหน่ึงต่อหน่ึง (1:1)
EMPLOYEE(custID, custName, custAddr, carNo, modelCode, carYear)
ความสัมพันธ์แบบกลุ่มต่อกลุ่ม (M:N)
CUSTOMER(custID, custName, custAddr)CAR(carNo, modelCode, carYear, custID)CUST_CAR(custID, carNo)
4. Map Unary Relationship
● สามารถทำได้เช่นเดียวกับการแปลงไดอะแกรมอีอาร์ที่เป็นความสัมพันธ์ระหว่างสองเอนทิตี้ให้เป็นรีเลชั่น
● แต่ให้เปลี่ยนชื่อของแอตทริบิวต์ของเอนทิตี้ด้านใดด้านหน่ึงเพื่อไม่ให้ซ้ำซ้อนกัน
4. Map Unary Relationship
EMPLOYEE(empNo, empName, empAddr, mngrNo, mngrName, mngrAddr)
5. Map Ternary Relationship
● ได้อะแกรมที่มีความสัมพันธ์ระหว่างสามเอนทิตี้ควรแปลงให้เป็น Associative Entity เพื่อให้ง่ายต่อการแปลง
6. Map Associative Entity
● สร้างรีเลชั่นสำหรับเอนทิตี้ที่เป็น Strong Entity● สร้างรีเลชั่นที่เป็น Associative Entity โดยใช้แอตทริบิวต์ทั้งหมดของเอนทิตี้น้ี● คัดลอกคีย์หลักของเอนทิตี้ที่เป็น Strong Entity มาวางบนรีเลชั่น เพื่อทำหน้าที่
เป็นคีย์นอก (Foreign Key)● ส่วนคีย์หลักของรีเลชั่นจะประกอบด้วยคีย์หลักของเอนทิตี้ที่เป็น Strong Entity
รวมกับคีย์หลักของ Associative Entity (ถ้าม)ี
6. Map Associative Entity
CUSTOMER(custNo, custName, custAddr)VENDOR(vendorNo, vendorName, vendorAddr)SHIPMENT(shipmentNo, custNo, vendorNo, shipmentDate)
7. Map Supertype/Subtype
● สร้างรีเลชั่นสำหรับเอนทิตี้ที่เป็น Supertype● สร้างรีเลชั่นสำหรับเอนทิตี้ที่เป็น Subtype โดยประกอบด้วยแอตทริบิวต์● คัดลอกคีย์หลักของเอนทิตี้ Supertype มาวางที่รีเลชั่นของ Subtype เพื่อเป็นคีย์
หลัก โดยต้องเปลี่ยนชื่อแอตทริบิวต์เพื่อไม่ให้ซ้ำกับคีย์หลักของรีเลชั่น Supertype
7. Map Supertype/Subtype
STAFF(staffNo, staffName, staffPosition, staffSalary)MANAGER(MNGstaffNo, mngStart, mngBonus)SALES(SALstaffNo, salesCar, salesAmt)SECRETARY(SCRstaffNo, scrType)