Skip to content

Latest commit

 

History

History
221 lines (155 loc) · 8.08 KB

File metadata and controls

221 lines (155 loc) · 8.08 KB

8. Базы данных

Чему научитесь:

  • понимать, зачем нужны реляционные бд
  • отличать субд друг от друга
  • проектировать простые базы данных
  • использовать клиенты для подключения к субд
  • подключать базы данных к приложению
  • писать простые запросы к базе данных (select, select + join)

Материалы для изучения

  • Хранение данных, SQLite - прочитать, без установки
    (до "Установка Dev-Kit" + раздел "Язык SQL — кратко")
  • установите DBeaver (раздел "установка Dbeaver")

Вопросы

  • зачем нужны базы данных? Почему бы просто не хранить данные в файлах?
  • что такое СУБД?
  • что такое модель данных?
  • почему реляционные бд так называются?
  • почему именно sqlite?

Установка DBeaver

DBeaver - бесплатный клиент для работы с базами данных. Предоставляет графический интерфейс для просмотра и редактирования структуры базы данных, для выполнения sql-запросов.

Вы можете поставить DBeaver как в Windows, так и в ubuntu в wsl.
Можно установить и там, и там.

Для работы на занятии рекомендую поставить в ubuntu (wsl):

  • заходим в консоль wsl
  • ставим swt:
sudo apt install libswt-gtk-4-java
  • скачиваем dbeaver
  • перемещаем файл в home wsl
  • устанавливаем:
sudo dpkg -i dbeaver-ce_24.0.3_amd64.deb
  • запускаем
dbeaver-ce

При запуске согласитесь на создание тестовой базы данных (sample database).

Практика

Задания на мини-лекции.

  • обсуждение опыта работы с базами данных
  • проектируем простую бд (таблица комментариев, связи с пользователями и постами)
  • пишем простой select, select с джойном

Практика в DBeaver

Откройте dbeaver:

dbeaver-ce

Изучите тестовую базу данных (DBeaver sample database).
Напишите запросы для:

  • выбора альбомов (все поля, прямая и обратная сортировка по названию)
  • выбора альбомов и их исполнителей (название альбома и их исполнителя) (Artist)

Практика в клиенте sqlite3

Т.к. база данных sqlite будет в виде файла, удобно создать отдельную папку для практики:

mkdir week8
cd week8

Создадим свою базу данных (у меня список дел):

sqlite3 todo.db

Создадим таблицу:

create table if not exists tasks (
  task varchar(255),
  done integer,
  id integer primary key autoincrement
);

Добавить данные:

insert into tasks(task, done) values ("Разработать урок", 0);
  • добавьте свои дела с помощью insert
  • напишите запрос, чтобы выбрать все дела :)

Обновить данные можно с помощью update:

update tasks set done = 1 where id = 1;

Удаление:

Удалит все:

delete from tasks;

Удалит по условиям:

delete from tasks where id = 1;
delete from tasks where task = 'сделать уроки';

Select с условием:

select task, iif(done, "сделано", "не сделано") from tasks;

Скриншот игры "5 букв"

Склонируйте игру себе:

git clone git@github.com:lightalloy/five-letters.git
# перейдём в директорию
cd five-letters
# установим необходимое
bundle install
# запустим
bundle exec ruby play.rb

Можно поиграть :)

Демо игры и обсуждение на занятии:

  • шаги разработки
  • подключение базы данных
  • откроем бд в dbeaver
  • откроем бд в клиенте sqlite3

Подключение к нашей бд из ruby

Создайте директорию для вашего проекта и положите туда файл с базой данных.
Если ваша бд уже лежит в отдельной директории, можно работать в ней.
Создайте Gemfile и пропишите туда гем sqlite3-ruby (пример в репозитории Установите: bundle install

Создайте файл (у меня тудулист todo.rb), подключите туда sqlite3-ruby, подключитесь к бд и выведите список записей.

Пример:

require "sqlite3"
DB_NAME = "todo.db"

db = SQLite3::Database.new DB_NAME

rows = db.execute("select id, task, done from tasks")
puts rows # rows - массив массивов (рядов таблицы)

Можно добавить больше данных в вашу бд (с помощью консольного клиента sqlite3 или графического - dbeaver, с помощью insert)

Напишите разные варианты запросов (select) (набор полей, сортировка, ограничение количества).

Вы можете использовать inspect, чтобы посмотреть структуру массива, к-й вернулся из db.execute:

puts rows.inspect

Выведите на экран поля id, текст дела, сделано или нет. Используйте итератор each для обхода массива.
Можно добавить логику, например, условия if-else. Также можно добавить разделители для красоты. Пример:

rows.each do |row|
  if row[2] == 0
    puts "не "
  end
  puts "сделано - #{row[1]}"
  puts "-------"
end

Напишите свой вариант.

Дополнительное задание

Доработайте ваше приложение, чтобы можно было принимать данные от пользователя (STDIN.gets) и записывать их в базу данных. Также можно сделать редактирование и удаление "дел" (записей в соотв. с темой вашей программы).

Дополнительные материалы

Бесплатный курс на Яндекс-практикуме «Основы работы с базами данных и SQL» (на 5 часов)
Мой урок для code sisters: основы реляционных СУБД
Обзор истории и видов СУБД для цикла занятия с использоваением метода ажурной пилы (jigsaw)