ݺߣ

ݺߣShare a Scribd company logo
Спецкурс. Занятие 8

Базы данных
Определения

База данных – определений
много, в основном, по признакам
(логическая связанность,
обработка на ЭВМ и т.д.)
Определения

Система управления базами
данных (СУБД) – программная
система для создания и
управления базами данных
Определения

Виды баз данных (по модели):
1. реляционные
2. иерархические
3. сетевые
4. объектные
5. объектно-реляционные
Определения

Реляционная модель – модель,
основанная на реляционной
алгебре (алгебра отношений на
кортежах)
Определения

Примеры реляционных СУБД:
1. Oracle
2. Postgres
3. MySQL
4. MS SQL
5. SQLite
Реляционные БД

Схема реляционной БД:
1. Таблицы – физическое
представление отношений
(столбцы – атрибуты, строки –
кортежи)
Реляционные БД

Схема реляционной БД:
2. Внешние файлы – для больших
объемов данных (чаще бинарных)
3. Индексы – уникальные,
поисковые
4. Ограничения - первичные и
внешние ключи, формульные
Реляционные БД

Программный код в реляционных
СУБД:
1. Триггеры – для реакции на
события
2. Хранимые процедуры и
функции – произвольные
алгоритмы обработки данных
Реляционные БД

Первичный ключ (primary key):
основной ключ таблицы,
уникальный как следствие,
может быть простым и
составным (несколько
столбцов)
Реляционные БД

Внешний ключ (foreign key):
столбцы таблицы, значения
которых являются
подмножеством первичного
ключа другой таблицы
Реляционные БД

Нормальная форма:
набор свойств отношений, для
обеспечения целостности
данных (1-НФ, 2-НФ, 3-НФ –
самая распространенная)
Пример БД в 3-й нормальной форме

Department:
id
name
Пример БД в 3-й нормальной форме

Group:
id
name
department_id
Пример БД в 3-й нормальной форме

Chair:
id
name
department_id
Пример БД в 3-й нормальной форме

Student:
id
first_name
last_name
group_id
chair_id
Денормализация БД

Денормализация – снижение
уровня нормализации, как
правило с целью повышения
производительности (чаще
всего уход от 3-НФ)
Денормализация БД

Student:
id
first_name
last_name
group_id
chair_name
department_name
Денормализация БД

Минус денормализации –
нужно тщательнее следить за
целостностью и
непротиворечивостью данных
SQL

Structured query language (SQL)
– язык написания запросов к
реляционной БД
SQL

Варианты SQL:
1. ANSI SQL
2. Oracle-диалект (Oracle SQL)
3. Postgres-диалект
4. MySQL-диалект
SQL

Data description language (DDL):
1. create/drop – database, table,
index, constraint
2. alter – database, table, index,
constraint
Реляционные БД

Все дальнейшие примеры для
выполнения на MySQL 5.x
SQL

Создание БД:
create database `omsu`
character set utf8
collate utf8_general_ci;
SQL

Таблица «Факультет»:

create table `Department`(
id int(20) not null,
name varchar(50) not null,
primary key(id)
) engine=InnoDB character set=utf8;
SQL

Индекс на таблицу «Факультет»:
create unique index
`Department_unique` on
Department(name);
SQL

Таблица «Группа»:
create table `Group`(
id int(20) not null,
name varchar(50) not null,
department_id int(20) not null,
primary key(id),
foreign key (department_id) references
Department(id)
) engine=InnoDB character set=utf8;
SQL

Индекс на таблицу «Группа»:
create unique index
`Group_unique` on
Group(department_id, name);
SQL

Data modeling language (DML):
1. insert/update/delete –
модификация данных
2. select – построение множества
кортежей по декларативному
запросу (query)
SQL

Вставка в таблицу «Факультет»:
insert into Department(id, name)
values
(1, ‘ИМИТ’),
(2, ‘Физический’);
SQL

Вставка в таблицу «Группа»:
insert into Group(id, name,
department_id)
values
(1, ‘ММ-01’, 1),
(2, ‘Ф-05-О’, 2),
(3, ‘МП-01’, 1);
SQL

Запрос к таблице «Факультет»:
select name from Department;

ИМИТ
Физический
SQL

Запрос к таблице «Группа»:
select g.*
from Group g inner join Department d
on g.department_id = d.id
where d.name = ‘ИМИТ’;
1, ММ-01
3, МП-01
SQL

Структура запроса:
select <описание кортежа>
from <список таблиц>
[where <условия на исходные>]
[group by <список столбцов>]
[having <условия на группировку>]]
[order by <список столбцов>]
Пример:

SQL

select d.name, count(g.id)
from Group g inner join Department d
on g.department_id = d.id
where d.name like ‘%И%’
group by d.name
having count(g.id) > 1
order by d.name;

ИМИТ, 2

More Related Content

Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08