COMP9120 Review Session 2024 PDF
Document Details
University of Sydney, School of Computer Science
2024
University of Sydney
Professor Athman Bouguettaya
Tags
Summary
This is a review session document for COMP9120 in Semester 2, 2024, at the University of Sydney, School of Computer Science. The document contains information on topics covered in the upcoming exam, including database design and SQL queries. It contains instructions and topics.
Full Transcript
COMP9120: Review Session Week 13: Review Semester 2, 2024 Professor Athman Bouguettaya School of Computer Science Acknowledgement of Country I would like to acknowledge the Traditional Owners of Aust...
COMP9120: Review Session Week 13: Review Semester 2, 2024 Professor Athman Bouguettaya School of Computer Science Acknowledgement of Country I would like to acknowledge the Traditional Owners of Australia and recognise their continuing connection to land, water and culture. I am currently on the land of the Gadigal people of the Eora nation and pay my respects to their Elders, past, present and emerging. Copyright warning COMMONWEALTH OF AUSTRALIA Copyright Regulations 1969 WARNING This material has been reproduced and communicated to you by or on behalf of the University of Sydney pursuant to Part VB of the Copyright Act 1968 (the Act). The material in this communication may be subject to copyright under the Act. Any further copying or communication of this material by you may be the subject of copyright protection under the Act. Do not remove this notice. Final Exam ▪ Date: Monday 11 November 2024 ▪ Time: 5:00 PM ▪ Mode: Pen-and-paper based exam. ▪ Duration: 130 Minutes ▪ Reading time: 10 Minutes ▪ Writing time: 120 Minutes Keep track of your time during exam 4 Final Exam ▪ EXAM CONDITIONS: ▪ This is a CLOSED book exam - no material permitted. ▪ No electronic aids are permitted e.g., laptops, phones, etc. ▪ Answer all questions in the spaces provided on this paper. You may use pencil or ink. Marks may not be given where there is insufficient evidence of the working required to obtain the solution. If you need additional writing space, please use the extra pages provided at the end of this exam booklet. Only pages in this exam booklet will be marked. ▪ MATERIALS TO BE SUPPLIED TO STUDENTS: ▪ 1 x 16-page answer book ▪ MATERIALS PERMITTED IN THE EXAM VENUE: ▪ Calculator - non-programmable From Canvas (when you login to your canvas account) Approvable calculators and linguistic dictionaries The Student Centre will be available to approve non-programmable calculators and linguistic dictionaries on Mondays, Wednesdays and Fridays, between 9 am and 12 pm. If you visit the Student Centre outside of these designated periods you will be told to come back at the correct time. The calculator you bring should be one that is listed on this page. 5 Final Exam Question Types ▪ 3 MCQ questions (6 marks) ▪ 9 Essay-type questions (44 marks) ▪ Topics: ▪ ERD Practice exam is available on our ▪ Relational Model regular Canvas site ▪ Relational Algebra ▪ SQL ▪ Integrity Constraints › Exam covers 50% of the final mark ▪ Transactions › You must obtain at least 40% in the final exam, ▪ Normalization as well as an overall mark of at least 50%, to pass the unit ▪ Storage ▪ Indexing ▪ Query Processing ▪ For MCQs, tick the correct option in the answer sheet. ▪ Please use only black/blue pen or pencil to write your answers. 6 What is potentially covered in the exam? Week Topic Week 1 Introduction Week 2 Conceptual Database Design Foundations Week 3 Relational Data Model / Logical Database Design Week 4 Relational Algebra and SQL Week 5 Complex SQL Week 6 Database Integrity Week 7 Database Application Development and Security Applications Week 8 Schema Refinement and Normalisation Week 9 Transaction Management Week 11 Storage and Indexing Internals Week 12 Query Processing and Evaluation 7 Some advice on how to approach the final exam Useful tips: ▪ Quickly read thru all the questions. ▪ Rank questions from easiest to most difficult. ▪ Always start with the ones that are the easiest, second easiest, etc. ▪ Keep track on how much time you are spending on each question vs how much it is worth in terms of marks. ▪ If you feel you misjudged a question level of ease, go to the next question. ▪ Suggest that you earmark at least 10 minutes at the end of the exam to check all your answers. Make sure you read the questions again. ▪ Above all, do not panic! Usually, panic is much worse than not knowing something in the exam! ▪ Get some rest before the exam! ▪ All the best! 8 Which is the correct model? “Each chef prepares at most one dish. Every dish must be prepared by at least one chef.” a. Chef prepares Dish b. Chef prepares Dish c. Chef prepares Dish d. Chef prepares Dish 9 ER diagram design The organizers of an international conference need to keep track of a large collection of workshops associated with the event. For this, the following information needs to be recorded. - Each workshop has a name and happens on a particular date or dates, as some workshops last more than one day. They also store the name of the person who chairs the workshop each day. - There are several participants, each of whom must sign up for one or more workshops. - For each participant, it is important to record their name, email address, and the workshops which they wish to attend. - There are several meeting rooms at the conference venue, each of a fixed capacity. Meeting rooms are identified by a floor and room number. - Every workshop needs an allocated meeting room; where a workshop lasts for more than one day, it will use the same room on all the days. 10 ER diagram design - Each workshop has a name and happens on a particular date or dates, as some workshops last more than one day. They also store the name of the person who chairs the workshop each day. - There are several participants, each of whom must sign up for one or more workshops. - For each participant, it is important to record their name, email address, and the workshops which they wish to attend. - There are several meeting rooms at the conference venue, each of a fixed capacity. Meeting rooms are identified by a floor and room number. - Every workshop needs an allocated meeting room; where a workshop lasts for more than one day, it will use the same room on all the days. chairperson 11 Mapping Relationship Types with Key Constraints pid tid Player PlaysIn Team name tname › Looking at each relationship side: - 1 player plays in at most 1 team - 1 team can have 0 to Many players Player Team pid name tid tid tname 12 Mapping Relationship Types with Key Constraints lid bid Library contains Book name title › Looking at each relationship side: - 1 library contains 0 to many books - 1 book can be found in 0 to many libraries Library Contains Book lid name lid bid bid title 13 Creating Schema Diagram Create the schema diagram equivalent to the following ER diagram Creating Schema Diagram Create the schema diagram equivalent to the following ER diagram Employee(employee_number, employeeName, salary) PK = employee_number Customer(customer_number, customerName, registrationDate) PK = customer_number Product(product_number, productName, price, quantity_in_stock) PK = product_number Order(customer_number, order_number, date_receipt, expected_ship_date, actual_ship_date, employee_number) PK = (customer_number, order_number) FK = customer_number --> Customer employee_number --> Employee Contains(customer_number, order_number, product_number, quantity) PK = (customer_number, order_number, product_number) FK = (customer_number, order_number) --> Order product_number --> Product SQL Student sid name gender country CREATE TABLE Student 1001 Ian M AUS ( 1002 Ha Tschi F ROK sid INTEGER PRIMARY KEY, name VARCHAR(20), 1003 Grant M AUS gender CHAR CHECK(gender IN (‘F’,’M’)), 1004 Simon M GBR country CHAR(3) 1005 Jesse F CHN ); 1006 Franzisca F GER › Modify the table to set the name attribute as Not Null ALTER TABLE Student ALTER COLUMN name SET NOT NULL; › Write a SQL statement to change the country of Simon from GBR to USA UPDATE Student SET country = ‘USA’ WHERE name = ‘Simon’ › Write a SQL statement to delete all records from Student table DELETE FROM Student; › Write a SQL statement to delete Student table DROP TABLE Student; 16 Relational Algebra - List the names of all students enrolled in ‘DBMS’ - πname (σ title=‘DBMS’ ((Student ⋈ Enrolled) ⋈ UnitOfStudy)) - List the id of students who are not enrolled in any unit of study πsid (Student) - πsid (Enrolled) Student(sid, name, gender, country) Enrolled(sid, uos_code, semester) UnitOfStudy(uos_code, title, points) Relational Algebra Suppliers(sid, sname, address) Product(pid, pname, colour) Catalog(sid, pid, price) › Find the names of all suppliers who supply a product that is red or green. 𝜋𝑠𝑛𝑎𝑚𝑒 ((𝜋𝑠𝑖𝑑 (𝜎𝑐𝑜𝑙𝑜𝑢𝑟=′𝑟𝑒𝑑′ ⋁𝑐𝑜𝑙𝑜𝑢𝑟=′𝑔𝑟𝑒𝑒𝑛′ (𝑃𝑟𝑜𝑑𝑢𝑐𝑡) ⋈ 𝐶𝑎𝑡𝑎𝑙𝑜𝑔 )) ⋈ 𝑆𝑢𝑝𝑝𝑙𝑖𝑒𝑟𝑠) Employees(employeeID, name, age, salary) Supervises(bossID, employeeID) › Find the names and salaries of all bosses who have an employee earning more than 1000 𝜋𝑛𝑎𝑚𝑒,𝑠𝑎𝑙𝑎𝑟𝑦 (𝜎𝑏𝑜𝑠𝑠𝐼𝐷=𝑒𝑚𝑝𝑙𝑜𝑦𝑒𝑒𝐼𝐷 (𝜋𝑏𝑜𝑠𝑠𝐼𝐷 𝜎𝑠𝑎𝑙𝑎𝑟𝑦>1000 𝐸𝑚𝑝𝑙𝑜𝑦𝑒𝑒𝑠 ⋈ 𝑆𝑢𝑝𝑒𝑟𝑣𝑖𝑠𝑒𝑠 × 𝐸𝑚𝑝𝑙𝑜𝑦𝑒𝑒𝑠) 18 SQL › Find the id of all students who are enrolled in both ‘COMP5138’ and ‘COMP5318’. SELECT sid FROM Enrolled WHERE uos_code=‘COMP5138’ INTERSECT SELECT sid FROM Enrolled WHERE uos_code=‘COMP5318’ › Find the names of students who are enrolled in both ‘COMP5138’ and ‘COMP5318’ SELECT name FROM Student WHERE sid IN ( SELECT sid FROM Enrolled WHERE uos_code=‘COMP5138’ INTERSECT ) SELECT sid FROM Enrolled WHERE uos_code=‘COMP5318’ Student(sid, name, gender, country) Enrolled(sid, uos_code, semester) UnitOfStudy(uos_code, title, points) SQL › Find the name of the students who are enrolled in the unit of study that has the highest credit points Approach 1: SELECT name FROM Student WHERE sid IN ( SELECT sid FROM Enrolled WHERE uos_code IN ( SELECT uos_code FROM UnitOfStudy WHERE points = ( SELECT max(points) FROM UnitOfStudy ) ) ) Approach 2: SELECT name FROM Student NATURAL JOIN Enrolled NATURAL JOIN UnitOfStudy WHERE points = ( SELECT max(points) FROM UnitOfStudy) Student(sid, name, gender, country) Enrolled(sid, uos_code, semester) UnitOfStudy(uos_code, title, points) SQL › Find the number of students in each country, except Australia (‘AUS’). Only include countries that have equal or more students than Australia. Show the output in sorted order of country name. SELECT country, COUNT(sid) FROM Student WHERE country 'AUS' GROUP BY Country HAVING COUNT(sid) >= (SELECT COUNT(sid) FROM Student WHERE country = 'AUS') ORDER BY country Student(sid, name, gender, country) Enrolled(sid, uos_code, semester) UnitOfStudy(uos_code, title, points) 21 Short 5mn break: Please complete the Unit of Study Survey (USS)! Important note: When you complete your Survey, this will give you an entry into the prize draw for a range of JB HiFi Giftcards totalling $2500. Unit of Study Survey (USS) now open! 23 DDL Film Actor filmID title releaseYear actorID actorName nationality 101 No time to die 2021 0 No Actor null 102 Titanic 1998 981 Daniel UK 205 Baby Day out 2000 965 Kate USA 901 Lily Australia FilmActor filmID actorID 101 981 102 965 205 901 What will be the records of Film and FilmActor table after executing the following query? DELETE FROM Film WHERE filmID = 101; Film FilmActor filmID title releaseYear filmID actorID 102 Titanic 1998 102 965 205 Baby Day out 2000 205 901 24 DDL Film Actor filmID title releaseYear actorID actorName nationality 101 No time to die 2021 0 No Actor null 102 Titanic 1998 981 Daniel UK 205 Baby Day out 2000 965 Kate USA 901 Lily Australia FilmActor filmID actorID 101 981 102 965 205 901 What will be the records of Actor and FilmActor table after executing the following query? UPDATE Actor SET actorID = 999 WHERE actorID = 981; Actor FilmActor actorID actorName nationality filmID actorID 0 No Actor null 101 0 999 Daniel UK 102 965 965 Kate USA 205 901 901 Lily Australia 25 DDL Film Actor filmID title releaseYear actorID actorName nationality 101 No time to die 2021 0 No Actor null 102 Titanic 1998 981 Daniel UK 205 Baby Day out 2000 965 Kate USA 901 Lily Australia FilmActor filmID actorID 101 981 102 965 205 901 › Create an assertion for the following: - An actor cannot take part in more than 3 movies in any given year CREATE ASSERTION ActingConstraint CHECK ( NOT EXISTS ( SELECT 1 FROM Film NATURAL JOIN FilmActor GROUP BY actorID, releaseYear HAVING COUNT(filmID) > 3 ) ); 26 Review › Consider the following relational schema: Emp(eid, ename, exp, salary) Works(eid, did, since) Dept(did, budget, managerid) Define an assertion that will ensure that all managers have experience > 5. › CREATE ASSERTION managerExp CHECK ( NOT EXISTS (SELECT exp FROM Emp, Dept WHERE eid = managerid AND exp T2. Second conflict is between W2(y) and R1(y). Because of this conflict we need to put T2 before T1 i.e T2 --->T1 Since we have a cycle between T1 and T2, that’s why this schedule is NOT conflict serializable. 30 Review Determine whether the following schedule is conflict serializable; justify your answer. If it is conflict serializable, please give a conflict equivalent serial schedule. › R1(x),W2(y),R1(z),R3(x),W2(x),R2(y) T1 T2 T3 There are two conflicts in this case. First conflict is between R1(x) and W2(x). Because of this conflict we need to put T1 before T2 i.e T1 --->T2. Second conflict is between R3(x) and W2(x). Because of this conflict we need to put T3 before T2 i.e T3 --->T2 Since there is no cycle, so this schedule is conflict serializable. According to the condition, T1 and T3 must be performed before T2. So, either of T1, T3, T2 OR T3, T1, T2 is a conflict equivalent serial schedule in this case. 31 Review › Given the following schedule S: W1(x), R1(x), W3(z), R2(x), R2(y), R4(z), R3(x), W3(y) Check whether this schedule is conflict serializable. If the schedule is conflict equivalent to a serial schedule, choose the equivalent serial order. T1 T2 T3 T4 There are 4 conflicts in this case. First conflict is between W1(x) and R2(x). Because of this conflict we need to put T1 before T2 i.e T1 --->T2. Second conflict is between W1(x) and R3(x). Because of this conflict we need to put T1 before T3 i.e T1 --->T3 Third conflict is between W3(z) and R4(z). Because of this conflict we need to put T3 before T4 i.e T3 --->T4 Fourth conflict is between R2(y) and W3(y). Because of this conflict we need to put T2 before T3 i.e T2 --->T3 Since there is no cycle, so this schedule is conflict serializable. The equivalent serial order is T1, T2, T3, T4. 32 Review Consider a database with a table Results(StudentId, UnitCode, T1: Begin Transaction Grade) that contains the following tuples SELECT Grade FROM Results T1: WHERE StudentId = '3245' AND UnitCode = ‘COMP2129' (Row) StudentId UnitCode Grade T2: Begin Transaction A 3245 INFO2120 57 B 3245 COMP2129 82 SELECT UnitCode, Grade FROM Results T2: WHERE StudentId = '3245' C 4290 INFO2120 68 UPDATE Results SET Grade = Grade + 5 D 4290 MATH2002 56 T2: WHERE StudentId = '4290' SELECT UnitCode, Grade FROM Results T1: WHERE StudentId = '3245' The steps in Figure 1 can be treated for the purpose of SELECT Sum(Grade) FROM Results transaction management as an execution schedule consisting of T1: WHERE UnitCode = 'INFO2120' read (r) and write (w) operations by either transaction 1 or 2 upon different objects - in this case we shall assume that the T1: COMMIT granularity of these objects is row-level, with each row denoted SELECT Sum(Grade) FROM Results by the letter given in the table above. Example: r1(A) is the T2: WHERE UnitCode = 'INFO2120' same as T1: read (B) T2: COMMIT Which one of the following execution schedule matches the steps in Figure 1? Figure 1 1. r1(B),r2(A),r2(B),r2(C),r2(D),r1(A),r1(B),r1(A),r1(C),r2(A),r2(C) 2. r1(B),r2(A),r2(B),w2(C),w2(D),r1(A),r1(B),r1(A),r1(C),r2(A),r2(C) 3. r1(B),r2(A),r2(B),r2(C),w2(C),r2(D),w2(D),r1(A),r1(B),r1(A),r1(C),r2(A),r2(C) 33 Review › Consider the following instance of a relation. A B C D 1 x a 10 2 y b 20 3 z b 20 1 z c 30 2 y b 20 › Which of the following functional dependencies are valid according to the data in this relation? 1. AB -> C 2. C -> D 3. A -> B 4. ABC -> D 5. B -> C 6. D -> C 35 Review R(A, B, C, G, H, I) › Compute the attribute closure (AG)+ F={ 1. result = AG A→B 2. result = ABG (A → B) A→C 3. result = ABCG (A → C) CG → H 4. result = ABCGH (CG → H) 5. result = ABCGHI (CG → I) CG → I B→H › First, Is (AG) a superkey? 1. YES! The closure (AG)+ = R (i.e., all attributes in R) } 2. Is (AG) minimal (i.e., is any subset of (AG) a superkey?)? It is minimal! Proof: Is (AG) a candidate key? - (A)+ = ABCH ≠ R - (G)+ = G ≠ R Therefore AG is a candidate key because it is minimal. 36 Review › Consider a relation R(A, B, C, D, E, F) with the following functional dependencies: A -> BDF BC -> DEF D -> CE. › Is AB a candidate key ? › Compute the closure (AB)+ 1. result = AB 2. result = ABDF (A → BDF) = ABCDEF (D → CE) › AB is a superkey because its closure is R - Compute the closure of A, i.e., A+ 1. result = A 2. result = ABDF (A → BDF) = ABCDEF (D → CE) › AB is not a candidate key because a subset of (AB), i.e. A, is a key. 37 Review Work on a project is tracked with the following relation: WorksOn(EmpID, ProjID, start, finish, manager) The following FDs hold over this relation: EmpID -> manager (Each employee can only have one manager) EmpID, ProjID -> start, finish (Each employee can only work on a project once) ProjID, start -> EmpID (Only one employee can start work on the project at a time) Which of the following are candidate keys for the relation? 1. ProjID, start 2. EmpID, ProjID 3. start, finish, manager 4. EmpID, ProjID, start 38 Review Based on the data in the relation, is this a valid MVD? UoS Textbook Tutor UoS ↠ Tutor COMP9120 Silberschatz Ying Z Note that according to the values in the COMP9120 Widom Ying Z relation, the relationship between the UoS COMP9120 Silberschatz Mohammad P and Tutor is independent from the relationship between UoS and Textbook. COMP9120 Widom Mohammad P This means that the above MVD is valid. COMP9120 Silberschatz Alan F This also implies that the Tutor of a UoS is selected independently by the school. COMP9120 Widom Alan F Assume a new Tutor, Lijun C is added for the COMP5110 Silberschatz Ying Z UoS COMP9120. What must happen to COMP5110 Silberschatz Mohammad P maintain this independence (i.e., MVD)? COMP9120 Widom Lijun C - Add one row for each different textbook COMP9120 Silberschatz Lijun C with Tutor Lijun C of that UoS. 39 Review Assume the only key to the following relation is UoS Textbook Tutor the set (UoS, Textbook, Tutor). COMP9120 Silberschatz Ying Z Is this relation in 4NF? COMP9120 Widom Ying Z COMP9120 Silberschatz Mohammad P No: There are two non-trivial multivalued COMP9120 Widom Mohammad P dependencies COMP9120 Silberschatz Alan F UoS ↠ Textbook and UoS ↠ Tutor COMP9120 Widom Alan F and UoS is not a superkey. COMP5110 Silberschatz Ying Z Solution: Split the above relation into two COMP5110 Silberschatz Mohammad P relations: Now both relations are UoS Tutor In 4NF! Why? UoS Textbook MVDs are trivial now! 40 Review › Give an example of a set of FDs for the relation schema R(A,B,C,D) with candidate key AB, so that R is not in 2NF. 2NF: There cannot be a functional dependency between a subset of a key to non-key attributes. This is applicable only when the key consists of more than one attribute. An example of such an FD is: B→C The FD B → C violates 2NF since: B is a proper subset of the key AB C is not part of a key 41 Review › Give an example of a set of FDs for the relation schema R(A,B,C,D) with candidate key AB under which R is in 2NF but not in 3NF. Third Normal Form (3NF) Formal Definition: a relation R is in 3NF if for each dependency X→ Y in F+, at least one of the following holds: X → Y is a trivial FD (Y ⊆ X) An example of such an FD is: X is a superkey for R C→D Y ⊂ (is a proper subset of) a candidate key for R The FD: C → D violates 3NF but complies with 2NF since: C → D is not a trivial FD C is not a superkey D is not part of some key for R 42 Review › Consider a relation R with attributes ABCDE and the following FDs: A → BC, BC → E, and E → DA. Is R in BCNF? If not, give a lossless join decomposition of R. The schema R has keys A, E and BC. Why? Use attribute closure to find keys. It follows that R is in BCNF. › Let S be a relation with attributes ABCDE and the following FDs are given: A → CE, D → B, and E → DA. Is S in BCNF? If not, give a lossless join decomposition of R. The schema S has keys A and E. Use attribute closure to find keys. It follows that S is not in BCNF because of the FD D → B. Therefore, decompose S into S1 = (D,B) and S2 = (A, C, D, E). It is lossless join decomposition because the intersection of S1 and S2 is a key to S1. 43 Review Is the following relation in BCNF? If not, give a lossless-join decomposition. contracts (contractID, supplierID, projectID, deptID, itemID, quantity, value) Functional dependencies: contractID → supplierID, projectID, deptID, itemID, quantity, value supplierID, deptID → itemID projectID → supplierID Solution: Note that contractID is the key. The above relation is not in BCNF. Because the LHS is not a key in the 2nd and 3rd FDs. Therefore, looking at supplierID, deptID → itemID, we can divide contracts relation into R1 = (supplierID, deptID, itemID) and R2 = (supplierID, deptID, contractID, projectID, quantity, value) R1 is in BCNF but not R2. Then looking at projectID → supplierID, we can divide R2 into R3 = (projectID , supplierID) and R4 = (projectID, deptID, contractID, quantity, value) Therefore, R1, R3 and R4 is the lossless-join decomposition of contracts relation. Note the intersection of the above relations is a key to one of the relations, i.e., first, R1, and then R3. 44 Review Assume that there are 1,000,000 records in a relation R and each record is 200 bytes long. Each page is 4K bytes, of which 250 bytes are reserved for header and array of record pointers. Assume pages are 90% full on average. › How many records can we store in each page? › How many pages are required to store R? Solution: Empty space in each page is (4*1024 – 250) = 3846 bytes Number of records per page = floor(3846 / 200) = 19 records On average, each page contains floor(19 * 90%) = 17 records Number of pages required to store the table = ceil(1,000,000/17) = 58,824 pages 45 Join Consider two tables employee(eid, ename, did) and department(did, dname). There are 10,000 tuples in the employee table and 1,000 tuples in the department table. It requires 500 pages and 100 pages to store the records of employee and department tables, respectively. › Calculate the cost of nested loop join and block-nested loop join of these two tables. The estimated cost of nested loop join employee as outer table: 500+ 10000 * 100 = 1,000,500 disk I/Os department as outer table: 100 + 1000 500 = 500,100 disk I/Os The estimated cost of block nested loop join employee as outer table: 500 + 500 * 100 = 50,500 disk I/Os department as outer table: 100 + 100 500 = 50,100 disk I/Os 46 Query Processing › True/False? - Parser takes a query-evaluation plan, executes that plan, and returns the answers. False - SQL systems remove duplicates even if the keyword DISTINCT is not specified in a query. False - Pipelined evaluation is cheaper than materialization True - External merge-sort works even if the entire table does not fit in the main memory True - Natural join is a special case of Equi-join True 47 Finally: Statistics of Student engagement in COMP9120 Number of Number of Number of views Student Participation questions/posts answers/comments Per week, on Ed ~45 questions 556 1351 167k 692 ~110 answers/comments Top 3 Student Contributors Thank you! Top 3 Staff Contributors - Danu Gurusinghe - Abbey Lin - Peisong Ma - Athman Bouguettaya - Damon Lai - Iwan Budiman Resources Average marks - Lecture: slides, demos, recordings - Assignment1 → 62% - Tutorial: sheets, solutions - Quiz → 53.08% - Practice SQL resources, practice exam - Assignment2 → being marked! - PostgreSQL/Python/Java/pgdmin - Final Exam → Best of luck! 48 That’s all for me.. Great pleasure to have had you in my class! All the best in your final exam! 49