- •Введение
- •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. Методические аспекты реализации нормализации
- •Контрольные вопросы
Запрос с соединением по нескольким полям
В БД "Разработчики ПП" (Рис. 0 .24) указать Названия ПП, № и ФИО разработчиков, выступающих и как руководители ВТК, и как программисты в них.
Алгоритм реализации
Выделим названия РТ, задействованных в реализации запроса. Это РТ: "Разработанные ПП" (R3), "Разработчики" (R1), "Временные трудовые коллективы (ВТК)" (R4), "Составы ВТК" (R5), "Программисты" (R2).
Для выявления разработчиков ПП, выступающих одновременно и как руководители ВТК, объединим таблицы R3 и R4. Здесь общим полем является №Разр-ка - №Разр-каРук-ляВТК:
RT1 = R3 join R4:
RT1:
№ПП |
Назв-еПП |
№Разр-ка-Рук-ляВТК |
ГодСзд-я |
№ВТК |
Назв-еВТК |
№Ком-ты |
P1 |
ПП1 |
R5 |
1982 |
B1 |
Луч |
12 |
P2 |
ПП2 |
R2 |
1984 |
B3 |
Взлет |
12 |
P4 |
ПП3 |
R2 |
1987 |
B3 |
Взлет |
12 |
P5 |
ПП4 |
R3 |
1985 |
B2 |
Стрела |
18 |
Для экономии памяти ПК и увеличения быстродействия выберем из RT1 лишь участвующие в запросе поля:
RT2 = proj Назв-еПП, №Разр-ка-Рук-ляВТК, №ВТК(RT1):
RT2: |
НазваниеПП |
№Рразр-ка-Рук-ляВТК |
№ВТК |
|
ПП1 |
R5 |
B1 |
|
ПП2 |
R2 |
B3 |
|
ПП3 |
R2 |
B3 |
|
ПП4 |
R3 |
B2 |
Для определения Разработчиков-Руководителей ВТК, являющихся одновременно и программистами, соединим RT2 и R2 по одному общему полю: №Разр-каРук-ляВТК - №Разр-ка-Прогр-та:
RT3 = RT2 join R2:
RT3:
Назв-еПП |
№Разр-ка-Рук-ля ВТК |
№ВТК |
№Прог-та |
Язык-Прогр-я |
Категория-Прогр-та |
ПП1 |
R5 |
B1 |
A3 |
Pas |
3 |
ПП2 |
R2 |
B3 |
A2 |
C |
2 |
ПП2 |
R2 |
B3 |
A5 |
Pas |
2 |
ПП3 |
R2 |
B3 |
A2 |
C |
2 |
ПП3 |
R2 |
B3 |
A5 |
Pas |
2 |
5) Выберем из RT3 лишь участвующие в запросе поля:
RT4=projНазв-еПП,№Разр-ка-Рук-ляВТК,№ВТК,№Пр-та(RT3):
RT4:
НазваниеПП |
№Разр-ка-Рук-ляВТК |
№ВТК |
№Прогр-та |
ПП1 |
R5 |
B1 |
A3 |
ПП2 |
R2 |
B3 |
A2 |
ПП2 |
R2 |
B3 |
A5 |
ПП3 |
R2 |
B3 |
A2 |
ПП3 |
R2 |
B3 |
A5 |
6) Для определения разработчиков-руководителей ВТК, являющихся программистами именно в своих ВТК, сделаем соединение таблиц RT4 и R5 по двум полям: №ВТК и №Прогр-та:
RT5 = RT4 join R5:
RT5:
НазваниеПП |
№Разр-ка-Рук-ляВТК |
№ВТК |
№Прогр-та |
ПП1 |
R5 |
B1 |
A3 |
ПП2 |
R2 |
B3 |
A5 |
ПП3 |
R2 |
B3 |
A5 |
7) Выберем из RT5 участвующие в запросе поля:
RT6 = proj Назв-еПП, №Разр-ка-Рук-ляВТК (RT5):
RT6: |
НазваниеПП |
№Разр-ка-Рук-ляВТК |
|
ПП1 |
R5 |
|
ПП2 |
R2 |
|
ПП3 |
R2 |
8) Для полного ответа на запрос объединим таблицы RT6 и R1 с последующим выделением полей, указанных в запросе:
RT7 = RT6 join R1:
RT7:
Назв-еПП |
№Разр-ка |
№Разр-ка-Рук-ля ВТК |
ФИО Разр-ка |
Год- Рождения |
Стаж |
ПП1 |
R5 |
R5 |
Крылов Г. |
1964 |
10 |
ПП2 |
R2 |
R2 |
Крылов Г. |
1962 |
17 |
ПП3 |
R2 |
R2 |
Крылов Г. |
1962 |
17 |
RT8 = proj Назв-еПП, №Разр-ка, ФИОРазр-ка (RT7):
RT8: |
НазваниеПП |
№Разр-ка |
ФИОРазр-ка |
|
ПП1 |
R5 |
Крылов Г. |
|
ПП2 |
R2 |
Крылов Г. |
|
ПП3 |
R2 |
Крылов Г. |
Таким образом, алгоритм ответа на запрос можно записать в виде:
proj Назв-еПП,№Разр-ка-Рук-ляВТК(proj Назв-еПП,
6 4
№Разр-ка-Рук-ляВТК,№ВТК,№Прогр-та(proj Назв-еПП,
2
№Разр-ка-Рук-ляВТК(Разр-ыеПП joinВТК) join Прогр-ты)
1 3
join СоставыВТК) join Разр-ки
5 7
Примечание: Цифры под операторами обозначают порядковые номера их выполнения.