- •Глава 1. Введение.
- •Раздел 2. Основные определения и требования к бд.
- •Раздел 2.1. Определения.
- •Раздел 2.2 Категории баз данных.
- •Раздел 2.3. Требования к бд.
- •Неизбытосность и непротиворечивость.
- •Защита от аппаратных и программных сбоев.
- •Реализация принципа независимости данных
- •Защита данных от несанкционированного доступа.
- •Раздел 3. Системы управления базами данных (субд).
- •Раздел 4. Языковые средства при работе с базами данных.
- •Глава 2. Проектирование логической структуры бд.
- •Раздел 1. Элементы данных и связи.
- •Табельный номер сотрудника
- •Должность сотрудника
- •Раздел 2. Классификация моделей данных.
- •Раздел 2.1. Иерархическая модель данных.
- •Раздел 2.2. Сетевые модели данных.
- •Раздел 2.3. Преобразование сетевых моделей к иерархическому виду.
- •Раздел 3. Реляционная модель данных.
- •Раздел 3.1. Преобразование структурированных данных.
- •Раздел 3.2. Преобразование реляционной схемы бд.
- •Раздел 3.3. Реляционная алгебра.
- •Раздел 4. Нормализация отношений.
- •Раздел 4.1. Функциональная зависимость.
- •Раздел 4.2. Правила логического следствия.
- •Раздел 4.3. Аксиомы функциональных зависимостей.
- •Раздел 5. Вторая нормальная форма (2нф).
- •Раздел 6. Третья нормальная форма (3нф).
Раздел 3.3. Реляционная алгебра.
Теоретической основой языков запросов к реляционным БД является реляционная алгебра. Операндами в реляционной алгебре являются отношения Ri и их реализации – таблицы ri, ki – арность отношения Ri (количество столбцов); ni – количество строк в Ri.
Базисный набор операций:
1. Объединение: R=R1 R2. Результат операции R содержит кортежи из R1 и R2. Ограничения на операнды: а) k1=k2; б) схемы R1 и R2 также должны совпадать; в) дублирующие кортежи в результат включаются только один раз. Пример:
SQL: R1 UNION R2;
2. Разность: R=R1 \ R2. Результат операции R включает в себя кортежи из R1, которых нет в R2. Ограничения на операнды: а) k1=k2; б) схемы R1 и R2 также должны совпадать. Пример:
SQL: к сожалению в стандарте SQL нет соответствующего оператора, например, как в ORACLE: R1 MINUS R2;, поэтому можно воспользоваться другими конструкциями, например: DELETE * FROM R1 WHERE ID IN (SELECT ID FROM R2);, где ID – одиночное значение некоторого выражения, например первичного ключа в R1 и R2.
3. Декартово произведение. R=R1 R2. Результат операции R: каждый кортеж из R1 дополняется кортежем из R2; арность результата – k = k1+k2; n = n1*n2. Результат декартова произведения не может содержать дублирующие кортежи.
Пример: пусть
тогда
SQL: SELECT * FROM R1, R2;
4. Селекция: R = F(Ri), где F - логическая формула над атрибутами из Ri. Результатом операции является таблица R, содержащая те же столбцы, что и Ri и строки из Ri, подстановка которых в F дает значение "истина". Пример: R = C=c1 (R1):
Результат имеет ту же схему, что и аргумент операции (тот же набор столбцов). Кортеж аргумента попадает в результирующее отношение, если при подстановке в формулу F он дает значение «истина».
SQL: SELECT * FROM Ri WHERE F;
Проекция: R = X(Ri), где X - подмножество атрибутов из отношения Ri. Результирующее отношение имеет схему, совпадающую с множеством X, и содержит кортежи отношения Ri, из которых «вырезаны» значения, соответствующие атрибутам X. Дублирующие кортежи из результата удаляются. Вырезка по столбцам. Пример: R = BC(R1)
SQL: SELECT DISTINCTROW FROM R1;
Дополнительный набор операций:
Пересечение:
Те же ограничения, что у второй базисной операции. Результат содержит кортежи, принадлежащие к и к .
Соединение: , где
Эквисоединение: Частный случай соединения, когда есть знак =
Естественное соединение:
Каждый кортеж отношения сопоставляется с каждым кортежем отношения , и если значения одноименных атрибутов совпадают, то объединенный кортеж помещается в результат. Поскольку одноименные атрибуты имеют совпадающие значения, то схема результата не содержит дублированных атрибутов с расширенными именами.
Выражение через базисный набор: R=X(F(R1R2)), где F=i=1,…,k(R1.Ai=R2.Ai) – конъюнкция по всем одноименным атрибутам, X= R1R2 – объединение атрибутов из R1 и R2.
R1 = поставщик ([А1] , [А2] наименование поставщика, [А3] адрес поставщика)
R2 = потребители ([А4] номер потребителя, [А5] наименование потребителя, [А6] адрес потребителя)
R3 =детали ([А7] номер детали, [А8] наименование детали)
R4 = поставка ([А1] номер поставщика, [А4] номер потребителя, [А7] номер детали, [А9] цена детали, [А10] дата поставки)
ФОРМУЛИРУЕМ ЗАПРОС: получить список деталей, которые были поставлены поставщиком , потребителем в период с 20.09.10 по 21.10.10
Для формализации запроса воспользуемся так называемым универсальным реляционным запросом:
Проекция
Свойства операции:
Коммутативность:
Любая операция соединения, в том числе и естественного.
Ассоциативность:
- определена на атрибутах и
- определена на атрибутах и
Свойство проекции:
Свойство селекции:
- определена на атрибутах из
- определена на атрибутах из
Правила формальной оптимизации запроса:
Операция селекции должна выполняться раньше, чем декартово произведение и соединения (см. св-во 4).
Операция проекции должна выполняться раньше, чем декартово произведение и соединение (см. св-во 3).
Операция селекции и проекции должны выполняться совместно.
Порядок выполнения операции должен быть такой, чтобы в системных буферах было минимальное количество памяти для промежуточных результатов (см. св-ва 1,2)
Пример: