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
Ошибочка: два public класса быть не может.
Anonymous #2502407 Уровень 2
10 ноября 2022
Днипро, ага🤣
Konstantin Уровень 29
28 декабря 2021
Прочитал статью и по смотрел несколько видо не ютубе решил не использовать визуальный интерфей и по пробовать делать через консоль создал таблицу и все такое вопрос в чем. Нужно ли выключать сервер после его создания или он выключается автоматически после закрытия командной строки ?
wan-derer.ru Уровень 40
28 сентября 2021
Хороший (и бесплатный курс по базам данных: https://stepik.org/course/63054). И как раз на основе MySQL.
Javart Уровень 11
9 мая 2021
thanks!
Roman Beekeeper Уровень 35
11 марта 2021
⚡️UPDATE⚡️ Друзья, создал телеграм-канал 🤓, в котором освещаю свою писательскую деятельность и свою open-source разработку в целом. Присоединяйтесь ✌️
Vladimir Уровень 11
5 января 2021
Отличная работа! По больше бы таких людей, которые готовы делится своим опытом и делятся им.
Иван Уровень 41
2 октября 2020
Оговорюсь сразу я не претендую на эксперта по SQL и БД, но давайте будем терминами пользоваться как описано в теории БД, отношение == таблица, связь есть связь
Anton Уровень 32
29 сентября 2020
Почему именно MySQL? Есть же куда более шустрые и простые в установке СУБД.
Aleksei Уровень 9
27 сентября 2020
Большое спасибо! Одна просьба: картинки бы побольше размером)