Реляционная алгебра, использующая агрегатные функции?

Я написал пару запросов с использованием агрегатных функций, и, поскольку я не могу проверить их с помощью winRDBI, я хотел бы спросить, правильно ли я их сделал?

Ниже приведена схема базы данных:

Author - (authorNum/numeric, authorLast/char, authorFirst/char) PK: authorNum

Book - (bookCode/char, title/char, publisherCode/char, type/char, 
       price/numeric, paperback/char) PK: bookCode

Branch - (branchNum/numeric, branchName/char, branchLocation/char, numEmployees/numeric) PK: branchNum

Inventory - (bookCode/char, branchNum/numeric, onHand/numeric) PK: bookCode

Publisher - (publisherCode/char, publisherName/char, city/char) PK: publisherCode

Wrote - (bookCode/char, authorNum/numeric, sequence/numeric) PK: bookCode,authorNum

Sequence refers to the sequence in which this author appears on the 
         cover – first author, second author, etc.

Copy - (bookCode/char, branchNum/numeric, copyNum/numeric, 
       quality/char, price/numeric) PK: bookCode, branchNum, copyNum

Я не думаю, что это необходимо, но вот PDF фактической базы данных, с которой я работаю: База данных PDF

Вот запросы с соответствующими ответами (все операторы, которые не используют агрегатные функции, записаны в нотации winRDBI):

1) Укажите среднюю цену всех копий книг, доступных в отделении "Генри Даунтаун".

branch_names := copy njoin (project branchNum, branchName (branch));

in_Henry_Downtown :=  project bookCode, copyNum, price, branchName (select 
(branchName = 'Henry Downtown') (branch_names));

ans1 := bookCode g avg(price) (in_Henry_Book); 

Фрагмент таблицы отношений in_Henry_Downtown: in_Henry_Downtown

2) Для каждой книги, которой владеет Генри Букс, выведите код книги, количество общих копий, доступных коллективно во всех ее филиалах, и среднюю цену копии этой книги.

in_stock1 := (project bookCode (book)) njoin (project bookCode, branchNum (inventory));

copies := in_stock1 njoin (project bookCode, branchNum, copyNum, price (copy));

ans2 := bookCode g count(branchNum, copyNum), avg(price) (copies);

Фрагмент таблицы отношений copies: копии

Это тот, в котором я менее всего уверен. Я пытаюсь пересчитать копии книг во всех филиалах. Таким образом, для кода книги "0200" количество должно быть 4, б / у ветка № 1 имеет копию № 1 и копию № 2 этой книги, а ветка № 2 - копию № 1 и копию № 2 этой книги. Мой процесс состоит в том, что поскольку branchNum и copyNum будут уникальными для каждой записи определенного bookCode, я могу использовать эти атрибуты для своей функции подсчета.

3) Для каждого издателя укажите имя издателя, количество книг, которые он опубликовал, и среднюю базовую цену (отношение книг содержит базовую цену книги) этих книг.

publisher_books := (project publisherCode, publisherName (publisher)) 
        njoin (project bookCode, publisherCode,price (book));

ans3 := publisherName g count(bookCode), avg(price) (publisher_books);

Фрагмент таблицы отношений publisher_books: publisher_books

Любая помощь будет высоко ценится! Спасибо!

0 ответов

Другие вопросы по тегам