Разделите авторов, книги, читателей и выдачи. Связь книги с авторами допускает соавторство, а уникальность незакрытой выдачи не позволяет одновременно выдать экземпляр двум читателям.
Модель данных для книжного фонда
Разделите авторов, книги, читателей и выдачи. Связь книги с авторами допускает соавторство, а уникальность незакрытой выдачи не позволяет одновременно выдать экземпляр двум читателям.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Требуется спроектировать схему базы данных библиотеки, включающую три сущности: "Автор", "Книга" и "Читатель". Каждый экземпляр книги существует в единственном числе и может быть выдан только одному читателю одновременно. Составьте набор таблиц, отражающих эти ограничения.
Ответ
Разделите авторов, книги, читателей и выдачи. Связь книги с авторами допускает соавторство, а уникальность незакрытой выдачи не позволяет одновременно выдать экземпляр двум читателям.
Возможная схема PostgreSQL: authors(id, name), books(id, title), book_authors(book_id, author_id), readers(id, name), loans(id, book_id, reader_id, issued_at, returned_at). Все ссылки оформите FK, пару book_authors — составным ключом.
CREATE UNIQUE INDEX one_active_loan_per_book
ON loans (book_id)
WHERE returned_at IS NULL;
По условию одна запись books означает единственный экземпляр. Возврат закрывает выдачу, история сохраняется. Конкурентные попытки выдачи проверяет БД, а приложение обрабатывает нарушение ограничения.