610 likes | 824 Views
ส่วนที่ 4. System Design. การออกแบบระบบ. Chapter 12. Database Design. การออกแบบฐานข้อมูล. กิจกรรมในขั้นตอนนี้ได้แก่ 1. การออกแบบฟอร์มและรายงาน 2. การออกแบบ GUI 3. การออกแบบฐานข้อมูล. System Development Life Cycle : SDLC. 12.2. Learning Objectives.
E N D
ส่วนที่ 4 System Design การออกแบบระบบ
Chapter 12 Database Design การออกแบบฐานข้อมูล
กิจกรรมในขั้นตอนนี้ได้แก่กิจกรรมในขั้นตอนนี้ได้แก่ 1. การออกแบบฟอร์มและรายงาน 2. การออกแบบ GUI 3. การออกแบบฐานข้อมูล System Development Life Cycle : SDLC 12.2
Learning Objectives • เพื่อให้ผู้เรียนสามารถเข้าใจและอธิบายต้นแบบของฐานข้อมูลได้ • เข้าใจและสามารถปรับปรุงโครงสร้างข้อมูลของฐานข้อมูลโดยการทำ Normalization ได้ • สามารถอธิบายการออกแบบฐานข้อมูล Database Design 12.3
Topics • การออกแบบฐานข้อมูล • ฐานข้อมูลเชิงสัมพันธ์ • การออกแบบฐานข้อมูลระดับตรรกะ • Normalization 12.4
การออกแบบฐานข้อมูล • ขั้นตอนการออกแบบฐานข้อมูลแบ่งออกเป็น 3 ระดับ คือ • Conceptual Design • Logical Design • Physical Design 12.5
การออกแบบฐานข้อมูล • Conceptual Design: การอธิบายถึงข้อมูลและความสัมพันธ์กันของข้อมูลในระบบที่เราวิเคราะห์มา โดยกำหนดว่าจากความต้องการของผู้ใช้ จะต้องมีข้อมูลอะไรบ้าง และข้อมูลแต่ละตัวมีความสัมพันธ์กันอย่างไร และมีข้อจำกัดอะไรบ้าง แสดงโดยใช้ High-Level Conceptual Data Model ในที่นี้เราใช้ E-R Model • Logical Design: จากโครงสร้างของฐานข้อมูลที่ได้จากการออกแบบฐานข้อมูลในระดับ Conceptual แล้วนำโครงสร้างนั้นมาอิงกับ Data Model เพื่อแปลงเป็นตาราง (Relational Data Model) หรือความสัมพันธ์ตามแนวคิดของ Data Model จากนั้นต้องมีการปรับปรุงโครงสร้างของฐานข้อมูลให้มีความซ้ำซ้อนกันน้อยที่สุด โดยใช้ทฤษฎีการทำ Normalization • Physical Design: จากนั้นเป็นขั้นตอนการ Implement โดยนำ DBMS มาใช้ Implement ผลลัพธ์ที่ได้ คือ Database Schema และขั้นตอนสุดท้าย คือการออกแบบการจัดเก็บข้อมูลลงใน Disk เป็นเรื่องของ Internal Storage Structure การเข้าถึงข้อมูลจะทำอย่างไร 12.6
ตัวอย่างฐานข้อมูลเชิงสัมพันธ์ตัวอย่างฐานข้อมูลเชิงสัมพันธ์ 12.7
แบบจำลองข้อมูลเชิงสัมพันธ์ (Relational Database Model) แบบจำลองข้อมูลเชิงสัมพันธ์ (Relational Database Model) คือ แบบจำลองที่นำเสนอโครงสร้างของข้อมูลที่อยู่ในฐานข้อมูลเชิงสัมพันธ์ โดยเสนอในรูปแบบตาราง (Table) หรือ Relations Relationsคือ ตาราง 2 มิติที่ใช้บรรจุข้อมูล โดยแต่ละ Relations จะ ประกอบด้วยชุดของแถว (Row) เรียกว่า “Tuple”และ คอลัมน์ (Column) เรียกว่า “Field” หรือ “Attribute” 12.8
แบบจำลองข้อมูลเชิงสัมพันธ์ (Relational Database Model) EMPLOYEE(Emp_ID,Emp_Sex,Emp_Name,Emp_Dep,Salary) 12.9
คุณสมบัติของ Relation 1. ข้อมูลที่อยู่ใน Attribute 1 Attribute และ Row 1 Row จะต้องมี คุณสมบัติ Atomic คือมีค่าเพียงค่าเดียวเท่านั้น หรือเรียกว่า “Single- Valued” 2. ข้อมูลที่อยู่ใน Attribute เดียวกันจะต้องอยู่ภายในขอบเขตของค่าที่ เป็นไปได้ (Domain) เดียวกัน 3. ข้อมูลในแต่ละแถว (Tuple) จะต้องมีค่าไม่ซ้ำกันเลย เช่น กรณีที่ใน แผนกงานหนึ่ง มีพนักงานชื่อและนามสกุลเดียวกัน 2 คน ในการเก็บข้อมูล ของพนักงานทั้งสองจะต้องไม่มีค่าซ้ำกันดังตัวอย่าง 12.10
คุณสมบัติของ Relation มี Emp_ID ทำให้ไม่ซ้ำกัน 12.11
คุณสมบัติของ Relation 4. ลำดับการจัดเรียงของ Attributes จากซ้ายไปขวา ไม่จำเป็นต้องมีการ เรียงลำดับ 5. ลำดับของข้อมูลแต่ละแถวจากบนลงล่าง ไม่จำเป็นต้องมีการเรียงลำดับ 12.12
คุณสมบัติของ Relation 1 2 2 12.13
คุณสมบัติของ Relation 4,5 12.14
Integrity Rule สามารถแบ่งเป็น 2 ส่วน ดังนี้ • Entity Integrity Rule เป็นกฏเกณฑ์เพื่อควบคุมความถูกต้องของ Entity ซึ่งจะต้องมีลักษณะจำแนกความแตกต่างหรืออ้างถึงสมาชิกได้ และจะต้องไม่เป็นค่าว่าง “Primary Key” • Referential Integrity Rule เป็นกฏเกณฑ์ที่ใช้รักษาความสัมพันธ์ของข้อมูล และใช้ในการอ้างถึงข้อมูลระหว่าง Table“Foreign Key” 12.15
การปรับเปลี่ยนโครงสร้างของข้อมูลให้อยู่ในระดับตรรกะการปรับเปลี่ยนโครงสร้างของข้อมูลให้อยู่ในระดับตรรกะ • ในการปรับเปลี่ยนโครงสร้างของข้อมูลให้อยู่ในระดับตรรกะมีดังนี้ • การกำจัด Composite Attribute • การกำจัดMulti-valued Attribute • การกำจัดExternal Identifier 12.16
Sex Street Age Name City Address State PERSON Sex Street Age City Name State PERSON การกำจัด Composite Attribute วิธีที่ 1แยก CompositeAttribute ออกเป็น Attribute ย่อย 12.17
Sex Street Age Name City Address State PERSON Sex Address Age Name PERSON การกำจัด Composite Attribute วิธีที่ 2ยุบ CompositeAttribute ให้เหลือเพียง Attribute เดียว 12.18
การกำจัด Multivalued Attribute • กรณีกำจัด Multi-valued Attributeของ Entity จะมีขั้นตอนดังนี้ • แปลง Multi-valued Attribute ของ Entity ไปเป็น Entity ใหม่โดยที่ Entity ใหม่นี้จะประกอบไปด้วย Attribute ที่ได้มาจาก Multi-valued Attribute และ Identifier ของ Entity เดิม • รวมทุก Attribute ของ Entity ใหม่เป็น Identifier ของ Entity ใหม่ 12.19
การกำจัด Multi-valued Attribute • กรณีกำจัด Multi-valued Attributeของ Relationship จะมีขั้นตอนดังนี้ • แปลง Multi-valued Attribute ของ Relationshipไปเป็น Entity ใหม่ โดยที่ Entity ใหม่นี้จะประกอบด้วย Attribute ที่ได้มาจาก Multi-valued Attribute และ Identifier ของ Entity ที่มีความสัมพันธ์กับ Relationship นั้น สำหรับการเลือก Identifier มาเป็น Attribute ของ Entity ใหม่จะมีหลักการดังนี้ • ถ้าเป็น One-to-One Relationship ให้เลือก Identifier จาก Entity ใดก็ได้ที่มีความสัมพันธ์กับ Relationship นั้นมาเป็น Attribute ของ Entity ใหม่ • ถ้าเป็น One-to-Many Relationship ให้เลือก Identifier จาก Entity ทางด้าน Many ที่มีความสัมพันธ์กับ Relationship นั้นมาเป็น Attribute ของ Entity ใหม่ • ถ้าเป็น Many-to-Many Relationship ให้เลือก Identifier จากทั้ง 2 Entityที่มีความสัมพันธ์กับ Relationship นั้นมาเป็น Attribute ของ Entity ใหม่ • รวมทุก Attribute ของ Entity ใหม่เป็น Identifier ของ Entity ใหม่ 12.20
การกำจัด Multi-valued Attribute เป็น Multivalue attribute Material_Code Description Product_Code Price PRODUCT Material_Code Product_Code PRODUCT_MATERIAL 12.21
การกำจัด External Identifier • เนื่องจาก Relational Model จะไม่ปรากฏ Identifier แบบ External Identifierดังนั้นจึงต้องแปลง External Identifier ให้อยู่ในรูป Internal Identifier โดยมีขั้นตอนดังนี้ • แปลง External Identifier ไปเป็น Attribute ใหม่ของ Weak โดย Attribute ใหม่นี้จะทำหน้าที่เป็น Identifier ร่วมกับ Identifier เดิมของ Weak Entity • ตัด Relationship ระหว่าง Strong Entity และ Weak Entity ทิ้ง 12.22
การกำจัด External Identifier เป็น External Identifier ของ Entity Student U_Name University-Code City University ENROLL STUDENT Student_No Age STD_Name 12.23
U_Name University-Code City University STUDENT Age Student_No STD_Name University-Code การกำจัด External Identifier 12.24
Relational Schema Relational Schema เป็นรูปแบบที่ใช้แสดงถึงโครงสร้างของแต่ละ Entity ใน Relational Model ซึ่งประกอบขึ้นจากเซตของ Attribute ภายใต้ Relation นั้น โดยมีรูปแบบ ดังนี้ Relation-Name(A1,A2,A3,…,An) โดยที่ Relation-Name หมายถึง ชื่อของ Relation A1,A2,….,An หมายถึงรายชื่อ Attribute ภายใต้ Relation นั้น เมื่อนำแต่ละ Relation มาประกอบกันจะปรากฏเป็นโครงสร้างทั้งหมดของฐานข้อมูล เรียกว่า Relational Database Schema 12.25
Emp_Name Sex Emp-No Age EMPLOYEE EMPLOYEE(Emp-No,Emp-Name,Sex,Age) การแปลง Entity ไปเป็น Relation 12.26
การแปลง Relationship ไปเป็น Relation • ในการแปลง Relationship ไปเป็น Relation นั้นจะแปลงตาม Cardinality ของ • Relationship ได้ดังนี้ • กรณีที่เป็น One-to-One Relationship ในการแปลงสามารถทำได้ 2 กรณี ดังนี้ • กรณีที่ 1 Entity มีความสัมพันธ์กับแบบ Total Participation คือ สมาชิกทุก ตัวใน Entity หนึ่งมีความสัมพันธ์กับอีก Entity หนึ่ง อย่างน้อย 1 ตัว โดยในกรณีนี้ ให้ทำการแปลงทั้ง Entity และ Relationship ที่สัมพันธ์กันเป็น Relation เดียวที่ ประกอบขึ้นจาก Attribute ของทั้ง Entity และ Relationship ที่สัมพันธ์กันนั้น พร้อมกับกำหนด Primary key จาก Identifier ของ Entity ใด Entity หนึ่งที่ สัมพันธ์กัน 12.27
Ship-Address Cust_Name Cust-No Cust-No 1 1 CUSTOMER WITH SHIPPING-INFO (1,1) (1,1) CUST-SHIPPING(Cust-No,Cust-Name,Ship-Address) การแปลง Relationship ไปเป็น Relation 12.28
การแปลง Relationship ไปเป็น Relation • กรณีที่ 2 Entity มีความสัมพันธ์กับแบบ Partial Participation คือ สมาชิกบาง ตัวใน Entity หนึ่งไปมีความสัมพันธ์กับสมาชิกบางตัวของอีก Entity หนึ่ง โดยใน กรณีนี้ ให้ทำการแปลงแต่ละ Entity ที่มีสัมพันธ์กันเป็นแต่ละ Relation ที่มี Primary key ซึ่งเลือกจาก Identifier ของ Entity เหล่านั้นส่วน Relationship สามารถทำได้ 2 วิธีดังนี้ • วิธีที่ 1 แปลง Relationship ไปเป็น Relation ที่ประกอบด้วย Attribute ของ Relationship นั้นเองรวมกับ Attribute ที่เป็น Identifier ของ Entity ที่สัมพันธ์กับ Relationship นั้นส่วน Primary Key ให้เลือกจาก Identifier ของ Entity ใด Entity หนึ่งที่สัมพันธ์กับ Relationship นั้น 12.29
การแปลงโครงร่างของ Relationship ให้อยู่ในรูปของ Relational Schema แบบ Partial Participant Card-No Cust_Name Card-Type Credit-Limit Cust-No 1 1 CUSTOMER Possesses CREDIT-CARD (1,1) (0,1) CUSTOMER(Cust-No,Cust-Name) CREDIT-CARD(Card_Type,Card-No,Credit-Limit) POSSESSES-CARD(Card-Type,Card-No,Cust-No) 12.30
การแปลง Relationship ไปเป็น Relation • วิธีที่ 2 วิธีนี้สามารถทำได้เช่นเดียวกับวิธีที่ 1 แต่การเลือกPrimary • Key ให้เลือกจาก Identifier ของทุก Entity ที่สัมพันธ์กับ Relationship นั้น ดัง • ตัวอย่าง 12.31
Female-SSN Name Duration Name Male-SSN Date 1 1 MALE MARRIAGE FEMALE (0,1) (0,1) MALE(Male-SSN, Name) FEMALE(Female-SSN, Name) MARRIAGE(Male-SSN,Female-SSN,Date,Duration) การแปลงโครงร่างของ Relationship ให้อยู่ในรูปของ Relational Schema แบบ Partial Participant 12.32
การแปลง Relationship ไปเป็น Relation • กรณีที่เป็น One-to-Many Relationship ในการแปลงสามารถทำได้ 2 กรณี ดังนี้ • กรณีที่ 1 Entity มีความสัมพันธ์กับแบบ Total Participation คือ ให้ย้ายทุก • Attribute ของRelationship รวมทั้งสำเนา Identifier ของ Entity ทางด้าน One • ไปเป็น Attribute ของ Entity ทางด้าน Many จากนั้นจึงแปลงทั้ง 2 Entity ไป • เป็น Relation ดังตัวอย่าง 12.33
City-Name Population CITY(City-Name,State-Name,Population) STATE(State-Name,Governor,Population) CITY (1,1) M BELONG-TO (1,n) 1 STATE State-Name Governor Population การแปลงโครงร่างของ Relationship ให้อยู่ในรูปของ Relational Schema 12.34
การแปลง Relationship ไปเป็น Relation • กรณีที่ 2 Entity มีความสัมพันธ์กับแบบ Partial Participation ให้แปลงทั้ง 2 Entity และ Relationship ไปเป็นแต่ละ Relation แต่ Relation ของ • Relationship จะประกอบด้วย Attribute ของ Relationship เองรวมกับ • Identifier ของทั้ง 2 Entity ที่สัมพันธ์กับ Relationship นั้นส่วน Primary Key • ให้เลือกจาก Identifier ของ Entity ใด Entity หนึ่งที่สัมพันธ์กับ Relationship • นั้น ดังตัวอย่าง 12.35
Name Phone-No SALEMAN SALEMAN(Name, Phone-No) ORDER(Order-No, Date) SALE-ORDER(Order-No, Name, Discount-Rate) (1,n) 1 Discount- Rate WRITES (0,1) M ORDER Order_No Date การแปลงโครงร่างของ Relationship ให้อยู่ในรูปของ Relational Schema 12.36
การแปลง Relationship ไปเป็น Relation • กรณีที่เป็น Many-to-Many Relationship • ให้ทำการแปลงทั้ง 2 Entity และ Relationship ไปเป็นแต่ละ Relation แต่ • Relation ของ Relationship จะประกอบด้วย Attribute ของ Relationship เอง • รวมกับIdentifier ของทั้ง 2 Entity ที่สัมพันธ์กับ Relationship นั้น ส่วน Primary • Key ให้เลือกจาก Identifier ของทั้ง2 Entity ที่สัมพันธ์กับ Relationship นั้น ดัง • ตัวอย่าง 12.37
Name Student-No GPA STUDENT STUDENT(Student_No, Last-Name,GPA) COURSE(Course-No, Course-Name) ENROLL-IN(Student-No, Course-No, Semester,Grade) (1,n) M Semester ENROLL-IN Grade (1,n) N COURSE Course_No Course-Name การแปลงโครงร่างของ Relationship ให้อยู่ในรูปของ Relational Schema 12.38
การแปลง Relationship ไปเป็น Relation • กรณีที่เป็น N-ary Relationship • ให้แปลงทุก Entity และ Relationship ไปเป็นแต่ละ Relation แต่ • Relation ของ Relationship จะประกอบด้วย Attribute ของ Relationship เอง • รวมกับ Identifier ของทุก Entity ที่สัมพันธ์กับ Relationship นั้น ส่วน Primary • Key ให้เลือกจาก Identifier ของทุก Entity ที่สัมพันธ์กับ Relationship นั้น ดัง • ตัวอย่าง 12.39
Name Product-Code Description PRODUCT Part-Code M SUPPLY Quantity PART M Description M SUPPLIER Telephone Supplier-Code Name Address PRODUCT(Product-Code, Name, Description) PART(Part-Code, Description) SUPPLIER(Supplier-Code, Name, Address, Telephone) SUPPLY(Product-Code, Part-Code, Supplier-Code, Quantity) การแปลงโครงร่างของ Relationship ให้อยู่ในรูปของ Relational Schema 12.40
การแปลง Relationship ไปเป็น Relation • กรณีที่เป็น Recursive Relationship • ให้แปลงทุก Entity และ Relationship ไปเป็นแต่ละ Relation แต่ Relation • ของ Relationship จะประกอบขึ้นจาก Identifier ของ Entity ที่สัมพันธ์กับ • Relationship นั้นจำนวน 2 ชุด ซึ่งแต่ละชุดจะให้ชื่อตาม Role ของ Entity ใน • Relationship นั้นรวมกับ Attribute ของ Relationship เอง ส่วนการเลือก • Primary Key จะสามารถทำได้ 2 กรณีดังนี้ • กรณีเป็น One-to-Many Relationship ให้เลือก Primary Key จาก Identifier ทางด้าน Many • กรณีเป็น Many-to-Many Relationship ให้เลือก Primary Key 2 ด้านรวมกัน 12.41
Date-of-Birth Name EMPLOYEE IS-Manager-of IS-Subord MANAGER-OF การแปลงโครงร่างของ Relationship ให้อยู่ในรูปของ Relational Schema 12.42
กรณีที่เป็น Recursive Relationship 1. กรณีกำหนดให้ลูกจ้างแต่ละคนสามารถมีนายจ้างได้หลายคน ความสัมพันธ์จึงอยู่ ในลักษณะ Many-to-Many ดังนั้นทั้ง Attribute“NAME-OF-MANAGER” และ “NAME-OF-SUBORDINATE” จึงถูกกำหนดให้เป็น Primary Key ของ Relation ดังนี้ EMPLOYEE(Name, Date-Of-Birth) MANAGER-OF (Name-Of-Manager, Name-of-Subordinate) 12.43
กรณีที่เป็น Recursive Relationship 2. กรณีกำหนดให้ลูกจ้างแต่ละคนสามารถมีนายจ้างได้เพียงคนเดียว ความสัมพันธ์ จึงอยู่ในลักษณะ One-to-Many ดังนั้น Attribute“Name-Of-Subordinate” จึงถูก กำหนดให้เป็น Primary Key ของ Relationเพียง Attribute ดังนี้ EMPLOYEE(Name, Date-Of-Birth) MANAGER-OF (Name-Of-Subordinate, Name-of-Manager) • แต่บางกรณี ถ้าค่าของ Attribute“Name-of-Subordinate” ของ Relation • “Manager-Of” และ Attribute “Name” ของ Relation “Employee” มีค่า • เดียวกัน สามารถยุบ Relation “Manager-Of” เพื่อไปเป็น Attribute ของ • Relation “Employee” EMPLOYEE(Name, Date-Of-Birth, Name-Of-Manager) 12.44
การทำ Normalization • Normalization คือ กระบวนการปรับปรุงโครงสร้างข้อมูลของฐานข้อมูลที่มีความซ้ำซ้อนให้อยู่ในรูปแบบที่เป็นบรรทัดฐาน • Normal Form มีอยู่ 6 ระดับด้วยกัน คือ 1. First Normal Form (1NF) เพื่อจำกัดกลุ่มข้อมูลที่ซ้ำซ้อนกัน 2. Second Normal Form (2NF) เพื่อจำกัดความสัมพันธ์แบบ Partial Dependency ที่เกิดขึ้นระหว่าง Attribute 3. Third Normal Form (3NF) เพื่อจำกัดความสัมพันธ์แบบ Transitive Dependency ที่เกิดขึ้นระหว่าง Attribute 4. Boyce-Codd Normal Form (BCNF) เพื่อจำกัดปัญหาแบบ Update Anomaly ที่อาจเหลืออยู่ 5. Fourth Normal Form (4NF) เพื่อจำกัดปัญหาแบบ Multi-Value Dependency ที่เกิดขึ้นของ Attribute 6. Fifth Normal Form (5NF) เพื่อจำกัดปัญหาแบบ Join Dependency ที่เกิดขึ้นของ Attribute 12.45
Entity ที่มีข้อมูลซ้ำซ้อน กำจัดกลุ่มข้อมูลซ้ำซ้อน กำจัด Partial Dependency 1NF 2NF กำจัด Transitive Dependency 3NF ขั้นตอนการทำ Normalization 12.46
EmpID CourseNo DateComplete CourseName Partial Dependency การทำ Normalization Partial Dependencyคือความสัมพันธ์ที่ต้องมี Determinant-attribute มากกว่า 1 ตัว (มี Primary key/Identifier มากกว่า 1 Attributes นั่นเอง) ความสัมพันธ์ระหว่างค่าของ Attribute เมื่อ Attribute ที่เป็น Determinant บางตัวสามารถระบุค่าของ Attribute อื่นที่ไม่ใช่ Identifier ได้ 12.47
Emp_ID Name Job_Class Chg_Hour Transitive Dependency การทำ Normalization Transitive Dependencyคือความสัมพันธ์ระหว่าง Attributeที่ไม่ใช่ Determinant Attribute (Attribute ที่ไม่ใช่ Primary Key นั่นเอง) ไป ขึ้นอยู่กับ Attribute อื่นที่ไม่ได้เป็น Determinant Attribute เหมือนกัน 12.48
ตัวอย่างข้อมูล 12.49