База данных "Библиотека"
Изучив определения, пришло время разобраться с базой данных, лежащей в основе этого курса. Вы могли заметить, что мы, еще не написав ни строчки кода на SQL, уже приступаем к погружению в данные. Отчасти такой порядок обусловлен тем, что многие уже знакомы с основами выборки данных из таблиц (SELECT FROM), поэтому нам ничего не мешает обсудить данные уже сейчас. С другой стороны, для понимания структуры данных не обязательно знать даже простейший синтаксис SQL - нужно всего лишь изучить связи между таблицами и подключить здравый смысл.
Почему выбрана именно "Библиотека"
В данном курсе мы изучаем основные конструкции SQL на примере базы данных "библиотека". Почему именно эта база данных, а не, скажем, базы данных, взятые из реальных проектов или сервисов?
Мы хотели выбрать такую базу данных, которая была бы понятна и близка большинству из нас. Как минимум, все из нас учились в средней школе, получали учебники в библиотеке и даже посещали ее, чтобы взять книги для чтения.
Далее в статье мы приведем общую схему данных, а затем приведем описание каждого поля каждой таблицы.
Почему это не единственная база данных для этого курса?
В видео, которое дополняет этот курс, рассматривается только база данных "Библиотека", о которой пойдет речь сейчас. Однако в процессе формирования задач для самостоятельного решения мы решили добавить еще одну базу данных 😎, в которой всего две таблицы. Идея в том, что если вы только начинаете знакомится с SQL, то некоторые задачи на схему "Библиотека" вам могут показаться сложными. Поэтому лучше набить руку на простых задачах и простых концепциях, а потом переходить к более сложным.
Схема данных
Общая схема данных приведена на картинке ниже:
Таблица genre
У каждой книги есть жанр, поэтому есть связь с таблицей book . Считаем, что у книги может быть только один жанр. В тоже время, к жанру может относится много книг.
✅ id - код жанра (или краткое название по-английски)
✅ title - полное название жанра по-русски
Таблица book
Содержит название и код жанра книги.
✅ id - код книги (по-английски)
✅ title - полное название книги по-русски
✅ genre_id - код жанра, соответствует столбцу id из таблицы с жанрами.
✅ book_count - изначальное количество книг в библиотеке. Это фиксированное значение. Т.е. чтобы посчитать, сколько книг в библиотеке в наличии на какую-то дату, нужно из этого числа вычесть число взятий, прибавить число возвратов.
Таблица author
Содержит информацию об авторе книги
✅ id - код автора (по-английски)
✅ author_name - имя автора по-русски
✅ birth_date - дата рождения
✅ date_of_death - дата смерти. Если NULL, то считаем, что автор еще жив
Таблица book_author
Связываем автора и книгу в связь "многие-ко-многим". У одной и той же книги может быть несколько авторов, один и тот же автор может написать несколько книг.
✅ id - код записи. Никакой смысловой нагрузки это поле не несет.
✅ book_id - код книги, соответствует полю id в таблице book
✅ author_id - код автора, соответствует полю id в таблице author
Таблица client
Содержит информацию о клиентах, которые берут книги.
✅ id - код клиента
✅ created_dt - дата создания клиента (регистрации клиента). dt - сокращенно date.😉
✅ first_name - фамилия
✅ middle_name - отчество.
✅ last_name - имя
Таблица book_to_client
Соединяет клиента и взятую/возвращенную им книгу. Каждый раз, когда клиент берет книгу, в таблицу заносится информация: дата получения (get_book_dt), а дата возрата устанавливается как NULL. И наоборот, когда клиент возращает книгу, в таблицу заносится запись, в которой return_book_dt - это дата возврата, а get_book_dt - NULL.
✅ id - код записи, не несет смысловой нагрузки
✅ book_id - код книги, которую взял или вернул клиент
✅ client_id - код клиента, взявшего/вернувшего книгу
✅ get_book_dt - дата взятия книги клиентом
✅ return_book_dt - дата возврата книги этим клиентом.