ABC Markets sell products to customers. The relational diagram shown in the attached Figure (see Student Instructions) represents the main entities for ABC’s database. Note the following important characteristics:
A customer may make many purchases, each one represented by an invoice.
The CUS_BALANCE is updated with each credit purchase or payment and represents the amount the customer owes.
The CUS_BALANCE is increased (+) with every credit purchase and decreased (–) with every customer payment.
The date of last purchase is updated with each new purchase made by the customer.
The date of last payment is updated with each new payment made by the customer.
An invoice represents a product purchase by a customer.
An INVOICE can have many invoice LINEs, one for each product purchased.
The INV_TOTAL represents the total cost of the invoice, including taxes.
The INV_TERMS can be “30,” “60,” or “90” (representing the number of days of credit) or “CASH,” “CHECK,” or “CC.”
The invoice status can be “OPEN,” “PAID,” or “CANCEL.”
A product’s quantity on hand (P_QTYOH) is updated (decreased) with each product sale.
A customer may make many payments. The payment type (PMT_TYPE) can be one of the following:
“CASH” for cash payments.
“CHECK” for check payments.
“CC” for credit card payments.
The payment details (PMT_DETAILS) are used to record data about check or credit card payments:
The bank, account number, and check number for check payments.
The issuer, credit card number, and expiration date for credit card payments.
Using this database, write the SQL code to represent each of the following transactions. Use BEGIN TRANSACTION and COMMIT to group the SQL statements in logical transactions.
On May 11, 2018, customer 10010 makes a credit purchase (30 days) of one unit of product 11QER/31 with a unit price of $110.00; the tax rate is 8 percent. The invoice number is 10983, and this invoice has only one product line.
On June 3, 2018, customer 10010 makes a payment of $100 in cash. The payment ID is 3428.
Create a simple transaction log (using the format shown in the attached figure) to represent the actions of the transactions in Problems 1a and 2b.
Assuming that pessimistic locking is being used but the two-phase locking protocol is not, create a chronological list of the locking, unlocking, and data manipulation activities that would occur during the complete processing of the transaction described in Problem 1a.
Assuming that pessimistic locking is being used with the two-phase locking protocol, create a chronological list of the locking, unlocking, and data manipulation activities that would occur during the complete processing of the transaction described in Problem 1a.
Assuming that pessimistic locking is being used but the two-phase locking protocol is not, create a chronological list of the locking, unlocking, and data manipulation activities that would occur during the complete processing of the transaction described in Problem 1b.
Assuming that pessimistic locking with the two-phase locking protocol is being used with row-level lock granularity, create a chronological list of the locking, unlocking, and data manipulation activities that would occur during the complete processing of the transaction described in Problem 1b.
Struggling with where to start this assignment? Follow this guide to tackle your analytical report easily!
Here’s the SQL code to handle the given transactions along with the required transaction log and locking activities.
SQL Code for Transactions
(a) Credit Purchase on May 11, 2018 by Customer 10010
(b) Cash Payment on June 3, 2018 by Customer 10010
Transaction Log
Transaction ID | Action | Table | Row/Column Affected | Old Value | New Value |
---|---|---|---|---|---|
1 | Insert | INVOICE | INV_NUMBER=10983 | NULL | 10983 |
1 | Insert | INVOICE_LINE | INV_NUMBER=10983, P_CODE=’11QER/31′ | NULL | 1 unit at $110 |
1 | Update | CUSTOMER | CUS_BALANCE (10010) | Previous Value | +$118.80 |
1 | Update | CUSTOMER | CUS_LAST_PURCHASE (10010) | Previous Date | 2018-05-11 |
1 | Update | PRODUCT | P_QTYOH (11QER/31) | Previous Value | -1 |
1 | Commit | – | – | – | – |
2 | Insert | PAYMENT | PMT_ID=3428 | NULL | 3428 |
2 | Update | CUSTOMER | CUS_BALANCE (10010) | Previous Value | -$100.00 |
2 | Update | CUSTOMER | CUS_LAST_PAYMENT (10010) | Previous Date | 2018-06-03 |
2 | Commit | – | – | – | – |
Locking Activities Without Two-Phase Locking Protocol (1a)
- Lock acquired on CUSTOMER table → Read balance
- Lock acquired on INVOICE table → Insert new invoice
- Lock acquired on INVOICE_LINE table → Insert invoice line
- Lock acquired on CUSTOMER table → Update balance & last purchase date
- Lock acquired on PRODUCT table → Update product quantity
- Unlock PRODUCT table
- Unlock CUSTOMER table
- Unlock INVOICE table
- Unlock INVOICE_LINE table
- Commit Transaction
Locking Activities With Two-Phase Locking Protocol (1a)
- Lock acquired on CUSTOMER table → Read balance
- Lock acquired on INVOICE table → Insert new invoice
- Lock acquired on INVOICE_LINE table → Insert invoice line
- Lock acquired on CUSTOMER table → Update balance & last purchase date
- Lock acquired on PRODUCT table → Update product quantity
- Commit Transaction
- Unlock all locks simultaneously
Locking Activities Without Two-Phase Locking Protocol (1b)
- Lock acquired on PAYMENT table → Insert payment
- Lock acquired on CUSTOMER table → Update balance & last payment date
- Unlock PAYMENT table
- Unlock CUSTOMER table
- Commit Transaction
Locking Activities With Two-Phase Locking Protocol (1b)
- Lock acquired on PAYMENT table → Insert payment
- Lock acquired on CUSTOMER table → Update balance & last payment date
- Commit Transaction
- Unlock all locks simultaneously
This covers all SQL transactions, transaction logs, and locking scenarios!
Place this order or similar order and get an amazing discount. USE Discount code “GET20” for 20% discount