7. Спецкурс
ОмГУ-‐2014
Схема
реляционной
БД:
1.
Таблицы
–
физическое
представление
отношений
(столбцы
–
атрибуты,
строки
–
кортежи)
Реляционные
БД
8. Спецкурс
ОмГУ-‐2014
Схема
реляционной
БД:
2.
Внешние
файлы
–
для
больших
объемов
данных
(чаще
бинарных)
3.
Индексы
–
уникальные,
поисковые
4.
Ограничения
-‐
первичные
и
внешние
ключи,
формульные
Реляционные
БД
9. Спецкурс
ОмГУ-‐2014
Программный
код
в
реляционных
СУБД:
1.
Триггеры
–
для
реакции
на
события
2.
Хранимые
процедуры
и
функции
–
произвольные
алгоритмы
обработки
данных
Реляционные
БД
10. Спецкурс
ОмГУ-‐2014
Первичный
ключ
(primary
key):
основной
ключ
таблицы,
уникальный
как
следствие,
может
быть
простым
и
составным
(несколько
столбцов)
Реляционные
БД
11. Спецкурс
ОмГУ-‐2014
Внешний
ключ
(foreign
key):
столбцы
таблицы,
значения
которых
являются
подмножеством
первичного
ключа
другой
таблицы
Реляционные
БД
12. Спецкурс
ОмГУ-‐2014
Нормальная
форма:
набор
свойств
отношений,
для
обеспечения
целостности
данных
(1-‐НФ,
2-‐НФ,
3-‐НФ
–
самая
распространенная)
Реляционные
БД
17. Спецкурс
ОмГУ-‐2014
Денормализация
–
снижение
уровня
нормализации,
как
правило
с
целью
повышения
производительности
(чаще
всего
уход
от
3-‐НФ)
Денормализация
БД
25. Спецкурс
ОмГУ-‐2014
Таблица
«Факультет»:
create
table
`Department`(
id
int(20)
not
null,
name
varchar(50)
not
null,
primary
key(id)
)
engine=InnoDB
character
set=u•8;
SQL
26. Спецкурс
ОмГУ-‐2014
Индекс
на
таблицу
«Факультет»:
create
unique
index
`Department_unique`
on
Department(name);
SQL
27. Спецкурс
ОмГУ-‐2014
Таблица
«Группа»:
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=u•8;
SQL
28. Спецкурс
ОмГУ-‐2014
Индекс
на
таблицу
«Группа»:
create
unique
index
`Group_unique`
on
Group(department_id,
name);
SQL
29. Спецкурс
ОмГУ-‐2014
Data
modeling
language
(DML):
1.
insert/update/delete
–
модификация
данных
2.
select
–
построение
множества
кортежей
по
декларативному
запросу
(query)
SQL
30. Спецкурс
ОмГУ-‐2014
Вставка
в
таблицу
«Факультет»:
insert
into
Department(id,
name)
values
(1,
‘ИМИТ’),
(2,
‘Физический’);
SQL
33. Спецкурс
ОмГУ-‐2014
Запрос
к
таблице
«Группа»:
select
g.*
from
Group
g
inner
join
Department
d
on
g.department_id
=
d.id
where
d.name
=
‘ИМИТ’;
1,
ММ-‐01
3,
МП-‐01
SQL
34. Спецкурс
ОмГУ-‐2014
Структура
запроса:
select
<описание
кортежа>
from
<список
таблиц>
[where
<условия
на
исходные>]
[group
by
<список
столбцов>]
[having
<условия
на
группировку>]]
[order
by
<список
столбцов>]
SQL
35. Спецкурс
ОмГУ-‐2014
Пример:
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
SQL
36. Спецкурс
ОмГУ-‐2014
Соединение
таблиц
–
получение
декартова
произведения
таблиц,
ограниченного
условием
соединения
Соединения
37. Спецкурс
ОмГУ-‐2014
Пример:
select
*
from
Group
g,
Department
d
where
g.department_id
=
d.id;
1,
ММ-‐01,
1,
ИМИТ
2,
ФФ-‐01-‐О,
2,
Физический
3,
МП-‐01,
1,
ИМИТ
Соединения
38. Спецкурс
ОмГУ-‐2014
Алгоритмы
соединения
таблиц:
1.
вложенными
циклами
(nested
loops)
–
самый
универсальный
2.
хэшированием
3.
слиянием
сортированных
списков
Соединения
39. Спецкурс
ОмГУ-‐2014
Виды
соединений:
1.
внутреннее
–
inner
join
2.
внешнее
–
outer
join
2.1
левое
–
le;
join
2.1
правое
–
right
join
2.3
полное
–
full
join
3.
перекрестное
–
cross
join
(то
же,
что
‘,’
в
примере
выше)
Соединения
40. Спецкурс
ОмГУ-‐2014
Пример:
select
c.name
from
Student
s
right
join
Chair
c
on
s.chair_id
=
c.id
where
s.chair_id
is
null;
При
отсутствии
нужной
строки
в
таблице
«Студент»,
на
ее
месте
будет
кортеж
из
null
Соединения
42. Спецкурс
ОмГУ-‐2014
Результат
подзапроса
в
where
используется:
1.
в
операциях
сравнения
(скаляр)
2.
принадлежность/не
принадлежность
кортежа
множеству
–
in/not
in
3.
непустота/пустота
множества
–
exists/not
exists
Подзапросы
43. Спецкурс
ОмГУ-‐2014
Пример:
select
c.name
from
Chair
c
where
not
exists
(
select
null
from
Student
s
where
s.chair_id
=
c.id
);
Подзапросы
44. Спецкурс
ОмГУ-‐2014
Операции
с
результатами
запросов:
1.
dis=nct
–
исключение
повторов
2.
union
[all]
-‐
объединение
3.
intersect
–
пересечение
4.
except
–
исключение
строк
2-‐го
множества
из
1-‐го
Подзапросы
45. Спецкурс
ОмГУ-‐2014
Для
дальнейшего
изучения:
1.
хорошие
упражнения
по
SQL
2.
хорошие
лекции
по
БД
Подзапросы