База данных "Библиотека"

Изучив определения, пришло время разобраться с базой данных, лежащей в основе этого курса. Вы могли заметить, что мы, еще не написав ни строчки кода на SQL, уже приступаем к погружению в данные. Отчасти такой порядок обусловлен тем, что многие уже знакомы с основами выборки данных из таблиц (SELECT FROM), поэтому нам ничего не мешает обсудить данные уже сейчас. С другой стороны, для понимания структуры данных не обязательно знать даже простейший синтаксис SQL - нужно всего лишь изучить связи между таблицами и подключить здравый смысл.

Почему выбрана именно "Библиотека"

В данном курсе мы изучаем основные конструкции SQL на примере базы данных "библиотека". Почему именно эта база данных, а не, скажем, базы данных, взятые из реальных проектов или сервисов?

Мы хотели выбрать такую базу данных, которая была бы понятна и близка большинству из нас. Как минимум, все из нас учились в средней школе, получали учебники в библиотеке и даже посещали ее, чтобы взять книги для чтения.

Далее в статье мы приведем общую схему данных, а затем приведем описание каждого поля каждой таблицы.

Почему это не единственная база данных для этого курса?

В видео, которое дополняет этот курс, рассматривается только база данных "Библиотека", о которой пойдет речь сейчас. Однако в процессе формирования задач для самостоятельного решения мы решили добавить еще одну базу данных 😎, в которой всего две таблицы. Идея в том, что если вы только начинаете знакомится с SQL, то некоторые задачи на схему "Библиотека" вам могут показаться сложными. Поэтому лучше набить руку на простых задачах и простых концепциях, а потом переходить к более сложным.

Схема данных

Общая схема данных приведена на картинке ниже:

Image for article

Таблица 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 - дата возврата книги этим клиентом.