- •Метод декомпозиции
- •Рекомендации по разбиению.
- •Алгоритм декомпозиции
- •Четвёртая нормальная форма
- •Контроль целостности данных. Контроль целостности связи.
- •Доменно-ключевая нормальная форма (дкнф)
- •Теоретические языки запросов
- •Реляционная алгебра
- •Переименование атрибутов
- •Расширение
- •Подведение итогов
Теоретические языки запросов
I. Реляционная алгебра.
II. Реляционное исчисление.
Они обладают приблизительно одинаковыми возможностями.
Доказана их эквивалентность.
Известны алгоритмы перевода запросов с одного языка на другой.
Реляционная алгебра
Язык – императивный (в основе), - используют предписание, которое оперирует большинством отношений и атрибутов.
На РА базируется язык запросов SQL.
Конструкция Реляционного счисления носит описательный характер, - более декларативный язык. В основе – понятие предиката (понятие мат. логики).
Построение запросов по образцу:
В качестве операндов и результатов берётся отношение.
Операции делятся на:
1. Классические теоретико-множественные: объединение, разность, пересечение и прямое произведение.
2. Специфические: выборка, проекция, деление и соединение.
Позднее РА, предложенную Коддом, анализировал Дейт: алгебра оказалась избыточной.
Первичные только 5 операций: объединение, разность, прямое произведение, выборка и проекция.
Пример:
Предметная область: Детали:
Поставщик(NP, FIO, S, CP);
Детали(ND, NAME, TYPE, VES, CD);
Поставки(NP, ND, KOL).
Соглашения:
Каждый поставщик перевозит несколько деталей.
Одна и та же деталь может поставляться несколькими поставщиками.
NP |
FIO |
S |
CP |
1 |
Иванов |
20 |
Москва |
2 |
Сидоров |
21 |
Рязань |
3 |
Петров |
15 |
Москва |
4 |
Северов |
12 |
Мурманск |
5 |
Центровой |
18 |
Москва |
ND |
NAME |
TYPE |
VES |
CD |
1 |
болт |
калёный |
30 |
Калуга |
2 |
болт |
медный |
25 |
Москва |
3 |
болт |
нерж. |
35 |
Москва |
4 |
гайка |
калёный |
10 |
Москва |
5 |
гайка |
медный |
12 |
Рязань |
6 |
заклёпка |
дюраль |
8 |
Москва |
NP |
ND |
KOL |
1 |
1 |
300 |
1 |
2 |
500 |
1 |
3 |
350 |
1 |
4 |
300 |
1 |
6 |
400 |
2 |
1 |
500 |
2 |
5 |
700 |
3 |
2 |
200 |
4 |
5 |
100 |
4 |
6 |
1000 |
5 |
3 |
250 |
Рассмотрим операции:
1. Объединение: бинарная; операнды (отношения) должны иметь одинаковую структуру.
Результат: отношение, полученное путём объединения картежей, каждый из которых принадлежит хоть одному отношению.
Синтаксис:
<Отношение 1> UNION <Отношение 2>.
R1:
NP |
FIO |
S |
CP |
1 |
Иванов |
20 |
Москва |
3 |
Петров |
15 |
Москва |
5 |
Центровой |
18 |
Москва |
R2:
NP |
NAME |
S |
CP |
1 |
Иванов |
20 |
Москва |
2 |
Сидоров |
21 |
Рязань |
R1 UNION R2
NP |
FIO |
S |
CP |
1 |
Иванов |
20 |
Москва |
2 |
Сидоров |
21 |
Рязань |
3 |
Петров |
15 |
Москва |
5 |
Центровой |
18 |
Москва |
2. Вычитание: бинарная операция; операнды должны иметь одинаковую структуру.
Синтаксис:
<отношение 1>MINUS<отношение 2>.
Результат: совокупность кортежей, каждый из которых входит в R1 и не входит в R2.
3. Пересечение: бинарная операция; операнды должны иметь одинаковую структуру.
Синтаксис:
R1 INTERSECT R2.
4. Прямое произведение: бинарная операция; операнды могут иметь разную структуру.
Результат: отношение, структура которого получается путём объединения атрибутов операндов.
Синтаксис:
<Отношение 1>TIMES<Отношение 2>;
R1 TIMES R2
NP |
FIO |
S |
CP |
ND |
NAME |
TYPE |
VES |
CD |
1 |
Иванов |
20 |
Москва |
1 |
болт |
калёный |
30 |
Калуга |
-- |
-- |
-- |
-- |
-- |
-- |
-- |
-- |
-- |
5 |
Центровой |
18 |
Москва |
6 |
заклёпка |
дюраль |
8 |
Мурманск |
5. Выборка: одноместная.
Синтаксис:
<Отношение>WHERE<Выражение>;
где <Выр.>, - скалярное (имеет смысл условия).
Результат: отношение с той же структурой, содержащее кортежи с условием <Выр.>.
Пример:
Поставщик WHERE CP = “Москва”:
NP |
FIO |
S |
CP |
1 |
Иванов |
20 |
Москва |
3 |
Петров |
15 |
Москва |
5 |
Центров |
12 |
Москва |
6. Проекция:
Синтаксис:
<Отношение>[<Список атрибутов>];
где <Список атрибутов>; - подмножество атрибутов <Отношение>.
Результат: Отношение, которое получается из исходного путём удаления атрибутов, не вошедших в список.
7. Деление: 2х-местная.
Синтаксис: <Отношение 1>DIVIDEBY<Отношение 2>.
Результат: отношение, содержащее атрибуты <Отношение 1>, не являющиеся атрибутами <Отношение 2>.
8. Соединение:
I. По произвольному условию:
Синтаксис: (<Отношение 1>TIMES<Отношение 2>)WHERE<Выражение>.
II. Особый случай соединения (чаще используется):
а). EQ – соединение. Чтобы его выполнить, <Отношение 1> и <Отношение 2>
должны содержать хотя бы по одному атрибуту, домены которых совпадают.
Пример:
(Поставщик TIMES Детали)WHERE CP=CD;
NP |
FIO |
S |
CD |
ND |
NAME |
TYPE |
VES |
CD |
1 |
Иванов |
20 |
Москва |
2 |
болт |
медный |
25 |
Москва |
1 |
Иванов |
20 |
Москва |
3 |
болт |
нерж. |
35 |
Москва |
-- |
-- |
-- |
-- |
-- |
-- |
-- |
-- |
-- |
всего: 9 строчек будет.
б). Естественное: <Отношение 1>JOIN<Отношение 2>; - должен быть единственный атрибут, который есть в обоих отношениях.
Результат: Отношение, которое имеет структуру
<Отношение 1> + <Отношение 2> (общий атрибут повторяется однажды).