Базы Данных
SQL
Влад Комодей
Типы приложений
Stateless
Statefull


Keep It Simple, Stupid
1. Хранение в коде
2. Хранение в оперативной памяти
3. Хранение в файлах
4. Хранение в простейшей key-value
5. База данных
6. Склад данных(data warehouse)
Причины появления систем хранения
- Надо что-то хранить
- Надо к этому что-то иметь доступ(желательно удобный)
- Надо быть уверенным, что это что-то не пропадет даже в случае прихода годзиллы

Statefull приложения. Разновидности хранения данных


Долговременное
Кратковременное
Разновидности персистентных хранилищ
Реляционная модель
Документная модель
- Microsoft SQL Server
- MySQL
- PostgreSQL
- MariaDB
- SQLite
- MongoDB
- Redis
Распределенные файловые хранилища
Поисковые системы
Колоночные базы данных
Графовые базы
Организация работы базы данных

Application


Driver(Software)
Database

Application


Driver
Database
Object
Relational
Mapper

Базовая структура

SQL
SQL - язык программирования, используемый для манипулирования реляционными структурами
CREATE TABLE employees (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(30) NOT NULL,
last_name VARCHAR(30) NOT NULL,
age INT NOT NULL
)
INSERT INTO employees (first_name, last_name, age) VALUES ('vasya', 'ivanov', 30),
('john', 'ivanovich', 40), ('katerina', 'usovich', 50), ('vasya', 'klemenko', 25);
SELECT id, first_name, last_name
FROM employees
WHERE age > 20;
SELECT * FROM employees where age > 35 AND age < 45;
SELECT MIN(age) from employees where name='vasya';Данные в реляционных базах(RDBMS) организованы в таблицах

Один к одному

Один ко многим

Виды отношений между таблицами

Многие ко многим
Способ связи - foreign keys
CREATE TABLE orders (
id int NOT NULL PRIMARY KEY,
order_number int NOT NULL,
person_id int,
FOREIGN KEY (person_id) REFERENCES persons(id)
);
CREATE TABLE persons (
id int NOT NULL PRIMARY KEY,
first_name VARCHAR(40),
last_name VARCHAR(40)
);Постэффект от FK
INSERT INTO persons VALUES (1, 'vasya', 'petrov');
INSERT INTO orders VALUES (1, 13, 1), (2, 14, 1);
SELECT * FROM orders;
DELETE FROM persons where id=1;CREATE TABLE orders (
id int NOT NULL PRIMARY KEY,
order_number int NOT NULL,
person_id int,
FOREIGN KEY (person_id) REFERENCES persons(id) ON DELETE CASCADE
);
CREATE TABLE persons (
id int NOT NULL PRIMARY KEY,
first_name VARCHAR(40),
last_name VARCHAR(40)
);

Left Join
CREATE TABLE orders (
id int NOT NULL PRIMARY KEY,
order_number int NOT NULL,
person_id int,
FOREIGN KEY (person_id) REFERENCES persons(id) ON DELETE CASCADE
);
CREATE TABLE persons (
id int NOT NULL PRIMARY KEY,
first_name VARCHAR(40),
last_name VARCHAR(40)
);
INSERT INTO persons VALUES (1, 'vasya', 'petrov');
INSERT INTO orders VALUES (1, 13, 1), (2, 14, 1);
SELECT * FROM persons LEFT JOIN orders on persons.id = orders.person_id;
Индексы
Специальное представление подмножества данных для оптимизации чтения

Способ создания
CREATE TABLE persons (
id int NOT NULL PRIMARY KEY,
first_name VARCHAR(40),
last_name VARCHAR(40),
age INT NOT NULL,
INDEX first_name_index(first_name),
UNIQUE INDEX first_last_name(first_name, last_name),
INDEX age_index(age)
);
13 - Databases(p.1)
By Startup Summer
13 - Databases(p.1)
- 94