Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Database Question - Other answers found on Chegg textbook solutions are incorrec

ID: 3607139 • Letter: D

Question

Database Question - Other answers found on Chegg textbook solutions are incorrect. Please help! Thanks!

Consider the LIBRARY relational database schema shown in Figure 8.14, which is used to keep track of books, borrowers, and book loans. Referential integrity constraints are shown as directed arcs in Figure 8.14, as in the notation of Figure 5.7. Write down relational expressions for the following queries

a) How many copies of the book titled The Lost Tribe are owned by the library branch whose name is ‘Sharpstown’?

b) How many copies of the book titled The Lost Tribe are owned by each library branch?

c) Retrieve the names of all borrowers who do not have any books checked out.

d) For each book that is loaned out from the Sharpstown branch and whose Due_date is today, retrieve the book title, the borrower’s name, and the borrower’s address.

e) For each library branch, retrieve the branch name and the total number of books loaned out from that branch.

f) Retrieve the names, addresses, and number of books checked out for all borrowers who have more than five books checked out.

g) For each book authored (or coauthored) by Stephen King, retrieve the title and the number of copies owned by the library branch whose name is Central.

FIGURE 8.14

BOOK Book id Title Publisher_name BOOK_AUTHORS Bookid Author name PUBLISHER Name Address Phone BOOK COPIES Book id Branch id No of copies BOOK LOANS Book id Branch id Card no Date out Due date LIBRARY BRANCH Branch id Branch name Add ress BORROWER Figure 8.14 A relational database schema for a LIBRARY database. Card_noName Address Phone

Explanation / Answer

Note :  We have used S for SELECT, P for PROJECT, * for NATURAL JOIN, - for SET DIFFERENCE, F for AGGREGATE FUNCTION)

(a) A <-- BOOKCOPIES * LIBRARY-BRANCH * BOOK RESULT <-- P No_Of_Copies ( S BranchName='Sharpstown' and Title='The Lost Tribe' (A) ) Note: A better query would be to do the SELECTs before the JOIN as follows: A <-- P No_Of_Copies ( ( S BranchName='Sharpstown' (LIBRARY-BRANCH) ) * (BOOKCOPIES * ( S Title='The Lost Tribe' (BOOK) ) ) )

(b) P BranchID,No_Of_Copies ( ( S Title='The Lost Tribe' (BOOK)) * BOOKCOPIES )

(c) NO_CHECKOUT_B <-- P CardNo (BORROWER) - P CardNo (BOOK_LOANS) RESULT <-- P Name (BORROWER * NO_CHECKOUT_B)

(d) S <-- P BranchId ( S BranchName='Sharpstown' (LIBRARY-BRANCH) ) B_FROM_S <-- P BookId,CardNo ( ( S DueDate='today' (BOOKLOANS) ) * S ) RESULT <-- P Title,Name,Address ( BOOK * BORROWER * B_FROM_S )

(e) R(BranchId,Total) <-- BranchId FCOUNT(BookId,CardNo) (BOOK_LOANS) RESULT <-- P BranchName,Total (R * LIBRARY_BRANCH)

(f) B(CardNo,TotalCheckout) <-- CardNo F COUNT(BookId) (BOOK_LOANS) B5 <-- S TotalCheckout > 5 (B) RESULT <-- P Name,Address,TotalCheckout ( B5 * BORROWER)

(g) SK(BookId,Title) <-- ( sAuthorName='Stephen King' ( BOOK_AUTHORS)) * BOOK CENTRAL(BranchId) <-- sBranchName='Central' ( LIBRARY_BRANCH ) RESULT <-- P Title,NoOfCopies ( SK * BOOKCOPIES * CENTRAL )