Как добавить информацию о том, какой пользователь взял книгу, и какие таблицы и поля для этого нужны?
Что проверяют
Умеете ли вы увидеть связь «многие ко многим» с историей и не свести её к одному полю в таблице книг. Системному аналитику важно не только нарисовать таблицы, но и сначала задать уточняющие вопросы. Следом обычно просят написать запрос «у кого сейчас книга» и список просроченных выдач.
Как отвечать
Начните с вопросов к заказчику: нужна ли история выдач, бывает ли у книги несколько экземпляров, есть ли бронирование, срок возврата и штрафы. От ответов зависит модель. Базовый вариант:
users:id, ФИО, контакты, номер читательского билета с уникальным ограничением;books: издание, поляid, название, ISBN, год. Авторов по-хорошему выносят в отдельную таблицу со связкойbook_authors;book_copies: физические экземпляры, поляid,book_id, инвентарный номер, состояние. Выдают экземпляр, а не издание;loans: сама выдача, поляid,copy_id,user_id,issued_at,due_at,returned_at, иногдаissued_byдля библиотекаря.
Пустой returned_at означает, что книга на руках. Правило «один экземпляр нельзя выдать дважды одновременно» закрепите в базе: в PostgreSQL это частичный уникальный индекс по copy_id с условием WHERE returned_at IS NULL. Внешние ключи на copy_id и user_id не дадут выдать несуществующую книгу, а индексы по ним ускорят типовые запросы.
Проговорите, как модель отвечает на вопросы бизнеса: текущий держатель ищется по открытой выдаче, просрочка по условию due_at < now() AND returned_at IS NULL, история читателя по user_id с сортировкой по дате. Покажите ER-диаграмму и назовите кардинальность связей: читатель и экземпляр связаны через выдачи как один ко многим с каждой стороны.
Где спотыкаются
Добавляют поле user_id прямо в таблицу books. История теряется при каждой новой выдаче, а при двух экземплярах модель ломается сразу.
Не разделяют издание и экземпляр. Тогда нельзя сказать, какую именно из пяти копий потеряли, и учёт фонда расходится с базой.
Сразу рисуют таблицы, не задав ни одного вопроса. Для аналитика это главный промах: интервьюер ждёт, что вы выясните требования, прежде чем проектировать.