JavaRush/Java блог/Java-проекты/Разбираем базы данных и язык SQL - "Java-проект от А до Я...
Roman Beekeeper
35 уровень

Разбираем базы данных и язык SQL - "Java-проект от А до Я"

Статья из группы Java-проекты
участников
Статья из серии о создании Java-проекта. Ее цель — разбор ключевых технологий, итог — написание телеграм-бота. Вводная часть — здесь. Алоха, инженеры-программисты. Сегодня говорим о базах данных и языке SQL.“Java-проект от А до Я”: разбираем базы данных и язык SQL - 1На кого рассчитана эта статья? Да на всех, кому интересно. Одни могут начать свой путь с этой статьи, другие смогут освежить в памяти интересные факты. Эта часть будет сугубо теоретической. Прежде чем рассказывать, что такое базы данных и SQL-синтаксис, нужно понять и определить, для чего мы их будем изучать. На данном этапе будем говорить ТОЛЬКО об SQL базах данных: NoSQL в этом цикле статей рассматривать не будем.

База данных: что это

“Java-проект от А до Я”: разбираем базы данных и язык SQL - 2База данных (далее БД) — это место, где хранятся структурированные данные, которые можно получить при помощи языка запросов. Базы данных умеют не только хранить, но и обрабатывать и изменять информацию в больших объемах. Для ремарки: попробуйте быстро изменить в Excel набор значений по каким-то признакам. В принципе, ничего сложного. Не то что в нашем не оцифрованном реальном мире. Например, переименование переулков, улиц, городов. Было бы все виртуально и занесено в БД, была бы она нормализована, это была бы пара пустяков. А так страдает множество носителей данных, которые не могут автоматически измениться. В этом контексте SQL для баз данных — это язык, который БД понимает и реагирует соответственно. Скажем, переименовать город не составило бы труда, переименование Днепропетровска в Днипро выглядело бы примерно так:
UPDATE city SET name = “Днипро” WHERE id = 1231;
Все последующие запросы в систему уже выдавали бы то имя, которое нам нужно.

Зачем нужны базы данных

Как я уже говорил, при помощи баз данных можно хранить данные. Но что это за данные? Чтобы понять на жизненном примере, можно поговорить о каком-то приложении. Например, о том же телеграм-боте. Мы хотим знать, сколько человек пользуется ботом. Как это можно реализовать? В обычном Java-приложении можно создать множество уникальных элементов — Set, которое будет хранить nickname пользователя или ID-шник чата. Будет это работать? Будет. Ровно до тех пор, пока Java-приложение не остановят, а как только его запустят вновь, то множество уникальных элементов будет пустым. То есть данные, которые хранились в работающем приложении, просто пропали. Что можно с этим сделать? Можно вынести хранение состояния системы (данные) из Java-приложения куда-то в другое место. Можно хранить это в CSV-формате в обычном файле на компьютере. Можно вообще одной строкой в отдельном файле. Это можно сделать, и потом перезаписывать эти данные перед тем, как Java-приложение остановится. Хотя гарантия, что запись будет успешная, далеко не близка к 100%, потому что банально можно выдернуть шнур питания сервера, и запись не произойдет. В этом подходе есть существенный недостаток: нет никакой функциональности по получению, агрегированию и поиску информации на уровне файлов. Да, конечно, можно вычитать файл, создать под него объекты, но при этом придется КАЖДЫЙ раз выкачивать в приложение все данные. А их может быть много, например, пара гигабайт. Этого можно избежать, если хранить данные в БД. Каким образом? Через таблицы и отношения между ними. На этом все реляционные базы данных и стоят.

SQL: язык, который понимают базы данных

Существуют Системы Управления Базами Данных (далее — СУБД) и язык, который они понимают — SQL. SQL — язык программирования для манипулирования и управления базами данных. Для понимания, как это работает, посмотрим на рисунок:“Java-проект от А до Я”: разбираем базы данных и язык SQL - 3Пользователь отправляет SQL-запросы в СУБД, СУБД понимает, что нужно сделать, делает это, и если запрос был на получение данных, то возвращает их. Поэтому нам как разработчикам нужно освоить язык запросов SQL. Вы можете подумать: «О, еще один язык. Я тут Java с божьей помощью еле-еле понимаю, а вы мне еще один язык сразу предлагаете». Это не так: SQL был придуман как язык-спецификация для СУБД так, чтобы писать на этом языке могли бухгалтеры, которые очень далеки от баз данных и программирования в целом. Это значит, что выучить его будет не так уж и сложно. Главное — ПРАКТИКА-ПРАКТИКА-ПРАКТИКА. Сегодня будет теория, но следующая статья будет о практике. Так как реляционная база данных — это набор двумерных-массивов-таблиц и отношения между ними, то и работа будет идти вокруг них. Если говорить о примере, то можно показать две таблицы — «Страны» и «Города» и как они связаны.“Java-проект от А до Я”: разбираем базы данных и язык SQL - 4Для нас на данном этапе важно понять, что записи в таблице — это данные о каком-то объекте из Java-мира. Например, эти две таблицы через Java можно описать так:
public class Country {
   private Long id;
   private String name;
}

