
- •Вторая часть лекций по базам данных. Модели Данных.
- •2.1. Базы данных, субд, банк данных.
- •1. Определение структуры создаваемой базы данных, ее инициализация и проведение начальной загрузки.
- •2. Предоставление пользователям возможности манипулирования данными (выполнение вычислений, разработка интерфейса ввода/вывода, визуализация).
- •3. Обеспечение логической и физической независимости данных.
- •4. Защита логической целостности базы данных.
- •5. Защита физической целостности.
- •6. Управление полномочиями пользователей на доступ к базе данных.
- •7. Синхронизация работы нескольких пользователей.
- •8. Управление ресурсами среды хранения.
- •9. Поддержка деятельности системного персонала.
- •2.2. Различные модели организации работы пользователей с базой данных
- •2.2.1. Модель с централизованной архитектурой
- •2.2.2. Модель с автономными персональными эвм
- •2.2.3. Модель вычислений с сетью и файловым сервером (архитектура «файл-сервер»)
- •2.2.4. Распределенная модель вычислений (архитектура «клиент – сервер»)
- •2.2.5. Распределенная модель вычислений (Клиент – сервер. Трехзвенная (многозвенная) архитектура)
- •2.3. Концептуальное моделирование базы данных
- •2.3.1. Сложный пример предметной области
- •2.3.2. Способы описания предметной области
- •2.3.3. Описание информационного представления предметной области
- •2.3.4. Описание информационных потребностей пользователя
- •2.3.5. Различные представления о данных в базах данных
- •2.3.6. Построение концептуальной модели
- •2.3.7. Средства автоматизированного проектирования концептуальной модели
- •2.4. Модели данных субд как инструмент представления концептуальной модели
- •2.4.1. Общие представления о модели данных
- •2.4.2. Сетевая модель данных
- •2.4.3. Иерархическая модель данных
- •2.4.4. Реляционная модель данных
- •2.5. Базовые понятия реляционной модели данных
- •2.5.1. Общая характеристика реляционной модели данных
- •1. Типы данных
- •2. Домены
- •3. Отношения, атрибуты, кортежи отношения
- •3. Свойства отношений
- •4. Первая нормальная форма
- •2.5.2. Манипулирование данными в реляционной модели
- •1. Объединение
- •2. Пересечение
- •3. Вычитание
- •4. Декартово произведение
- •5. Выборка (ограничение, селекция)
- •6. Проекция
- •7. Соединение
- •8. Деление
- •3.2.2. 1Нф (Первая Нормальная Форма)
- •3.2.3. Функциональные зависимости
- •3.2.4. 2Нф (Вторая Нормальная Форма)
- •3.2.5. 3Нф (Третья Нормальная Форма)
- •3.2.6. Алгоритм нормализации (приведение к 3нф)
- •3.2.7. Сравнение нормализованных и ненормализованных моделей
- •3.2.8. Нфбк (Нормальная Форма Бойса-Кодда)
- •3.2.9. 4Нф (Четвертая Нормальная Форма)
- •3.2.10. 5Нф (Пятая Нормальная Форма)
- •3.2.11. Продолжение алгоритма нормализации (приведение к 5нф)
- •3.3. Элементы модели "сущность-связь"
- •3.3.1. Основные понятия er-диаграмм
- •3.3.2. Пример разработки простой er-модели
- •3.3.2. Концептуальные и физические er-модели
- •Типы данных
- •Константы
- •Выражения
- •Встроенные функции
- •Отсутствующие значения
- •3.1.2. Простые запросы на выборку
- •Инструкция select
- •Простые запросы
- •Повторяющиеся строки (предикат distinct)
- •Отбор строк (предложение where)
- •Условие отбора
- •Составные условия отбора (операторы or, and, not)
- •Сортировка результатов запроса (предложение order by)
- •Объединение результатов нескольких запросов (оператор union)
- •3.1.3. Многотабличные запросы на выборку (объединения) Простое объединение таблиц (объединение по равенству)
- •Объединение таблиц по неравенству
- •Особенности многотабличных запросов
- •Внутренняя структура объединения таблиц
- •Внешнее объединение таблиц
Внутренняя структура объединения таблиц
Для простых объединений таблиц довольно легко написать правильную инструкцию SELECT на основе запроса, выраженного на обычном языке. И наоборот, глядя на инструкцию SELECT можно легко определить, что она делает. Однако если в объединении участвует много таблиц или используется сложное условие отбора бывает не так-то просто понять, какую функцию выполняет та или иная инструкция SELECT. По этой причине необходимо дать более точное определение понятию “объединение”.
Умножение таблиц
Объединение — это частный случай более общей комбинации данных из двух таблиц известной под названием декартово произведение (или просто произведение) двух таблиц. Произведение двух таблиц представляет собой таблицу (называемую таблицей произведения), состоящую из всех возможных пар строк обеих таблиц Столбцами таблицы произведения являются все столбцы первой таблицы, за которыми следуют все столбцы второй таблицы. На рис. изображен пример произведения двух маленьких таблиц.
Если создать запрос к двум таблицам без предложения WHERE, то таблица результат запроса окажется произведением двух таблиц.
Два приведенных выше запроса указывают на важную связь между объединениями и произведением:
“Объединение двух таблиц является произведением этих таблиц, из которого удалены некоторые строки. Удаляются именно те строки, которые не удовлетворяют условию сравнения связанных столбцов (условию отбора) для данного объединения”.
Понятие произведения важно, так как оно входит в формальное определение правил выполнения многотабличных запросов на выборку, приведенное в следующем параграфе.
Внешнее объединение таблиц
Операция объединения в SQL соединяет информацию из двух таблиц, формируя пары связанных строк из этих двух таблиц. Объединенную таблицу образуют пары тех строк из различных таблиц, у которых в связанных столбцах содержатся одинаковые значения. Если строка одной из таблиц не имеет пары, то объединение может привести к неожиданным результатам. Это иллюстрируют следующие далее запросы.
Такие результаты запроса получаются с помощью другой операции объединения, называемой внешним объединением таблиц (в предложении WHERE Оно обозначается символами *=). Внешнее объединение является расширением стандартного объединения, описанного ранее в настоящей главе и иногда называемого внутренним объединением таблиц. В стандарте SQL1 дано определение только внутреннего объединения; понятие внешнего объединения в нем отсутствует. Ранние СУВД фирмы IВМ также поддерживают только внутреннее объединение. Однако внешнее объединение является понятной и полезной частью реляционной модели базы данных и реализовано во многих СУВД.
Чтобы понять смысл внешнего объединения, будет полезно отвлечься от учебной базы данных и рассмотреть две простые таблицы, изображенные на рис. 7.12. В таблице iIЗ находится список пяти девочек и городов, в которых они живут; в таблице вов содержится список пяти мальчиков и их городов. Чтобы найти пары девочек и мальчиков, живуiдих в одном и том же городе, можно использовать следующий запрос, формирующий внутреннее объединение двух таблиц:
С1iiсао
Внутреннее объединение дает четыре строки в таблице результатов запроса. Обратите внимание, что две девочки (Анна (Аййе) и Нэнси (Т\апсу)) и два мальчика (джеймс (Зайiе8) и джордж (6еоге)) не представлены в таблице результатов запроса. Эти строки не имеют пары в другой таблице и поэтому отсутствуют в таблице результатов внутреннего объединения. Две несвязанные строки (Анна и джеймс) имеют действительные значения в столбцах сiт, но они не совпалают ни с одним городом в противоположной таблице. Две другие несвязанные строки (Нэнси и джордж) имеют в столбцах сiт значение жы, а по правилам Е значение Ы[)II не равно iшкакому другому значению (даже другому значению жзы).
Предположим, что вы хотите вывести список пар девочка/мальчик, живуiдих в одних и тех же городах, и включить в него девочек и мальчиков без пары. Этот результат дает внешнее объединение таблиц и ВО. Схема формирования внешнего объединения изображена на рис. 7.12, а в табл. 7.2 приведена последовательность построения внешнего объединения. Вот инструкция $Е, дающая в результате внешнее объединение:
Внешнее объединение двух таблиц содержит восемь строк Четыре строки идентичны строкам внутреннего объединения этих таблиц две другие строки, для Анны и Ннси, являются несвязанными строюiми таблицы iiз Эти строки были расiциреiiы значениями жзы, т е приравненьг к воображаемой строке таблицы ВОУЗ. содержащей только значения и добавлены в результаты запроса две последние строки, для джеймса и джорджа, являются несвязанньгми строками таблицы ВОУЗ Эти строки также были расiцирень значениями жзы. (приравнены к воображаемой строке таблиIIы содержащей только значения ышi) и добавлены в результаты запроса
Как видно из этого примера, внешнее объединение является объединением, “сохраняющим информацию” Каждая строка таблицы воуз представлена в таблице результатоi запроса (некоторые более одного раза) Аналогично, каждая строка таблиi СIIЗ представлена в таблице результатов (некоторые, опять-таки, более одного раза)