Справка
Телеграм чат начинающих программистов. Общаемся и помогаем друг другу
Если ссылка не открывается, можно найти нас в поиске по чатам @rubyrush
или
пойти другим путем
Мы добрались до самого важного и популярного способа хранить данные — базы данных (БД). Базы данных — отдельная тема и целая специализация, о которой можно сделать пару отдельных курсов.
В следующих двух уроках мы дадим вам лишь самые основы на простых примерах, чтобы при необходимости вы дальше смогли сами разобраться. Итак:
Можно было бы, конечно, хранить данные просто в файликах, тем более, что теперь мы знаем такие замечательные форматы как XML и JSON. Чего же не хватало программистам, зачем нужно было создавать ещё один способ хранения данных.
Если совсем просто, то база данных — это собственно, информация, которую могут использовать в своей работе программы. Строго говоря, наши XML-файлики, которые мы использовали в предыдущих уроках — это тоже базы данных, но только очень простые.
Более серьезные базы данных обладают специальной программой, которая сама «раздает» и «собирает» данные: системой управления. Система управление — это специальная программа которая хранит ваши данные особым образом.
Представьте себе два типа магазина: огромный склад, где всё лежит, как попало, отсортированное кем-то однажды, в огромных штабелях. Вам приходится самому лазить по ним, искать, что нужно и смотреть, как бы вас там всем этим не завалило. А потом тащить на кассу, оплачивать и тащить домой. Как-то так можно представить себе работу с файликами.
А работа с базой данных — это заказ в удобном интернет-магазине с доставкой. Вы говорите, что вам надо, а заботливые сотрудники сами всё доставляют и привозят в лучшем виде.
У использования баз данных следующие преимущества:
СУБД — это системы, которые фактически, исполняют ваши запросы к базе данных. Например, вы хотите узнать количество людей на планете Земля. Если бы у нас была подходящая база данных, мы могли бы сказать ей:
НАЙДИ всех ЛЮДЕЙ, которые живут на планете "Земля" и ПОКАЖИ их количество
(заглавными буквами выделены ключевые слова, чтобы придать этой фразе вид компьютерного запроса, хотя в реальности запросы выглядят немного иначе).
Базы данных бывают очень разные для разных задач: они могут отличаться способом хранения данных, способом получения данных, возможными функциями и так далее. Важнейший для программиста параметр — способ получения данных или, другими словами, «язык запросов».
Самый распространенный сейчас язык запросов — 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-базы относятся к категории «реляционных». Связи ускоряют доступ к данным и помогают сохранять порядок в базе.
Для того, чтобы создать нашу первую базу данных, нам необходимо немного подготовиться. Для начала, давайте установим специальный пакет разработчика, который можно скачать с сайта установщика руби.
Если у вас не установлен архиватор 7zip, его можно скачать бесплатного с сайта 7zip. После скачивания, распаковываем архив в папку с:\dev
.
И, наконец, устанавливаем пакет с утилитами в систему: для этого необходимо зайти в папку с:\dev
в консоли и запустить установку:
cd c:\dev
ruby dk.rb init
ruby dk.rb install
Теперь у нас в системе есть инструмент для сборки более низкоуровневых программ, написанных на языке C/C++. Нам он пригодиться для сборки и установки sqlite.
Для этого нам необходимо скачать с сайта sqlite.org архив, в названии которого есть слово autoconf
. На всякий случай вот прямая ссылка на версию 3.8.11.1. Вы также можете найти этот архив в материалах к уроку.
Для простоты дальнейшей работы распакуйте (можно всё тем же 7zip) архив, переименуйте получившуюся папку в sqlite
и перенесите в корень, на диск c:\
.
Пришло время установить sqlite. Запустите файл msys.bat
, который лежит в папке c:\dev
, куда вы (надеюсь) распаковали наш Dev-Kit. Это специальная консоль, в которой доступно немного больше команд, чем в обычной.
Перейдите в консоли в папку sqlite
и установите sqlite
cd c:\sqlite
./configure
make
make install
Если всё прошло гладко и никаких ошибок не возникло, в вашей системе установлен sqlite! Поздравляем!
У нас на компьютере установлена база SQlite, но для того, чтобы с ней работать нам нужен ещё любой клиент. Давайте скачаем один из самых простых и лёгких в настройке: плагин для браузера FireFox (если у вас ещё нет этого браузера — скачайте скорее).
Итак, устанавливаем SQLite Manager для Firefox. Это довольно просто.
Когда мы открывали файлы, мы сами руками выбирали как формат, в котором мы будем в них писать (либо просто текст, либо используя XML-парсер или конвертируя данные в JSON-текст), в базе данных мы ничего не пишем напрямую, мы формулируем базе свои желания в виде запросов. Вернее, в виде SQL-запросов.
Язык SQL-запросов — это отдельный язык со своим синтаксисом. Например, чтобы попросить базу вернуть нам все записи из таблицы people
, нам нужно сформировать такой запрос:
SELECT * FROM people;
А чтобы добавить запись о компании Google в таблицу companies
, нужно сформировать вот такой запрос:
INSERT INTO companies VALUES (`Google`);
Обратите внимание, все запросы завершаются знаком точки с запятой. Чуть больше о запросах мы узнаем на практике.
Запустите плагин и создайте новую базу. Он предложит сохранить её где-нибудь на диске. Сохраните, например, в папке урока c:\rubytut2\lesson11\hellow_world.sqlite
.
Создайте таблицу людей:
Обратите внимание, что при создании таблицы 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-базе.