Database Management Systems – Lab 3

  • assigned: weeks 7/8; due: weeks 11/12

Prepare the following scenarios for your database:

  • create a stored procedure that inserts data in tables that are in a m:n relationship; if one insert fails, all the operations performed by the procedure must be rolled back (grade 3);
  • create a stored procedure that inserts data in tables that are in a m:n relationship; if an insert fails, try to recover as much as possible from the entire operation: for example, if the user wants to add a book and its authors, succeeds creating the authors, but fails with the book, the authors should remain in the database (grade 5);
  • reproduce the following concurrency issues under pessimistic isolation levels: dirty reads, non-repeatable reads, phantom reads, and a deadlock (4 different scenarios); you can use stored procedures and / or stand-alone queries; find solutions to solve / workaround the concurrency issues (grade 9);
  • reproduce the update conflict under an optimistic isolation level (grade 10).

Obs.

* Prepare test cases covering both the happy scenarios and the ones with errors (this applies to stored procedures). Be prepared to explain all your scenarios and implementations.

* Don’t use IDs as input parameters for your stored procedures. Validate all parameters (try to use functions when needed).

* Setup a logging system to track executed actions for all scenarios.

Recommendation: use TRY…CATCH to handle errors.

References:
– lecture / seminar notes
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-transaction-isolation-level-transact-sql
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/transactions-transact-sql