This is intended to give you a sense of what I think is important from the course so far, and what I will be thinking of when creating the exam.

Here are some disclaimers. This is not a contract. I may have inadvertently left something off this list that ends up in an exam question. I make no guarantees that the exam will be 100% limited to items listed below. Moreover, I will not be able to test all of this material given the time limitations of the exam. I will have to pick and choose some subset of it.

You are permitted one 8.5 x 11 sheet of paper with notes (both sides) for use as a reference during the exam.

Here are the specifics: Students should be able to...

Disk management: Demonstrate understanding of how disks store and transfer blocks/pages of data by being able to assess and make cost estimates for algorithms based on on disk and memory usage.

Buffer pool manager: Be able to explain the need for a buffer pool manager vs. what OS does with specific situations. Be able to describe if a buffer pool helps or doesn't help in specific situations. Be able to describe various replacement algorithms (LRU, MRU, clock) and predict which pages would be replaced under particular access patterns. Be able to describe a pattern that causes bad things for an arbitrary replacement algorithm. Be able to explain and/or utilize why and how dirty bit and pinning is used, and how pinning differs from locking.

Page organization: Be able to describe a variety of page organizations with fixed and variable length records, and be able to explain tradeoffs by using each. Be able to describe how free space is handled on an individual page, again being able to explain tradeoffs.

Programming techniques: Be able to use array and struct libraries in Python to put character and integer data into larger arrays and extract them back out again. Be able to do the types of manipulations that you needed to do in the assignments.

Relational model: Be able to define and/or identify aspects of the relational model such as relations, candidate keys, primary keys, superkeys, foreign keys.

Relational algebra: Be able to write queries as specified in relational algebra using selection, projection, set operators, cross product, join, rename, assignment, and aggregation. Be able to interpret relational algebra queries provided.

SQL: Be able to produce or interpret the results of SELECT / FROM / WHERE / GROUP BY / ORDER BY / HAVING SQL / OUTER JOIN queries. Be able to predict the output of queries where knowledge of the cross-product / selection / projection definition is likely to be useful. Be able to create and use tables with primary keys, foreign keys, integers, reals, and text. Be able to interpret and construct queries with subqueries. Use and interpret NULL correctly.

If we get there in time, ask me on Monday: Entity-Relationship model: Be able to construct an E-R diagram for a specific scenario provided. Be able to appropriately use each aspect of the E-R model (entity sets, relationship sets, keys, key constraints, participation constraints, weak entities, aggregation, ternary relationships, ISA, 1-to-many vs. many-to-many vs. 1-to-1 relationships). Be able to convert an E-R diagram to the relational model. Consider tradeoffs in different relational implementations of a particular E-R design.