- •Оглавление
- •Блок базы данных
- •1. Понятия банка данных. Компоненты банков данных и их краткая характеристика.
- •2. Языковые средства субд
- •3. Классификация Баз Данных
- •4. Этапы проектирования баз данных.
- •Тсп для даталогического проектирования
- •Тсп для физического проектирования
- •5. Инфологическое (концептуальное) моделирование.
- •7. Case -средства проектирования бд
- •9. Реляционные модели. Основные понятия.
- •10. Реляционные модели. Нормальные формы отношений
- •5Nf. Декомпозиция без потерь
- •11. Реляционные модели. Нормализация отношений.
- •12. Реляционные алгебры.
- •13. Факторы, влияющие на проектирование баз данных.
- •1. Специфика предметной области:
- •2. Особенности требуемой обработки информации:
- •3. Характеристика пользователей системы:
- •15. Ограничения целостности. Понятие и классификация.
- •16. Возможности задания ограничений целостности в современных субд.
12. Реляционные алгебры.
Реляционная алгебра — формальная система манипулирования отношениями в реляционной модели данных. Существует в двух несколько различающихся вариантах:
-
алгебра Кодда (Э. Кодд, 1970)
-
алгебра A (К. Дейт, Х. Дарвен)
Наряду с реляционным исчислением является способом получения результирующего отношения в реляционной модели данных.
Реляционная алгебра представляет собой набор операторов, использующих отношения в качестве аргументов и возвращающих отношения в качестве результата. Таким образом, реляционный оператор f выглядит как функция с отношениями в качестве аргументов:
R = f(R1, R2, …, Rn)
Реляционная алгебра является замкнутой, так как в качестве аргументов в реляционные операторы можно подставлять другие реляционные операторы, подходящие по типу:
R = f(f1(R11, R12, …), f2(R21, R22,…),…)
В реляционных выражениях можно использовать вложенные выражения сколь угодно сложной структуры.
Каждое отношение обязано иметь уникальное имя в пределах базы данных. Имя отношения, полученного в результате выполнения реляционной операции, определяется в левой части равенства. Однако можно не требовать наличия имён от отношений, полученных в результате реляционных выражений, если эти отношения подставляются в качестве аргументов в другие реляционные выражения. Такие отношения называют неименованными отношениями. Неименованные отношения реально не существуют в базе данных, а только вычисляются в момент вычисления значения реляционного оператора.
Традиционно, по алгебре Кодда, определяют восемь реляционных операторов, объединенных в две группы.
Теоретико-множественные операторы:
-
Объединение
-
Пересечение
-
Вычитание
-
Декартово произведение
Специальные реляционные операторы:
-
Выборка
-
Проекция
-
Соединение
-
Деление
Не все они являются независимыми, т.е. некоторые из этих операторов могут быть выражены через другие реляционные операторы.
Будем называть отношения совместимыми по типу, если они имеют идентичные заголовки, а именно:
-
Отношения имеют одно и то же множество имен атрибутов, т.е. для любого атрибута в одном отношении найдется атрибут с таким же наименованием в другом отношении,
-
Атрибуты с одинаковыми именами определены на одних и тех же доменах.
Теоретико-множественные операторы
Объединение
Объединением двух совместимых по типу отношений А и В называется отношение с тем же заголовком, что и у отношений А и В , и телом, состоящим из кортежей, принадлежащих или А, или В, или обоим отношениям. Объединение, как и любое отношение, не может содержать одинаковых кортежей. Поэтому, если некоторый кортеж входит и в отношение А, и отношение В, то в объединение он входит один раз.
Пример:
Пусть даны два отношения и с информацией о сотрудниках:
|
Табельный номер |
Фамилия |
Зарплата |
|
1 |
Иванов |
1000 |
|
2 |
Петров |
2000 |
|
3 |
Сидоров |
3000 |
|
Табельный номер |
Фамилия |
Зарплата |
|
1 |
Иванов |
1000 |
|
2 |
Пушников |
2500 |
|
4 |
Сидоров |
3000 |
Объединение отношений будет иметь вид:
|
Табельный номер |
Фамилия |
Зарплата |
|
1 |
Иванов |
1000 |
|
2 |
Петров |
2000 |
|
3 |
Сидоров |
3000 |
|
2 |
Пушников |
2500 |
|
4 |
Сидоров |
3000 |
Пересечение
Пересечением двух совместимых по типу отношений А и В называется отношение с тем же заголовком, что и у отношений А и В, и телом, состоящим из кортежей, принадлежащих одновременно обоим отношениям А и В.
Пример:
Для тех же отношений А и В, что и в предыдущем примере пересечение имеет вид:
|
Табельный номер |
Фамилия |
Зарплата |
|
1 |
Иванов |
1000 |
Вычитание
Вычитанием двух совместимых по типу отношений А и В называется отношение с тем же заголовком, что и у отношений А и В, и телом, состоящим из кортежей, принадлежащих отношению А и не принадлежащих отношению В.
Пример:
Для тех же отношений А и В, что и в предыдущем примере пересечение имеет вид:
|
Табельный номер |
Фамилия |
Зарплата |
|
2 |
Петров |
2000 |
|
3 |
Сидоров |
3000 |
Декартово произведение
Декартовым
произведением двух отношений А(А1,
А2,…, Аn) и
В(В1, В2, … , Вm
) называется отношение, заголовок
которого является сцеплением заголовков
отношений А и В : (А1, А2,…,
Аn , В1, В2,
… , Вm ), а тело
состоит из кортежей, являющихся
сцеплением кортежей отношений А и В:
(а1, а2,…, аn
, b1, b2,
… , bm
), таких, что (а1, а2,…, аn)
A, (b1,
b2, … , bm
)
B.
Пример:
Пусть даны два отношения А и В с информацией о поставщиках и деталях:
|
Номер поставщика |
Наименование поставщика |
|
1 |
Иванов |
|
2 |
Петров |
|
3 |
Сидоров |
|
Номер детали |
Наименование детали |
|
1 |
Болт |
|
2 |
Гайка |
|
3 |
Винт |
Декартово произведение отношений будет иметь вид:
|
Номер поставщика |
Наименование поставщика |
Номер детали |
Наименование детали |
|
1 |
Иванов |
1 |
Болт |
|
1 |
Иванов |
2 |
Гайка |
|
1 |
Иванов |
3 |
Винт |
|
2 |
Петров |
1 |
Болт |
|
2 |
Петров |
2 |
Гайка |
|
2 |
Петров |
3 |
Винт |
|
3 |
Сидоров |
1 |
Болт |
|
3 |
Сидоров |
2 |
Гайка |
|
3 |
Сидоров |
3 |
Винт |
Специальные реляционные операторы
Выборка (ограничение, селекция)
Выборкой (ограничением, селекцией) на отношении А с условием С называется отношение с тем же заголовком, что и у отношения А, и телом, состоящем из кортежей, значения атрибутов которых при подстановке в условие С дают значение ИСТИНА. С представляет собой логическое выражение, в которое могут входить атрибуты отношения А и (или) скалярные выражения.
В простейшем случае условие С имеет вид XΘY, где Θ - один из операторов сравнения (<,>,=, ≠,≤,≥, и т.д.), а X и Y - атрибуты отношения А или скалярные значения. Такие выборки называются Θ-выборки (тэта-выборки) или Θ-ограничения, Θ-селекции.
Пример:
Пусть дано отношение с информацией о сотрудниках:
|
Табельный номер |
Фамилия |
Зарплата |
|
1 |
Иванов |
1000 |
|
2 |
Петров |
2000 |
|
3 |
Сидоров |
3000 |
Результат выборки с условием С – зарплата < 3000 будет иметь вид:
|
Табельный номер |
Фамилия |
Зарплата |
|
1 |
Иванов |
1000 |
|
2 |
Петров |
2000 |
Проекция
Проекцией отношения А по атрибутам X,Y,…,Z , где каждый из атрибутов принадлежит отношению A, называется отношение с заголовком (X,Y,…,Z) и телом, содержащим множество кортежей вида (x,y,…,z) таких, для которых в отношении A найдутся кортежи со значением атрибута X равным x, значением атрибута Y равным y, …, значением атрибута Z равным z.
Операция проекции дает "вертикальный срез" отношения, в котором удалены все возникшие при таком срезе дубликаты кортежей.
Пример:
Пусть дано отношение с информацией о поставщиках, включающих наименование и месторасположение:
|
Номер поставщика |
Наименование поставщика |
Город поставщика |
|
1 |
Иванов |
Уфа |
|
2 |
Петров |
Москва |
|
3 |
Сидоров |
Москва |
|
4 |
Сидоров |
Челябинск |
Проекция по атрибуту [город поставщика] будет иметь вид:
|
Город поставщика |
|
Уфа |
|
Москва |
|
Челябинск |
Соединение
Соединением отношений А и В по условию С называется отношение, в котором С представляет собой логическое выражение, в которое могут входить атрибуты отношений А и В и (или) скалярные выражения.
Таким образом, операция соединения есть результат последовательного применения операций декартового произведения и выборки. Если в отношениях и имеются атрибуты с одинаковыми наименованиями, то перед выполнением соединения такие атрибуты необходимо переименовать.
Пример:
Рассмотрим некоторую компанию, в которой хранятся данные о поставщиках и поставляемых деталях. Пусть поставщикам и деталям присвоен некий статус. Пусть бизнес компании организован таким образом, что поставщики имеют право поставлять только те детали, статус которых не выше статуса поставщика (смысл этого может быть в том, что хороший поставщик с высоким статусом может поставлять больше разновидностей деталей, а плохой поставщик с низким статусом может поставлять только ограниченный список деталей, важность которых (статус детали) не очень высока).
|
Номер поставщика |
Наименование поставщика |
X (Статус поставщика) |
|
1 |
Иванов |
4 |
|
2 |
Петров |
1 |
|
3 |
Сидоров |
2 |
|
Номер детали |
Наименование детали |
Y (Статус детали) |
|
1 |
Болт |
3 |
|
2 |
Гайка |
2 |
|
3 |
Винт |
1 |
Ответ на вопрос "какие поставщики имеют право поставлять какие детали?" дает соединение:
|
Номер поставщика |
Наименование поставщика |
X(Статус поставщика) |
Номер детали |
Наименование детали |
Y(Статус детали) |
|
1 |
Иванов |
4 |
1 |
Болт |
3 |
|
1 |
Иванов |
4 |
2 |
Гайка |
2 |
|
1 |
Иванов |
4 |
3 |
Винт |
1 |
|
2 |
Петров |
1 |
3 |
Винт |
1 |
|
3 |
Сидоров |
2 |
2 |
Гайка |
2 |
|
3 |
Сидоров |
2 |
3 |
Винт |
1 |
Деление
Пусть
даны отношения А(X1,
X2,…, Xn,
Y1, Y2,…,
Ym) и
B(Y1,
Y2,…, Ym),
причем атрибуты Y1,
Y2,…, Ym
- общие для двух отношений. Делением
отношений A на B
называется отношение с заголовком (X1,
X2,…, Xn)
и телом, содержащим множество кортежей
(x1, x2,…,
xn)
, таких, что для всех кортежей (y1,
y2,…, ym)
B в отношении A
найдется кортеж (x1,
x2,…, xn,
y1, y2,…,
ym).
Отношение A выступает в роли делимого, отношение B выступает в роли делителя. Деление отношений аналогично делению чисел с остатком.
Типичные запросы, реализуемые с помощью операции деления, обычно в своей формулировке имеют слово "все" - "какие поставщики поставляют все детали?".
Пример:
В примере с поставщиками, деталями и поставками ответим на вопрос, "какие поставщики поставляют все детали?".
В качестве делимого возьмем таблицу, содержащую номера поставщиков и номера поставляемых ими деталей:
|
Номер поставщика PNUM |
Номер детали DNUM |
|
1 |
1 |
|
1 |
2 |
|
1 |
3 |
|
2 |
1 |
|
2 |
2 |
|
3 |
1 |
В качестве делителя возьмем таблицу, содержащую список номеров всех деталей (не обязательно поставляемых кем-либо):
|
Номер детали DNUM |
|
1 |
|
2 |
|
3 |
Деление дает список номеров поставщиков, поставляющих все детали:
|
Номер поставщика PNUM |
|
1 |
Оказалось, что только поставщик с номером 1 поставляет все детали.
