Раздел 10 · Databases

Зачем нужны базы данных и СУБД

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Это первый урок теории баз данных. Он для тех, кто ещё ни разу не создавал таблицу и не уверен, чем база данных отличается от обычного файла. Здесь не будет ни одной команды, которую нужно запускать. Цель скромная: понять, какую боль снимает база данных и почему ради этого написаны целые программы.

Тетрадь кружка

Представь, что ты ведёшь шахматный кружок. Сначала всё просто: тетрадь, в ней список учеников, телефон родителей, оплачен ли месяц. Учеников десять, тетрадь одна, пишешь в неё только ты.

Через год учеников двести, у кружка три тренера, и каждому нужна та же тетрадь. Начинаются неприятности:

  • Найти долго. Чтобы понять, кто из Казани не заплатил за октябрь, приходится листать все страницы.
  • Два человека пишут одновременно. Тренер Аня отмечает оплату у Пети, а тренер Борис в это же время переписывает Петин телефон. У каждого своя копия тетради, и одна из правок теряется.
  • Тетрадь испортилась на середине. Ты переписывал страницу набело, пролил чай, и половина страницы старая, а половина новая. Какая версия правильная, уже не скажешь.
  • Одно и то же записано дважды. Телефон мамы Пети есть и в списке учеников, и в журнале турниров. Мама сменила номер, его поправили в одном месте, а в другом остался старый.
  • Всем видно всё. Стажёру нужна только посещаемость, но в тетради заодно лежат паспортные данные и суммы оплат.

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

Тетрадь становится файлом

Программисты проходят тот же путь, только вместо тетради у них файл. Пусть ученики лежат в файле students.csv:

id,name,city,phone,paid_october
1,Петя Иванов,Казань,+7 900 111-22-33,no
2,Аня Смирнова,Пермь,+7 900 444-55-66,yes
3,Олег Ким,Казань,+7 900 777-88-99,yes

Это CSV-файл: обычный текст, где каждая строка это ученик, а запятые разделяют колонки. Чтобы найти должников из Казани, программа должна прочитать файл целиком, строка за строкой, и проверить каждую. На трёх строках это мгновенно. На трёх миллионах строк это заметно, а если таких запросов сотня в секунду, сервер захлебнётся.

Дальше все проблемы тетради повторяются один в один:

  • две программы открыли файл, каждая дописала своё и сохранила; выжила только последняя запись;
  • программа упала на середине записи, и в файле осталась половина строки;
  • ничто не мешает записать в колонку paid_october слово может быть или указать город Казнь;
  • права доступа есть только на файл целиком: либо видишь всё, либо ничего.

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

дальше после входа

Урок целиком открыт всем, кто вошёл. Войди по своему email, чтобы читать дальше.

Вход пока по приглашению. Если хочешь учиться, напиши Vassiliy.