В базе данных библиотеки три таблицы: READERS (ReaderID, FullName, Phone), BOOKS (BookID, Title, Author) и LOANS (ReaderID, BookID, DateOut, DateReturn). В LOANS каждая запись фиксирует выдачу книги: ReaderID и BookID ссылаются на READERS и BOOKS, DateOut — дата выдачи, DateReturn — дата возврата (пока книга на руках, поле пустое). Читатель может брать одну и ту же книгу повторно в разные дни, но не более одного раза в день. Установите соответствие:
1. Минимальный набор полей, образующий первичный ключ таблицы LOANS
2. Тип связи между таблицами READERS и BOOKS, реализуемый через таблицу LOANS
Показать ответ и разборСкрыть ответ и разбор
Верный ответ
- 1CReaderID, BookID и DateOut
- 2Aмногие ко многим
Разбор
1) Первичный ключ должен однозначно определять каждую запись и не содержать пустых значений. Поле «ReaderID» одно не подходит: читатель берёт много книг. Набор «ReaderID и BookID» не подходит: читатель может взять ту же книгу повторно, и пара повторится. 2) Добавляем дату выдачи: по условию в один день читатель берёт книгу не более одного раза, поэтому «ReaderID, BookID и DateOut» уникален. Набор «ReaderID, BookID и DateReturn» нельзя использовать: DateReturn бывает пустым, а ключ не может содержать пустых значений. 3) Читатель берёт много книг, а каждую книгу берут много читателей, поэтому связь «многие ко многим». В реляционной БД её реализуют через промежуточную таблицу LOANS, в которой ReaderID и BookID — внешние ключи, образующие две связи «один ко многим».