SQL
Влад Комодей
Типы приложений
Stateless
Statefull
Keep It Simple, Stupid
1. Хранение в коде
2. Хранение в оперативной памяти
3. Хранение в файлах
4. Хранение в простейшей key-value
5. База данных
6. Склад данных(data warehouse)
Причины появления систем хранения
Statefull приложения. Разновидности хранения данных
Долговременное
Кратковременное
Реляционная модель
Документная модель
Распределенные файловые хранилища
Поисковые системы
Колоночные базы данных
Графовые базы
Организация работы базы данных
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)
);