บทที่ 3 แบบจำลองข้อมูล Data Models Calculus
Relational Calculus แคลคูลัสเชิงสัมพันธ์หรือ Nonprocedural Query Language เป็นแบบจำลองของคำสั่งสำหรับเรียกใช้ข้อมูลจาก Relation ซึ่งให้ผลลัพธ์เหมือน Relational Algebra แต่จะเป็นคำสังที่ใช้การกำหนดข้อมูลต่างๆ ที่ต้องการจาก Relation โดยไม่ต้องสนใจวิธีการที่จะได้มาซึ่งผลลัพธ์นั้นจะต้องใช้การกระทำอะไรบ้าง มี 2 รูปแบบคือ 1. Tuple-Oriented Relational Calculus 2. Domain-Oriented Relational Calculus
Relational Calculus 1. Tuple-Oriented Relational Calculus มีการใช้ตัวแปรแทน Tuple ใน Relation ซึ่งตัวแปรนี้จะถูกเรียกว่า Tuple Variable หรือ Range Variable เมื่อต้องการใช้คำสั่ง Relational Calculus เพื่ออ้างถึง Tuple ใน Relation ใด ต้องกระทำผ่าน Tuple Variable ที่ทำหน้าที่แทน Tuple ของ Relation นั้นแทน
Relational Calculus การกำหนดชื่อตัวแปร รูปแบบคำสั่ง RANGE OF ชื่อตัวแปรทัพเพิล IS ชื่อรีเลชั่น เช่น การกำหนดชื่อตัวแปร E เป็น EMPLOYEE RANGE OF E IS EMPLOYEE และหากต้องการแสดงกลุ่มทัปเพิล E ทั้งหมดตามเงื่อนไขเป็นจริงใน P(E) เขียนได้ว่า { S | P (E)} โดย P คือสูตรหรือเงื่อนไขทางตรรกะ
1. Tuple-Oriented Relational Calculus ตัวอย่างที่ 3.16 ต้องการคิวรี่ข้อมูลทุกแอตตริบิวต์ ของพนักงานที่มีเงินเดือนมากกว่า 10000 RANG OF E IS EMPLOYEE { E | E.Salary > 10000} ตัวอย่างที่ 3.17 ต้องการคิวรีข้อมูลเฉพาะแอตตริบิวต์ empNo,EmpName,Salary ของพนักงานที่มีเงินเดือนมากว่า 10000 บาท { E.empNo,E.EmpName,E.Salary | E.Salary > 10000}
1. Tuple-Oriented Relational Calculus สามารถแปลงเป็นคำสั่ง SQL ดังนี้ Select E.empNo,E.EmpName,E.Salary From EMPLOYEE AS E Where E.Salary > 10000
1. Tuple-Oriented Relational Calculus สัญลักษณ์ Quantifiers มาใช้งานเพิ่มเติม Existential Quantifiers = there exists Universal Quantifiers = for all
1. Tuple-Oriented Relational Calculus ตัวอย่างที่ 3.18 จงแสดงทัปเพิลของรีเลชั่น BRANCH ที่มี BranchNo ตรงกับ BranchNo ในทัปเพิลของรีเลชั่น EMPLOYEE และสาขาที่อยู่ในจังหวัดลำปาง RANG OF E IS EMPLOYEE RANG OF B IS BRANCH B (B.branchNo=E.branchNo B.City = “ลำปาง” โอเปอร์เรชั่นทางด้านตรรกะ ประกอบด้วย (AND) (OR) และ (NOT)
1. Tuple-Oriented Relational Calculus ตัวอย่างที่ 3.19 จงแสดงทุกทัปเพิลในรีเลชั่น BRANCH เฉพาะสาขาที่ไม่อยู่ในจังหวัดกรุงเทพฯ RANG OF B IS BRANCH B (B.city = “กรุงเทพฯ” หรือเขียนอีกแบบว่า B (B.city = “กรุงเทพฯ”)
1. Tuple-Oriented Relational Calculus ตัวอย่างที่ 3.20 จงแสดงรายชื่อของผู้จัดการที่เงินเดือนสูงกว่า 25000 บาท RANG OF E IS EMPLOYEE {E.employee | E.position = “ผู้จัดการ” E.salary > 25000}
1. Tuple-Oriented Relational Calculus ตัวอย่างที่ 3.21 จงแสดงข้อมูลพนักงานที่ดูแลบ้านเช่าในจังหวัดเชียงใหม่ RANG OF E IS EMPLOYEE RANG OF P IS PROPERTY_FOR_RENT {E | P (P.empNo= E.empNo P.City =“เชียงใหม่”) }
1. Tuple-Oriented Relational Calculus ตัวอย่างที่ 3.22 จงแสดงรายชื่อพนักงานปัจจุบันที่ไม่ได้รับมอบหมายให้ดูแลบ้านเช่า RANG OF E IS EMPLOYEE RANG OF P IS PROPERTY_FOR_RENT {E.empName | ~(P (E.empNo= P.empNo) )} หรือ {E.empName | P (~(E.empNo= P.empNo) )}
1. Tuple-Oriented Relational Calculus ตัวอย่างที่ 3.23 จงแสดงรายชื่อและคำติชมของลูกค้าที่เข้ามาเยี่ยมชมบ้านเช่าในกรุงเทพฯ RANG OF C IS CLIENT RANG OF V IS VIEWING RANG OF P IS PROPERTY_FOR_RENT {C.clientName, V.comment | (C.clientNo = V.clientNo) P (V.propertyNo =P. propertyNo P.City =“กรุงเทพฯ”) }
Relational Calculus 2. Domain-Oriented Relational Calculus จะใช้ตัวแปรแทน Domain ของข้อมูลแทน Tuple เรียกว่า “Domain Variable” หรือ “Scalar Variable” การใช้ Domain ของข้อมูลจะอ้างถึง การเป็นสมาชิกของข้อมูลภายใต้เงื่อนไขที่กำหนดในคำสั่งนั้นแทน กล่าวคือจะใช้การระบุค่าของ Attribute ต่างๆ ของ Relation ที่ต้องการให้แสดงข้อมูลออกมาแทนการใช้เงื่อนไขเพื่อจำกัดเฉพาะจำนวน Tuple ที่เป็นไปตามเงื่อนไขตามที่กำหนดใน Tuple-Orinted Relational Calculus
Relational Calculus รูปแบบ R(pair, pair…) โดยที่ R คือ ชื่อของ Relation ที่เป็นเจ้าของAttribute pair คือ ค่าของ Attribute ที่ต้องการ โดยจะอยู่ในรูปแบบ a:v ที่ซึ่ง a ได้แก่ ชื่อ Attribute ส่วน v ได้แก่ค่าของ Attribute นั้น
2. Domain-Oriented Relational Calculus ตัวอย่างที่ 3.24 จงแสดงรายชื่อพนักงานที่เป็นผู้จัดการที่เงินเดือนสูงกว่า 25000 {empName | position, salary (EMPLOYEE(empName,position,salary) position =“Manager” salary > 25000}
2. Domain-Oriented Relational Calculus ตัวอย่างที่ 3.25 แสดงพนักงานที่ดูแลบ้านเช่าจังหวัดเชียงราย {empName,propertyNo | empNo EMPLOYEE(empNo,empName) city (PROPERTY_FOR_RENT(propertyNo,empNo) ^ P.city =“เชียงราย” )}