Ответ:
Чтобы хранить сведения о книгах и выдачах без повторения данных, удобно создать несколько связанных таблиц. Для учёта учащихся, получавших книгу, используются записи о выдаче; число таких учащихся можно получить запросом.
Таблица «Книги»
| Поле | Тип | Назначение | Пример |
|---|---|---|---|
| КнигаID | Целое, первичный ключ | Идентификатор книги | 1 |
| Название | Текст | Название книги | Остров сокровищ |
| ИздательствоID | Целое, внешний ключ | Ссылка на издательство | 1 |
| ГодИздания | Целое | Год издания | 2020 |
| Страниц | Целое | Количество страниц | 320 |
| Иллюстраций | Целое | Количество иллюстраций | 12 |
| Экземпляров | Целое | Всего экземпляров в библиотеке | 5 |
Связанные таблицы
- «Авторы»: АвторID (первичный ключ), ФИО.
- «АвторКниги»: КнигаID и АвторID — таблица связи, позволяющая указать одного или нескольких авторов у книги.
- «Издательства»: ИздательствоID (первичный ключ), Наименование.
- «Учащиеся»: УченикID (первичный ключ), ФИО, класс.
- «Выдачи»: ВыдачаID (первичный ключ), КнигаID, УченикID, ДатаВыдачи, ДатаВозврата. Каждая запись фиксирует выдачу книги учащемуся.
Связи: «Книги»—«Издательства» — многие к одному; «Книги»—«Авторы» — многие ко многим через «АвторКниги»; «Книги»—«Учащиеся» — многие ко многим через «Выдачи».
Пример запроса
Запрос подсчитывает число разных учащихся, которым выдавалась каждая книга. В редакторе SQL запрос можно задать так:
SELECT Книги.Название, COUNT(DISTINCT Выдачи.УченикID) AS ЧислоУчащихся
FROM Книги LEFT JOIN Выдачи ON Книги.КнигаID = Выдачи.КнигаID
GROUP BY Книги.КнигаID, Книги.Название;
Если используемая версия Base не поддерживает COUNT(DISTINCT), сначала создайте запрос с уникальными парами КнигаID—УченикID, а затем сгруппируйте их по КнигаID и подсчитайте записи.
Форма
Создайте форму «Карточка книги» на основе таблицы «Книги»: поля «Название», «Издательство», «ГодИздания», «Страниц», «Иллюстраций» и «Экземпляров». Для автора добавьте подформу, связанную с таблицами «АвторКниги» и «Авторы». Отдельную форму «Выдача книги» свяжите с таблицей «Выдачи» и добавьте выбор книги и учащегося, дату выдачи и дату возврата. В мастере форм OpenOffice Base укажите соответствующие таблицы и связи.
