Наш чатик

Телеграм чат начинающих программистов. Общаемся и помогаем друг другу

Если ссылка не открывается, можно найти нас в поиске по чатам @rubyrush или пойти другим путем

Хранение данных, SQLite

Мы добрались до самого важного и популярного способа хранить данные ­— базы данных (БД). Базы данных — отдельная тема и целая специализация, о которой можно сделать пару отдельных курсов.

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

План урока

  1. Что такое базы данных (БД) и SQL-запросы
  2. Какие бывают системы управления базами данных (СУБД)
  3. SQLite
  4. Наша первая БД

Что такое базы данных (БД)

Можно было бы, конечно, хранить данные просто в файликах, тем более, что теперь мы знаем такие замечательные форматы как XML и JSON. Чего же не хватало программистам, зачем нужно было создавать ещё один способ хранения данных.

Если совсем просто, то база данных — это собственно, информация, которую могут использовать в своей работе программы. Строго говоря, наши XML-файлики, которые мы использовали в предыдущих уроках — это тоже базы данных, но только очень простые.

Более серьезные базы данных обладают специальной программой, которая сама «раздает» и «собирает» данные: системой управления. Система управление — это специальная программа которая хранит ваши данные особым образом.

Представьте себе два типа магазина: огромный склад, где всё лежит, как попало, отсортированное кем-то однажды, в огромных штабелях. Вам приходится самому лазить по ним, искать, что нужно и смотреть, как бы вас там всем этим не завалило. А потом тащить на кассу, оплачивать и тащить домой. Как-то так можно представить себе работу с файликами.

А работа с базой данных — это заказ в удобном интернет-магазине с доставкой. Вы говорите, что вам надо, а заботливые сотрудники сами всё доставляют и привозят в лучшем виде.

У использования баз данных следующие преимущества:

  • Удобство поиска
  • Конфиденциальность, разделение доступа
  • Оптимизация времени (поиск, сортировка результатов)
  • Распределённость, многопоточность

Какие бывают системы управления базами данных (СУБД)

СУБД — это системы, которые фактически, исполняют ваши запросы к базе данных. Например, вы хотите узнать количество людей на планете Земля. Если бы у нас была подходящая база данных, мы могли бы сказать ей:

НАЙДИ всех ЛЮДЕЙ, которые живут на планете "Земля" и ПОКАЖИ их количество

(заглавными буквами выделены ключевые слова, чтобы придать этой фразе вид компьютерного запроса, хотя в реальности запросы выглядят немного иначе).

Базы данных бывают очень разные для разных задач: они могут отличаться способом хранения данных, способом получения данных, возможными функциями и так далее. Важнейший для программиста параметр — способ получения данных или, другими словами, «язык запросов».

SQL — structured query language

Самый распространенный сейчас язык запросов — SQL. Это специальный язык, на котором базы разговаривают с внешним миром. Вот самые популярные базы, система управления которых использует SQL: MySQL, PostgreSQL, sqlite, Oracle.

Сейчас мы на примере самой простой из них (sqlite) рассмотрим основные идеи и разберем основные команды SQL для создания и чтения данных. Кстати, именно эта БД используется для хранения данных в вашем смартфонах на айос или андроид, и поэтому можно смело сказать, что эта система управления базами одна из самых популярных.

Как устроена база данных внутри?

Данные в базах структурированы в виде таблиц, почти как в Экселе. Каждая таблица обычно соответствует какой-то одной сущности, например таблица «Люди» (people) может представлять собой список с информацией о людях. Строка таблицы содержит информацию о единице сущности: имя, пол, возраст. У каждого столбца есть название (name, sex, age) и тип (строка, целое число, булевский тип и т.д.).

Для того, чтобы к любой строке в любой таблице можно было обратиться, однозначно её идентифицировав, у каждой строки есть строго уникальное поле ID. Это столбец, содержащий «айдишники», он может называться по-разному, но суть одна — это уникальный идентификатор, который, как правило, записан в виде целого числа (для первой строки 1, для второй — 2 и т.д.). Чтобы всегда можно было однозначно обратиться к нужной строке, этот ID неизменен, то есть, если первую строку из таблицы удалить, ID второй строки всё равно останется 2. А третья строка добавится с ID равным 3.

Связи в БД, реляционные БД

Также ID-шники используются для того, чтобы создавать связи между таблицами. Допустим, у нас есть таблица людей people и таблица компаний companies. Тогда мы можем прописать у каждого человека в поле company_id идентификатор компании, в которой он работает и таким образом отобразить, какую строку из таблицы companies нужно достать, если мы хотим узнать о месте работы конкретного person.

