IT420: Database Management and Organization Wrap-up 28 April 2006 Adina Crăiniceanu www.cs.usna.edu/~adina 1 Final Exam Monday, 1330, Michelson 223 Comprehensive Closed books / closed notes One double-sided page with notes NO duplicates Kroenke, Database Processing 2 Topics Not Covered SQL Cursors ODBC Kroenke, Database Processing 3 SQL Cursor Problem: SQL SELECT returns multiple rows Application programs (PHP,C, C#,…) need to process the rows, one at a time Solution: Establish a cursor, a pointer to first row in the result set Assign values in that row to variables Move the pointer to next row Kroenke, Database Processing 4 Process Rows Example - PHP <?php //query $query = "select title from songs where title like '%Home%'"; //process results $results = mysql_query($query) or die("could not retrieve rows"); while ($row = mysql_fetch_array($results)){ echo 'Title: '.$row[title].' <br>'; } ?> Kroenke, Database Processing 5 SQL Cursor Example – SQL Server //declare cursor DECLARE MyCursor CURSOR FOR SELECT title FROM songs WHERE title like '%Home% //process rows OPEN MyCursor FETCH NEXT FROM MyCursor INTO @title WHILE @@FETCH_STATUS = 0 BEGIN print @title FETCH NEXT FROM MyCursor INTO @title END //close and free cursor CLOSE MyCursor DEALLOCATE MyCursor Kroenke, Database Processing 6 Standards for Accessing DBMS OBDC (Open Database Connectivity) is the early standard for relational databases. OLE DB is Microsoft’s object-oriented interface for relational and other databases. ADO (Active Data Objects) is Microsoft’s standard providing easier access to OLE DB data for the non-object-oriented programmer. Kroenke, Database Processing 7 The Web Server Data Environment A Web server needs to publish applications that involve different data types. Kroenke, Database Processing 8 The Role of the ODBC Standard Kroenke, Database Processing 9 ODBC Architecture Kroenke, Database Processing 10 Example Code…Familiar?? <?php $connect = odbc_connect("mydbs", “root", ""); $query = "SELECT name, surname FROM users"; $result = odbc_exec($connect, $query); while(odbc_fetch_row($result)){ $name = odbc_result($result, 1); $surname = odbc_result($result, 2); print("$name $surname\n"); } // close the connection odbc_close($connect); ?> Kroenke, Database Processing 11 Final Exam Main Topics ER Model Relational Model ER to Relational Normalization SQL SQL Views SQL Triggers SQL Stored Procedures PHP/MySQL Database Administration Storage and Indexing XML Kroenke, Database Processing 12 ER Model and Relational Model ER: Entities identifiers Relationships cardinality Relational model Tables Constraints Kroenke, Database Processing 13 ER to Relational Transform entities in tables Transform relationships using foreign keys Specify logic for enforcing minimum cardinalities Kroenke, Database Processing 14 Class Exercise: Transform ER model into Relational Model CLUB FAALicense AIRCRAFT FAA number Address Phone Min Cardinality:1 ModelNumber Color OWNER Name Phone Min Cardinality:1 Address MEMBER Name Phone Rating TotalHours FLIGHT FlightID RentalDate ReturnDate TimeFlown Kroenke, Database Processing 15 Relational Model CLUB FAALicense: CHAR(18) NOT NULL AIRCRAFT FAA number: CHAR(18) NOT NULL Address: CHAR(18) Phone: CHAR(18) ModelNumber: CHAR(18) NOT NULL (FK) FAALicense: CHAR(18) (FK) Color: Text(20) OWNER Name: CHAR(18) NOT NULL Phone: CHAR(18) NOT NULL Address: CHAR(18) NOT NULL OWNERSHIP FAA number: CHAR(18) NOT NULL (FK) Name: CHAR(18) NOT NULL (FK) Phone: CHAR(18) NOT NULL (FK) MEMBER Name: CHAR(18) NOT NULL Phone: CHAR(18) NOT NULL Rating: Long Integer TotalHours: Long Integer FAALicense: CHAR(18) (FK) FLIGHT FlightID: CHAR(18) NOT NULL RentalDate: CHAR(18) ReturnDate: CHAR(18) Name: CHAR(18) NOT NULL (FK) Phone: CHAR(18) NOT NULL (FK) TimeFlown: CHAR(18) FAA number: CHAR(18) NOT NULL (FK) Kroenke, Database Processing Relationship lines Useful? 16 Table blueprints CLUB OWNER FAALicense: CHAR(18) NOT NULL Name: CHAR(18) NOT NULL Phone: CHAR(18) NOT NULL Address: CHAR(18) Phone: CHAR(18) Address: CHAR(18) NOT NULL MEMBER OWNERSHIP Name: CHAR(18) NOT NULL Phone: CHAR(18) NOT NULL FAA number: CHAR(18) NOT NULL (FK) Name: CHAR(18) NOT NULL (FK) Phone: CHAR(18) NOT NULL (FK) Rating: Long Integer TotalHours: Long Integer FAALicense: CHAR(18) (FK) AIRCRAFT FLIGHT FAA number: CHAR(18) NOT NULL FlightID: CHAR(18) NOT NULL ModelNumber: CHAR(18) NOT NULL (FK) FAALicense: CHAR(18) (FK) Color: Text(20) RentalDate: CHAR(18) ReturnDate: CHAR(18) Name: CHAR(18) NOT NULL (FK) Phone: CHAR(18) NOT NULL (FK) TimeFlown: CHAR(18) FAA number: CHAR(18) NOT NULL (FK) Kroenke, Database Processing 17 Normalization Kroenke, Database Processing 18 Data Redundancy Number LastName FirstName Email Rating Wage 190 Smith John jsmith@usna.edu 4 25 673 Doe Jane jdoe@usna.edu 7 35 312 Doe Bob bred@usna.edu 8 40 152 Johnson Matt mat@usna.edu 7 35 Application constraint: All employees with same rating have the same wage (Rating Wage) Problems due to data redundancy? Kroenke, Database Processing 19 Modification Anomalies Deletion Anomaly: What if we delete all employees with rating 8? Lose wage info Insertion Anomaly: What if we need wage for rating 12 with no employee having that rating? Cannot insert wage without employee Update Anomaly: What if we change the wage for rating 7 to be 37? Could change for only some rows, not all Kroenke, Database Processing 20 Update Anomalies The EMPLOYEE table before and after an incorrect update operation on Wage for Rating = 7 Number LastName FirstName Email Rating Wage 190 Smith John jsmith@usna.edu 4 25 673 Doe Jane jdoe@usna.edu 7 35 312 Doe Bob bred@usna.edu 8 40 152 Johnson Matt mat@usna.edu 7 35 FirstName Email Rating Wage Number LastName 190 Smith John jsmith@usna.edu 4 25 673 Doe Jane jdoe@usna.edu 7 37 312 Doe Bob bred@usna.edu 8 40 152 Johnson Matt mat@usna.edu 7 35 Kroenke, Database Processing 21 Table decomposition Number LastName FirstName Email Rating Wage 190 Smith John jsmith@usna.edu 4 25 673 Doe Jane jdoe@usna.edu 7 35 312 Doe Bob bred@usna.edu 8 40 152 Johnson Matt mat@usna.edu 7 35 Number LastName FirstName Email Rating Rating Wage 4 25 190 Smith John jsmith@usna.edu 4 673 Doe Jane jdoe@usna.edu 7 7 35 312 Doe Bob bred@usna.edu 8 8 40 152 Johnson Matt mat@usna.edu 7 Kroenke, Database Processing 22 Functional Dependency (FD) A functional dependency: the value of one (a set of) attribute(s) determines the value of a second (set of) attribute(s): Alpha MIDNName Alpha (MIDNName, MIDNClass) (NbHours, HourlyPrice)Charge The attribute(s) on the left side of the functional dependency is called the determinant Kroenke, Database Processing 23 Functional Dependencies in the SKU_DATA Table Assuming data is representative, determine the FD Kroenke, Database Processing 24 Functional Dependencies in the SKU_DATA Table SKU (SKU_Description, Department, Buyer) SKU_Description (SKU, Department, Buyer) Buyer Department Kroenke, Database Processing 25 Key A set of columns is a key for a relation if : 1. a) No two distinct rows can have same values in all key columns or equivalently b) determines all of the other columns in a relation 2. This is not true for any subset of the key Part 2 false? A superkey Candidate key = key Primary key Alternate key Kroenke, Database Processing 26 Normal Forms 1NF – A table that qualifies as a relation is in 1NF 2NF – A relation is in 2NF if all of its nonkey attributes are dependent on all of the primary key 3NF – A relation is in 3NF if it is in 2NF and every determinant is a superkey Boyce-Codd Normal Form (BCNF) – A relation is in BCNF if every determinant is a (candidate) key “I swear to construct my tables so that all nonkey columns are dependent on the key, the whole key and nothing but the key, so help me Codd.” Kroenke, Database Processing 27 Eliminating Modification Anomalies from Functional Dependencies in Relations Put all relations into Boyce-Codd Normal Form (BCNF): Kroenke, Database Processing 28 Putting a Relation into BCNF: SKU_DATA SKU_DATA (SKU, SKU_Description, Department, Buyer) SKU (SKU_Description, Department, Buyer) SKU_Description (SKU, Department, Buyer) Buyer Department SKU_DATA (SKU, SKU_Description, Buyer) BUYER (Buyer, Department) Where BUYER.Buyer must exist in SKU_DATA.Buyer Kroenke, Database Processing 29 Putting a Relation into BCNF: New Relations Kroenke, Database Processing 30 Database Administration Concurrency Control Security Recovery Kroenke, Database Processing 31 Concurrency Control Concurrency control: ensure that one user’s work does not inappropriately influence another user’s work No single concurrency control technique is ideal for all circumstances Trade-offs need to be made between level of protection and throughput Kroenke, Database Processing 32 Atomic Transactions A transaction, or logical unit of work (LUW), is a series of actions taken against the database that occurs as an atomic unit Either all actions in a transaction occur - COMMIT Or none of them do - ABORT Kroenke, Database Processing 33 Concurrent Transaction Concurrent transactions: transactions that appear to users as they are being processed at the same time In reality, CPU can execute only one instruction at a time Transactions are interleaved Concurrency problems Lost updates Inconsistent reads Kroenke, Database Processing 34 Lost Update Problem T1: R(item) W(item) T2: R(item) Commit W(item) Commit Kroenke, Database Processing 35 Inconsistent-Read Problem Dirty reads – read uncommitted data T1: R(A), W(A), R(B), W(B), Abort T2: R(A), W(A), Commit Unrepeatable reads T1: R(A), R(A), W(A), Commit T2: R(A), W(A), Commit Kroenke, Database Processing 36 Serializable Transactions Serializable transactions: Run concurrently Results like when they run separately Strict two-phase locking – locking technique to achieve serializability Kroenke, Database Processing 37 Deadlock Deadlock: two transactions are each waiting on a resource that the other transaction holds Preventing deadlock Allow users to issue all lock requests at one time Require all application programs to lock resources in the same order Breaking deadlock Almost every DBMS has algorithms for detecting deadlock When deadlock occurs, DBMS aborts one of the transactions and rollbacks partially completed work Kroenke, Database Processing 38 Optimistic versus Pessimistic Locking Optimistic locking assumes that no transaction conflict will occur: DBMS processes a transaction; checks whether conflict occurred: If not, the transaction is finished If yes, the transaction is repeated until there is no conflict Pessimistic locking assumes that conflict will occur: Locks are issued before a transaction is processed, and then the locks are released Kroenke, Database Processing 39 Declaring Lock Characteristics Most application programs do not explicitly declare locks due to its complication Mark transaction boundaries and declare locking behavior they want the DBMS to use Transaction boundary markers: BEGIN, COMMIT, and ROLLBACK TRANSACTION Advantage If the locking behavior needs to be changed, only the lock declaration need be changed, not the application program Kroenke, Database Processing 40 ACID Transactions Transaction properties: Atomic - all or nothing Consistent Isolated Durable – changes made by commited transactions are permanent Kroenke, Database Processing 41 Consistency Consistency means either statement level or transaction level consistency Statement level consistency: each statement independently processes rows consistently Transaction level consistency: all rows impacted by either of the SQL statements are protected from changes during the entire transaction With transaction level consistency, a transaction may not see its own changes Kroenke, Database Processing 42 Isolation : Inconsistent-Read Problem Dirty reads – read uncommitted data T1: R(A), W(A), T2: R(A), W(A), Commit R(B), W(B), Abort Unrepeatable reads T1: R(A), R(A), W(A), Commit T2: R(A), W(A), Commit Phantom reads Re-read data and find new rows Kroenke, Database Processing 43 Transaction Isolation Level Kroenke, Database Processing 44 Indexing Kroenke, Database Processing 45 Hash Index Constant search time Equality queries only Kroenke, Database Processing 46 B+ Tree Index ~logdN search time d – fan-out (~150) N – number of data entries Supports range queries Kroenke, Database Processing 47 Use of Indexes To Retrieve Data Kroenke, Database Processing 48 Class Exercise What index would you construct? 1. SELECT * FROM Mids WHERE Company=02 2. SELECT CourseID, Count(*) FROM StudentsEnroll WHERE Company = 02 GROUP BY CourseID Kroenke, Database Processing 49 SOFs www.sof.cs.usna.edu Choose as password a random number between 1 and 100 If cannot login, try another number Kroenke, Database Processing 50