public class City {

   private Long id;
   private String name;
   private Country country;
   private Integer population;
}
Ну не красота ли, а? В базе данных может храниться сколько угодно таблиц. В нашем случае их две.

Структура таблицы

Я думаю, что все так или иначе сталкивались с excel-таблицами, и вам понятны термины строка и столбец. В рамках баз данных мы больше говорим о записях и полях:“Java-проект от А до Я”: разбираем базы данных и язык SQL - 5Таким образом получается, что каждый объект класса City — это запись в таблице в базе данных.

Первичный ключ

“Java-проект от А до Я”: разбираем базы данных и язык SQL - 6Часто бывает так, что поля в базах данных имеют одинаковые значения. Например, соцсети, где по имени, фамилии и даже отчеству может найтись более одного человека. А реляционные базы данных требуют наличия уникального поля, по которому можно было бы получить доступ к записи. Вот это и называется первый ключ или Primary Key. Обычно в качестве такого ключа используют поле ID(id) — это сокращение от identifier. Именно поэтому в каждую таблицу нужно добавить поле ID.“Java-проект от А до Я”: разбираем базы данных и язык SQL - 7

Внешний ключ

В нашем примере такое поле есть в таблице City, которая использует ключ от Country. И работает это так: каждый город знает уникальный идентификатор информации по своей стране, и если взять его и создать запрос в БД, мы получим исчерпывающую информацию о стране. Как видно на картинке, есть связь (relation) между двумя таблицами:“Java-проект от А до Я”: разбираем базы данных и язык SQL - 8Здесь показан принцип внешнего ключа.

Какие разделы есть в SQL

На собеседованиях, кстати, часто спрашивают, какие операции есть в SQL:
  • DDL (Data Definition Language) — группа операторов, изменяющих/создающих таблицы, их структуру и другое. То есть создание таблицы, ее удаление, создание/удаление полей в таблицах; создание нового первичного ключа и так далее;
  • DML (Data Manipulation Language) — группа операторов, управляющих изменением данных. Это все операции, которые изменяют данные в БД: добавление, получение, изменение и удаление;
  • DCL (Data Control Language) — средства подтверждения прав пользователя на выполнение действий. Операции по предоставлению доступа и прав для конкретного пользователя, чтобы он мог выполнять DDL/DML операции.

Какие типы данных есть в SQL

Таблицы могут хранить и обрабатывать определенные типы данных. Здесь будет все похоже на то, что мы используем в Java. Поговорим об основных. Их всего три, другие уже будем добавлять по необходимости и/или по желанию:“Java-проект от А до Я”: разбираем базы данных и язык SQL - 9Как видно из картинки, это:
  • INT — целочисленные значения. Используются для уникального идентификатора и для просто целого числа;
  • VARCHAR — это наш String;
  • DATE — это наш LocalDate.
Пока что все просто, да? Типы полей задаются при создании таблицы. Ясно, что нельзя будет записать в поле значение другого типа.

Кто такие SQL операторы

Оператор — это отдельная команда, которая производит какое-то действие. Операторы состоят из предложений, те, в свою очередь, из ключевых слов, которые используются в запросах. Посмотрим на пример:“Java-проект от А до Я”: разбираем базы данных и язык SQL - 10Здесь уже интереснее, здесь уже построен запрос. Что там делают? Все просто, там говорится: “Взять три поля (Name, Age и CreatedDate) из таблицы Clients, выбрать только те записи, где name равно Roman”.

Вывод

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

Домашнее задание

Чтобы добавить интереса к этой серии статей на JRTB, время от времени будут домашние задания. Например, без сегодняшнего задания следующую статью уже будет значительно сложнее понять, ведь там будет много практики. Поэтому задание: установить СУБД MySQL себе на компьютер и войти в базу данных или через консоль, или через другие решения. Всем спасибо за прочтение, до скорых встреч!

Список всех материалов серии в начале этой статьи.