Связи в реляционной БД

Совокупность таблиц и связей между ними — это модель данных. Связи играют важную роль, это отражено в названии: SQL-базы относятся к категории «реляционных». Связи ускоряют доступ к данным и помогают сохранять порядок в базе.

Установка Dev-Kit

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

Качаем DevKit с сайта rubyinstaller.org

Если у вас не установлен архиватор 7zip, его можно скачать бесплатного с сайта 7zip. После скачивания, распаковываем архив в папку с:\dev.

Установка DevKit

И, наконец, устанавливаем пакет с утилитами в систему: для этого необходимо зайти в папку с:\dev в консоли и запустить установку:

cd c:\dev
ruby dk.rb init
ruby dk.rb install

Установка SQLITE для Windows

Теперь у нас в системе есть инструмент для сборки более низкоуровневых программ, написанных на языке C/C++. Нам он пригодиться для сборки и установки sqlite.

Установка sqlite

Для этого нам необходимо скачать с сайта sqlite.org архив, в названии которого есть слово autoconf. На всякий случай вот прямая ссылка на версию 3.8.11.1. Вы также можете найти этот архив в материалах к уроку.

Для простоты дальнейшей работы распакуйте (можно всё тем же 7zip) архив, переименуйте получившуюся папку в sqlite и перенесите в корень, на диск c:\ .

Пришло время установить sqlite. Запустите файл msys.bat, который лежит в папке c:\dev, куда вы (надеюсь) распаковали наш Dev-Kit. Это специальная консоль, в которой доступно немного больше команд, чем в обычной.

Запускаем msys.bat

Перейдите в консоли в папку sqlite и установите sqlite

cd c:\sqlite
./configure
make
make install

Если всё прошло гладко и никаких ошибок не возникло, в вашей системе установлен sqlite! Поздравляем!

Установка SQLite Manager

У нас на компьютере установлена база SQlite, но для того, чтобы с ней работать нам нужен ещё любой клиент. Давайте скачаем один из самых простых и лёгких в настройке: плагин для браузера FireFox (если у вас ещё нет этого браузера — скачайте скорее).

Итак, устанавливаем SQLite Manager для Firefox. Это довольно просто.

Установка SQLite Manager для FireFox

Язык SQL — кратко

Когда мы открывали файлы, мы сами руками выбирали как формат, в котором мы будем в них писать (либо просто текст, либо используя XML-парсер или конвертируя данные в JSON-текст), в базе данных мы ничего не пишем напрямую, мы формулируем базе свои желания в виде запросов. Вернее, в виде SQL-запросов.

Язык SQL-запросов — это отдельный язык со своим синтаксисом. Например, чтобы попросить базу вернуть нам все записи из таблицы people, нам нужно сформировать такой запрос:

SELECT * FROM people;

А чтобы добавить запись о компании Google в таблицу companies, нужно сформировать вот такой запрос:

INSERT INTO companies VALUES (`Google`);

Обратите внимание, все запросы завершаются знаком точки с запятой. Чуть больше о запросах мы узнаем на практике.

Создаём первую БД

Запустите плагин и создайте новую базу. Он предложит сохранить её где-нибудь на диске. Сохраните, например, в папке урока c:\rubytut2\lesson11\hellow_world.sqlite.

Создайте таблицу людей:

Наша первая таблица people

Обратите внимание, что при создании таблицы SQlite Manager показал нам запрос, который отправляется для создания этой таблицы. Да, для того, чтобы создавать таблицы (а в некоторых СУБД даже для создания баз данных) также используются SQL-запросы.

CREATE TABLE "main"."people" ("name" TEXT, "phone" TEXT, "birthday" DATETIME);

Создайте в вашей новой БД запись. Для этого во вкладке Выполнить запрос напишите INSERT-запрос:

INSERT INTO people VALUES ('Вадик', '+7 926 982-58-19', '1984-09-14 03:00:00');

Теперь в вашей новой таблице есть даже одна строка. Обратите внимание на поле rowid — это тот самый уникальный идентификатор, о котором мы говорили. В SQlite он называется rowid.

Добавим одну строчку в БД

Философия БД

Базы данных — это отдельная вселенная. Ни одно современное приложение не обходится без базы данных, а в разделе вакансий для программистов всегда есть подраздел: программисты баз данных. Но даже если вы не планируете связать вашу жизнь с программированием баз данных, хороший программист должен знать основы и уметь использовать БД для решения своих задач.

Сейчас мы просто узнали, что такое БД и создали одну на пробу. А в следующем уроке мы подключим нашу СУБД к нашему блокноту на Ruby и будем хранить наши записи в SQlite-базе.