- •Введение
- •1. Концепция информационных систем
- •1.1. Информация и данные предметных областей
- •1.2. Структура банка данных
- •1.2.1. База данных
- •1.2.2. Система управления базами данных
- •1.2.3. Словарь данных
- •1.2.4. Администратор базы данных и его функции
- •1.3. Контрольные вопросы
- •2. Инфомационное моделирование предметных областей для баз данных
- •2.1. Отображение явлений реального мира данными
- •2.2. Инфологическое моделирование по
- •2.3. Трехуровневое представление информационных объектов
- •2.4. Структурные элементы для моделирования данных
- •2.5. Ключи бд
- •2.6. Интеграция полей бд в отношения
- •2.7. Требования интеграции полей в отношения
- •2.8. Обобщенная структура модели данных в бнд
- •2.9. Er-модель бд
- •2.10. Формирование связей сущностей
- •Способ 1. Определение связи сущностей введением дополнительной сущности
- •Способ 2. Определение связей сущностей добавлением в тип сущности общих атрибутов
- •2.11. Бинарные отношения сущностей
- •2.12. Формы представления структур данных
- •2.13. Организация систем бд
- •2.14. Средства поддержки бд
- •2.15. Виды моделей данных для бд
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель данных
- •Контрольные вопросы
- •3. Системы управления базами данных
- •3.1. Функции и состав универсальной субд
- •3.2. Лингвистическое обеспечение субд
- •3.3. Независимость прикладных программ от данных
- •3.4. Операции над данными
- •Селекция данных
- •Обработка данных
- •Запросы к бд
- •3.5. Схема реализации запроса в БнД
- •Распределенная обработка данных
- •Комбинированная обработка данных
- •3.7. Целостность и ограничения целостности данных
- •3.8. Защита данных в бд
- •Контрольные вопросы
- •4.2.2. Вторичный ключ
- •4.3. Функциональные и многозначные зависимости
- •4.3.1. Функциональные зависимости
- •X y (X влечет y).
- •4.3.2. Аксиомы функциональных зависимостей
- •Контрольные вопросы
- •5. Реляционная алгебра
- •5.1. Операции над отношениями
- •5.2. Оператор "объединение" (union)
- •5.3. Оператор "вычитание" (difference)
- •5.4. Оператор "пересечение" (intersection)
- •5.5. Оператор "проектирование" (proj)
- •5.6. Оператор "выбор" (sel)
- •Комбинированный запрос с операторами proj и sel
- •5.7 Оператор "соединение" (join)
- •Запрос с соединением по одному полю
- •Алгоритм реализации
- •Запрос с соединением по нескольким полям
- •Алгоритм реализации
- •Оператор "соединение по условию"
- •5.8. Оператор "умножение" (product)
- •Запрос с оператором умножения
- •Алгоритм реализации
- •5.9. Оператор "деление" (division)
- •5.10. Оптимизация алгоритмов реализации запросов
- •Контрольные вопросы
- •6. Нормализация реляционных бд
- •6.1. Задачи нормализации Бд
- •6.2. Первая нормальная форма
- •6.3. Декомпозиция реляционных таблиц
- •Проблема дублирования, операторы реляционной алгебры для декомпозиции и объединения таблиц
- •Присоединенные записи
- •Теорема Хита
- •Критерий полной декомпозиции с исключением дублирования
- •6.4. Вторая нормальная форма
- •6.5. Третья нормальная форма
- •6.6. Экстранормализационные формы
- •Нормальная форма Бокса-Кодда
- •Четвертая нормальная форма
- •Пятая нормальная форма
- •6.7. Методические аспекты реализации нормализации
- •Контрольные вопросы
5.7 Оператор "соединение" (join)
Функция: на основе двух реляционных таблиц R1 и R2, имеющих одно или несколько полей идентичных типов, формируется реляционная таблица R, состоящая из записей, каждая из которых является конкатенацией, т.е. соединением в одну тех записей таблиц R1 и R2, у которых совпадают значения полей всех идентичных типов.
Следовательно, соединение может быть реализовано двумя способами:
по одному полю;
по нескольким полям.
Если у таблиц R1 и R2 типы полей, по которым выполняется соединение, имеют идентичные имена, то соединение называется естественным. В этом случае в результирующей записи общий тип поля помещается лишь один раз. Если имена разные, то в результирующей записи остается каждый тип поля.
Синтаксис: R = R1 join R2.
Пример 1.
Соединить таблицы R1 и R2 с одним общим полем.
R1: |
A |
B |
R2: |
C |
B |
Ответ: R: |
A |
B |
C | |
|
d |
3 |
|
3 |
a |
|
d |
3 |
a | |
|
h |
7 |
|
3 |
b |
|
d |
3 |
b | |
|
y |
4 |
|
7 |
a |
|
h |
7 |
a | |
|
|
|
|
9 |
c |
|
Пример 2.
Соединить таблицы R1 и R2 с двумя общими полями
-
R1:
A
B
C
R2:
B
C
D
Ответ: R:
A
B
C
D
d
3
a
3
a
c
d
3
a
c
h
7
b
3
a
d
d
3
a
d
y
4
a
4
a
e
y
4
a
e
g
2
c
Запрос с соединением по одному полю
В БД " Разработчики ПП" (рис.5.1) указать названия ПП, созданных в период с 1970 по 1984 гг. включительно, ФИО и стаж разработчиков.
Алгоритм реализации
Выделим названия РТ, задействованных в реализации запроса. Это РТ: "Разработанные ПП" (R3) и "Разработчики" (R1).
Из К3 выберем записи по условию в запросе:
RT1 = sel <(ГодСозд-я >= 1970) and (ГодСозд-я <= 1985)> (R3).
RT1: |
№ПП |
НазваниеПП |
№Разр-ка |
ГодСозд-я |
|
P1 |
ПП1 |
R5 |
1982 |
|
P2 |
ПП2 |
R2 |
1984 |
3) Соединим RT1 и R1 по общему полю №Разр-ка:
RT2 = RT1 join R1.
Таблица RT2 будет иметь вид:
RT2:
№ПП |
Назв-еПП |
№Разр-ка |
ГСозд-я |
ФИОРазр-ка |
ГРожд-я |
Стаж |
P1 |
ПП1 |
R5 |
1982 |
Крылов Г. |
1964 |
10 |
P2 |
ПП2 |
R2 |
1984 |
Крылов Г. |
1962 |
17 |
4) Выбрать из RT2 Название ПП, ФИО и стаж разработчиков:
R = proj НазваниеПП, ФИОРазр-ка, Стаж (RT2)
Результирующая таблица R как ответ на запрос примет вид:
R: |
НазваниеПП |
ФИОРазр-ка |
Стаж |
|
ПП1 |
Крылов Г. |
10 |
|
ПП2 |
Крылов Г. |
17 |
Общий алгоритм реализации запроса можно представить в виде:
proj Назв-еПП, ФИОРазр-ка, Стаж (sel <ГодСозд-я >= 1970 and ГодСозд-я <= 1984> (Разработанные ПП) join Разработчики).