- •Введение
- •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. Методические аспекты реализации нормализации
- •Контрольные вопросы
Оператор "соединение по условию"
Функция: из двух РТ R1 и R2 формируется результирующая R оператором join (см. п.5.6), если выполняется заданное условие V: V = P1i G P2j, где G - арифметический оператор сравнения, выбираемый из множества: {=, >, <, >=, <=, <>}; P1i, P2j - типы полей в реляционных таблицах R1 и R2 соответственно. Для оператора G типа равенство оператор join называется эквисоединением.
Синтаксис: R = R1 join R2
P1i G P2j
Пример.
Соединить таблицы R1 и R2 по условию B=D:
R = R1 join R2.
B=D
R1: |
A |
B |
C |
R2: |
D |
E |
Ответ: R: |
A |
B |
C |
D |
E | ||
|
a |
b |
c |
|
a |
u |
|
g |
e |
z |
e |
k | ||
|
d |
u |
p |
|
e |
k |
| |||||||
|
g |
e |
z |
|
5.8. Оператор "умножение" (product)
Функция: для двух РТ R1 и R2 соответственно арности К1 и К2 формируется результирующая R арности (К1 + К2), записи которой представляют собой конкатенацию каждой записи из таблицы R1 с каждой записью из таблицы R2. В таблице R имена полей формируются из двух частей, разделенных точкой. Префиксом имени поля принимается имя таблицы R1 или R2, в зависимости от того, из какой таблицы взято значение поля, а афиксом - соответствующие имена полей из этой таблицы.
Синтаксис: R = R1 product R2.
Пример.
R1: |
A |
B |
R2: |
C |
D |
Ответ: R: |
R1.A |
R1.B |
R2.C |
R2.D |
|
b |
4 |
|
c |
4 |
|
b |
4 |
c |
4 |
|
d |
7 |
|
d |
R |
|
b |
4 |
d |
R |
|
|
|
|
|
|
|
d |
7 |
c |
4 |
|
|
|
|
|
|
|
d |
7 |
d |
R |
Запросы с оператором умножения используются в ответах на запросы, требующие сравнения значений полей различных файлов.
Запрос с оператором умножения
В БД "Разработчики ПП" Перечислить названия и годы создания ПП, разработанных до рождения Фатова Р.
Алгоритм реализации
Для решения поставленной задачи в целях демонстрации примем среди различных возможных алгоритм с использованием оператора умножения.
1) Выделим названия РТ, задействованных в реализации запроса. Это РТ: "Разработчики" (R1), "Разработанные ПП" (R3).
Сформируем таблицу с годом рождения Фатова Р. Для этого сначала выделим его запись из таблицы R1, а затем выберем поле ГодРождения:
RT1 = sel <ФИОРазр-ка = 'Фатов Р.'> (R1)
RT1: |
№Разр-ка |
ФИОРазр-ка |
ГодРожд-я |
Стаж |
|
R3 |
Фатов О. |
1964 |
11 |
RT2 = proj ГодРожд-я(RT1)
-
RT2:
ГодРожд-я
1964
3) Из R3 выделим поля Назв-еПП и ГодСозд-я:
RT3 = proj Назв-еПП, ГодСозд-я(R3)
RT3: |
Назв-еПП |
ГодСозд-я |
|
ПП1 |
1982 |
|
ПП2 |
1984 |
|
ПП1 |
1960 |
|
ПП3 |
1987 |
|
ПП4 |
1985 |
4) Для реализации сравнения по сути запроса выполним произведение таблиц RT2 и RT3:
RT4 = RT2 product RT3
RT4: |
RT2.ГодРожд-я |
RT3.Назв-еПП |
RT3.ГодСозд-я |
|
1964 |
ПП1 |
1982 |
|
1964 |
ПП2 |
1984 |
|
1964 |
ПП1 |
1960 |
|
1964 |
ПП3 |
1987 |
|
1964 |
ПП4 |
1985 |
5) Из RT4 выберем запись по критерию запроса:
RT5 = sel <RT3.ГодСозд-я < RT2.ГодРожд-я> (RT4)
RT5: |
RT2.ГодРожд-я |
RT3.Назв-еПП |
RT3.ГодСозд-я |
|
1964 |
ПП1 |
1960 |
6) Из RT5 выберем поля. необходимых и достаточных для ответа на запрос:
RT6 = proj RT3.Назв-е, RT3.ГодСозд-я(RT5)
RT6: |
RT3.Назв-еПП |
RT3.ГодСозд-я |
|
ПП1 |
1960 |
Таким образом, алгоритм ответа на запрос можно записать в виде:
projRT3.Назв-еПП,RT3.ГодСозд-я(sel<RT3.ГодСозд-я<RT2.Год
6 5
Рожд-я>(projГодРожд-я(sel<ФИОРазр-ка='Фатов'>(R1)product
2 1 4
proj Назв-еПП,ГодСозд-я(R3))).
3
Примечание.
Цифры под операторами обозначают порядковые номера их выполнения.