
- •Вторая часть лекций по базам данных. Модели Данных.
- •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. Многотабличные запросы на выборку (объединения) Простое объединение таблиц (объединение по равенству)
- •Объединение таблиц по неравенству
- •Особенности многотабличных запросов
- •Внутренняя структура объединения таблиц
- •Внешнее объединение таблиц
3.1.3. Многотабличные запросы на выборку (объединения) Простое объединение таблиц (объединение по равенству)
Процесс формирования пар строк путем сравнения содержимого соответствующих столбцов называется объединением таблиц. Таблица, получающаяся в результате формирования пар строк и содержащая данные из обеих таблиц, называется объединением двух таблиц. Объединение на основе точного равенства между двумя столбцами более правильно называется объединением по равенству. Объединения могут быть основаны на других видах сравнения столбцов.
Объединения представляют собой основу многотабличных запросов в SQL. В реляционной базе данных вся информация хранится в виде явных значений данных в столбцах, так что все возможные отношения между таблицами можно сформировать, сопоставляя содержимое соответствующих столбцов. Таким образом, объединения являются мощным (и, к тому же, единственным, ввиду отсутствия указателей) средством выявления отношений, существующих между данными.
Так как в SQL многотабличные запросы выполняются путем сопоставления столбцов, неудивительно, что инструкция SELECT для многотабличного запроса должна содержать условие отбора, которое определяет взаимосвязь между столбцами.
Приведенный запрос очень похож на запросы, рассмотренные в предыдущей главе однако между ними есть два отличия. Во-первых, предложение FROM содержит две таблицы, а не одну. Во-вторых, в условии отбора сравниваются столбцы из двух различных таблиц. Мы будем называть эти столбцы связанными. Данное условие отбора, как и любое другое, уменьшает число строк в таблице результатов запроса. А поскольку запрос двухтабличный, условие отбора на самом деле уменьшает число пар строк в таблице результатов. Фактически в условии отбора заданы те же самые связанные столбцы, которые использовались при выполнении запроса с помощью карандаша и бумаги. Действительно, в этом условии очень хорошо отражена суть сопоставления столбцов, производимого вручную:
“Включить в таблицу результатов запроса только те пары строк, у которых идентификатор в таблице 1 равен идентификатору в таблице 2”.
Объединение таблиц по неравенству
Термин “объединение” применяется к любому запросу, который объединяет данные из двух таблиц базы данных путем сравнения значений в двух столбцах этих таблиц. Самыми распространенными являются объединения, созданные на основе равенства связанных столбцов (объединения по равенству). Кроме того, позволяет объединять таблицы с помощью других операций сравнения.
Особенности многотабличных запросов
Многотабличные запросы, рассмотренные до сих пор, не требовали применения специальных синтаксических форм или каких-либо других особенностей языка SQL помимо тех, что использовались для создания однотабличных запросов. Однако некоторые многотабличные запросы нельзя создать без использования дополнительных особенностей языка SQL. В частности:
иногда в многотабличных запросах требуется использовать полные имена столбцов, чтобы исключить неоднозначные ссылки на столбцы;
в многотабличных запросах особый смысл имеет выбор всех столбцов (SELECT*);
для создания многотабличных запросов, связывающих таблицу саму с собой, создаются самообъединения;
в предложении часто используются псевдонимы таблиц, чтобы упростить полные имена столбцов и обеспечить однозначность ссылок на столбцы в самообъединении.
Псевдонимы таблиц необходимы в запросах, включающих самообъединения. Однако псевдоним можно использовать в любом запросе (например, если запрос касается таблицы другого пользователя или если имя таблицы очень длинное и употреблять его в полных именах столбцов утомительно).
На рис. изображена структура предложения FROM для многотабличной инструкции sELECY, содержащей псевдонимы таблиц. Это предложение выполняет две важные функции.
В предложении FROM перечислены все таблицы, из которых извлекаются данные. Любой столбец, указанный в инструкции SELECT, должен принадлежать одной из таблиц, заданных в предложении FROM.
Предложение FROM содержит метку таблицы, которая в инструкции FROM используется для идентификации таблицы в полном имени столбца. Если в предложении FROM вводится псевдоним таблицы, то он становится ее меткой; в противном случае меткой становится имя таблицы в том виде, в каком оно присутствует в предложении FROM.
Единственное требование, предъявляемое к меткам таблиц в предложении FROM, состоит в том, что все они должны отличаться друг от друга.