Базы Данных

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