Комментарии (71)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Anonymous #3193220
Уровень 1
9 декабря 2022, 00:29
Ошибочка: два public класса быть не может.
Anonymous #2502407
Уровень 2
10 ноября 2022, 08:53
Днипро, ага🤣
Konstantin Medical Interpreter в Hospital
28 декабря 2021, 04:41
Прочитал статью и по смотрел несколько видо не ютубе решил не использовать визуальный интерфей и по пробовать делать через консоль создал таблицу и все такое вопрос в чем. Нужно ли выключать сервер после его создания или он выключается автоматически после закрытия командной строки ?
Roman Beekeeper тг-канал по java разработ в t.me/romankh3
28 декабря 2021, 06:09
Одно можно сказать точно: от закрытия соединения с БД, сервер БД не закрывается. Вопрос закрывать сервер или нет скорее к тебе, чем к другим.
wan-derer.ru
Уровень 40
28 сентября 2021, 15:49
Хороший (и бесплатный курс по базам данных: https://stepik.org/course/63054). И как раз на основе MySQL.
Сергей Смирнов
Уровень 36
21 октября 2021, 09:29
Черт, как же удачно я наткнулся на этот комментарий.
wan-derer.ru
Уровень 40
21 октября 2021, 15:11
Спецом подсунул :)
Alena Palasionak
Уровень 37
29 ноября 2021, 12:10
Спасибо!
Нефедов Глеб
Уровень 23
10 июня 2022, 14:47
Дружище, спасибо огромное за ссылку, курс суперский)
Javart Уборщик в Макдоналдс
9 мая 2021, 19:08
thanks!
Roman Beekeeper тг-канал по java разработ в t.me/romankh3
11 марта 2021, 20:39
⚡️UPDATE⚡️ Друзья, создал телеграм-канал 🤓, в котором освещаю свою писательскую деятельность и свою open-source разработку в целом. Присоединяйтесь ✌️
Vladimir
Уровень 11
5 января 2021, 07:01
Отличная работа! По больше бы таких людей, которые готовы делится своим опытом и делятся им.
Иван
Уровень 41
2 октября 2020, 06:40
Оговорюсь сразу я не претендую на эксперта по SQL и БД, но давайте будем терминами пользоваться как описано в теории БД, отношение == таблица, связь есть связь
Ksenia Mario
Уровень 23
Master
15 ноября 2020, 18:24
может давайте джаву поучим? " == " оператор, результатом когорого есть true или false. по контексту в вашем предложении нужно писать логическое :=
Иван
Уровень 41
16 ноября 2020, 06:54
не очень понятно к чему Вы это написали, причем здесь := из совершенно других языков программирования? "может давайте джаву поучим? " - а мы чем тут занимаемся? или вы считаете разработчик не обязан знать правильные термины? ведь в работе придется часто сталкиваться с БД
Ksenia Mario
Уровень 23
Master
16 ноября 2020, 13:29
значек с логики, он не привязан к язьіку. Вьі неправильно использовали оператор == мягко намекаю что Вам стоит разобратся что он значит.
Vesa Backend Developer
24 января 2021, 10:07
Мне кажется он правильно использовал: "отношение равно таблица", т.е. "отношение" и "таблица" - это одно и то же.
Ksenia Mario
Уровень 23
Master
24 января 2021, 17:56
в контесте джавушки "отношение = таблица" значит: отношение равно таблица, повествовательное вьіражение. а вот "отношение == таблица" значит: равно ли отношене таблице? вопросительное с ответом true/false.
Ksenia Mario
Уровень 23
Master
24 января 2021, 18:02
ах, да, в комменте Иван негодовал что написано слово таблица, а нужно писать "отношение". но, умудрился сам неправильно использовать ==
Виктор Шефф
Уровень 111
Expert
17 марта 2022, 09:44
Вы токсичная
Anton
Уровень 32
29 сентября 2020, 17:17
Почему именно MySQL? Есть же куда более шустрые и простые в установке СУБД.
sergey
Уровень 22
30 сентября 2020, 18:23
Например? Не воспринимайте как сарказм. Просто правда интересно, какие есть СУБД шустрее MySQL. В образовательных целях
Anton
Уровень 32
1 октября 2020, 19:40
Я юзаю DBeaver, ставится без заморочек (по крайней мере, когда возился с установкой MySQL - много матюкался).
sergey
Уровень 22
2 октября 2020, 08:23
Но ведь DBeaver - это не СУБД... Это ж просто инструмент для работы с разными БД. А речь идет как раз таки о СУБД. Какая все-таки шустрее... Кстати упомянутый вами DBeaver написан на JAVA и использует JDBC))
Anton
Уровень 32
3 октября 2020, 07:26
Да, перепутал немного, просто пиcал походу настраивая DBeaver. )) А про СУБД - postgres, тем более он сейчас в каждой линуксовине по умолчанию стоит.
Ksenia Mario
Уровень 23
Master
15 ноября 2020, 18:09
а/что/где?
Javart Уборщик в Макдоналдс
9 мая 2021, 19:12
что у вас за linux? симпатичная тема
Aleksei
Уровень 9
27 сентября 2020, 12:19
Большое спасибо! Одна просьба: картинки бы побольше размером)
Roman Beekeeper тг-канал по java разработ в t.me/romankh3
5 октября 2020, 20:19
Даже не знаю как сделать их более большими. Я делаю скриншоты с экрана макбука. Может что-то посоветуешь?