Спроектируй базу данных для электронной библиотеки с таблицами авторов, книг и читателей, опиши связи, индексы и ограничения
Что проверяют
Умеете ли вы за десять минут построить схему, которая не рассыплется на первом же изменении требований: связи, ключи, ограничения целостности, индексы под реальные запросы. Для Go отдельно смотрят, не уносите ли вы целостность данных из базы в код сервиса.
Как отвечать
Сначала вслух задайте уточняющие вопросы: учитываем ли экземпляры книги отдельно от издания, бывает ли у книги несколько авторов, нужна ли история выдач. Потом схема, ориентир на PostgreSQL.
authors: идентификатор, имяnot null, дата рождения.books: идентификатор, названиеnot null, год издания с проверкой диапазона,isbnс ограничением уникальности.book_authors: пара ссылок с составным первичным ключом, потому что связь между книгой и автором многие ко многим.readers: идентификатор, имя, почта с уникальностью и нечувствительным к регистру сравнением, отметка времени создания.loans: ссылки на книгу и читателя, время выдачи, срок возврата, время возврата с допуском пустого значения.
Ограничения проговорите отдельно: внешние ключи с осознанным поведением при удалении (на выдачах запрет, чтобы не терять историю), проверка, что возврат не раньше выдачи, обязательность полей.
Индексы под запросы, а не про запас: составной по читателю и дате выдачи для истории, частичный по книге среди невозвращённых для проверки доступности, триграммный или полнотекстовый по названию для поиска.
Из стороны Go добавьте миграции отдельными файлами, запросы с плейсхолдерами и передачей контекста, выдачу книги одной транзакцией.
Где спотыкаются
Кладут ссылку на автора прямо в таблицу книг. Схема выглядит проще ровно до вопроса про соавторов, после которого её приходится переделывать вместе с данными.
Забывают первичный ключ в таблице связи и получают дубликаты пар, либо проверяют уникальность в коде сервиса. Две параллельные горутины такую проверку пробивают, база же держит её всегда.
Не отличают книгу от экземпляра. Выдача привязана к книге, и две физические копии одного издания нельзя выдать двум читателям, хотя в библиотеке это обычное дело.