- •А.И. Костюк
- •Введение
- •1. Данные
- •1.1. Источники данных
- •1.1.1. Предметная область
- •1.1.2. Объект
- •1.1.3. Атрибуты (элементы данных)
- •1.2. Значение данных
- •1.2.1. Ключевой элемент данных
- •1.2.2. Запись данных
- •1.2.3. Файл данных
- •1.3. Недостатки традиционной организации файлов данных
- •1.4. База данных
- •1.4.1. Определение базы данных
- •1.4.2. Система управления базами данных
- •1.4.3. Недостатки интеграции данных
- •1.5. Администратор базы данных
- •1.6. Независимость данных
- •1.6.1. Два уровня независимости данных
- •1.6.2. Способы достижения независимости данных
- •1.7. Словарь данных
- •1.8.Принципы проектирования базы данных и достижения требуемых эксплуатационных характеристик
- •2. Администрирование базы данных
- •2.1. Функция администрирования базы данных
- •2.1.1. Обязанности абд
- •2.1.2. Абд и администрация предприятия
- •2.1.3. Абд и пользователи
- •2.1.4. Абд и разработчики прикладных программ
- •2.1.5. Абд и системная группа
- •2.1.6. Абд и эксплуатационная группа
- •2.1.7. Абд и поставщики программного обеспечения
- •2.1.8. Абд и поставщики аппаратных средств
- •2.2. Жизненный цикл системы с базой данных
- •2.2.1. Проектирование базы данных (этап 1)
- •2.2.2. Материализация базы данных (этап 2)
- •2.2.3. Конвертирование существующих наборов данных и прикладных программ во вновь созданную базу данных (этап 3)
- •2.2.4. Интеграция конвертированных и новых прикладных программ для работы в среде вновь созданной базы данных (этап 4)
- •2.2.5. Эксплуатация (этап 5)
- •2.2.6. Развитие, совершенствование и сопровождение (этап 6)
- •2.3. Абд, группа абд и ее обязанности
- •3. Словарь данных
- •3.1. Что такое словарь данных
- •3.1.1. Назначение
- •3.1.2. Словарь данных и система управления базами данных
- •3.1.3. Интерфейсы
- •3.1.4. Идеальный словарь данных. Требования и организация
- •3.2. Стратегия реализации словаря данных
- •3.2.1. Экономическая целесообразность
- •3.2.2. Условия применения
- •3.2.3. Рекомендации по определению данных
- •4. Модели данных
- •4.1. Что такое модель данных
- •4.2. Взаимосвязи в модели данных
- •4.2.1. Взаимосвязь «один к одному» (между двумя типами объектов)
- •4.2.2. Взаимосвязь «один ко многим» (между двумя типами объектов)
- •4.2.3. Взаимосвязь «многие ко многим» (между двумя типами объектов)
- •4.2.4. Взаимосвязь «один к одному» (между двумя атрибутами)
- •4.2.5. Взаимосвязь «один ко многим» (между двумя атрибутами)
- •4.2.6. Взаимосвязь «многие ко многим» (между двумя атрибутами)
- •4.2.7. Обзор моделей данных
- •4.3. Реляционная модель данных
- •4.3.1. Достоинства модели
- •4.3.2. Недостатки модели
- •4.4. Иерархическая модель данных
- •4.4.1. Иерархическая древовидная структура
- •4.4.2. Включение и удаление данных
- •4.4.3. Достоинства модели
- •4.4.4. Недостатки модели
- •4.5. Сетевая модель данных
- •4.5.1. Представление взаимосвязи «один ко многим»
- •4.5.2. Дополнительные классы наборов
- •4.5.3. Операции включения и удаления в сетевой модели данных
- •4.5.4. Достоинства модели
- •4.5.5. Недостатки модели
- •5. Проектирование концептуальной модели данных
- •5.1. Анализ данных
- •5.1.1. Сбор информации о данных, используемых в существующих прикладных программах
- •5.1.2. Сбор информации о данных для перспективных приложений
- •5.2. Нормализация отношений
- •5.3. Графическое представление
- •6. Проектирование логической модели данных
- •6.1. Отображение на реляционную модель данных
- •6.2. Отображение на иерархическую модель данных
- •6.3. Отображение на сетевую модель данных
- •7. Физическая модель данных
- •7.1. Интерфейсы между пользователем и базой данных
- •7.2. Методы доступа внутренней модели (физической)
- •7.2.1. Физический последовательный метод доступа
- •7.2.2. Индексно-последовательный метод доступа
- •7.2.3. Индексно-произвольный метод доступа
- •7.2.4. Инвертированный метод доступа
- •7.2.5. Прямой метод доступа
- •7.2.6. Метод доступа посредством хеширования
- •7.3. Методы доступа внешней модели (представления пользователя)
- •8. Языкsql
- •8.1. Состав языка sql
- •8.2. Реляционные операции. Команды языка манипулирования данными
- •Команда select Простейшие конструкции команды select
- •Список полей
- •Все поля
- •Все поля в произвольном порядке
- •Вычисления
- •Литералы
- •Конкатенация
- •Использование квалификатора as
- •Работа с датами
- •Агрегатные функции
- •Предложение from команды select
- •Ограничения на число выводимых строк
- •Is null
- •Операции сравнения
- •Between
- •Containing
- •Is null
- •Логические операторы
- •Преобразование типов (cast)
- •Изменение порядка выводимых строк (order by)
- •Упорядочивание с использованием имен столбцов
- •Упорядочивание с использованием номеров столбцов
- •Устранение дублирования (модификатор distinct)
- •Соединение (join)
- •Внутренние соединения
- •Самосоединения
- •Внешние соединения
- •9. Общая характеристика баз знаний и экспертных систем
- •9.1. Терминология
- •9.2. Принципы, структура и функции систем баз знаний (сбз)
- •9.3. Классификация инструментальных средств построения сбз
- •Литература
- •Содержание
- •1. Данные 6
- •2. Администрирование базы данных 21
- •3. Словарь данных 43
- •4. Модели данных 57
- •5. Проектирование концептуальной модели данных 82
Соединение (join)
Операция соединения используется в языке SQL для вывода связаннойинформации, хранящейся в нескольких таблицах, в одном запросе. В этом проявляется одна из наиболее важных особенностей запросов SQL - способность определять связи между многочисленными таблицами и выводить информацию из них в рамках этих связей. Именно эта операция придает гибкость и легкость языку SQL.
Операции соединения подразделяются на два вида: внутренниеивнешние. Оба вида соединений задаются в предложении WHERE запроса SELECT с помощью специальногоусловия соединения. Внешние соединения (о которых мы поговорим позднее) поддерживаются стандартом ANSI-92 и содержат зарезервированное слово “JOIN”, в то время как внутренние соединения (или просто соединения) могут задаваться как без использования такого слова (в стандарте ANSI-89), так и с использованием слова “JOIN” (в стандарте ANSI-92).
Связывание производится, как правило, по первичному ключу одной таблицы и внешнему ключу другой таблицы - для каждой пары таблиц. При этом очень важно учитывать все поля внешнего ключа, иначе результат будет искажен. Соединяемые поля могут (но не обязаны!) присутствовать в списке выбираемых элементов. Предложение WHERE может содержать множественные условия соединений. Условие соединения может также комбинироваться с другими предикатами в предложении WHERE.
Внутренние соединения
Внутреннее соединение возвращает только те строки, для которых условие соединения принимает значение true.
SELECT first_name, last_name, department
FROM employee, department
WHERE job_code = "VP" получить список сотрудников, состоящих в должности “вице- президент”, а также названия их отделов.
FIRST_NAME LAST_NAME DEPARTMENT
=============== ================ ======================
Robert Nelson Corporate Headquarters
Mary S. MacDonald Corporate Headquarters
Robert Nelson Sales and Marketing
Mary S. MacDonald Sales and Marketing
Robert Nelson Engineering
Mary S. MacDonald Engineering
Robert Nelson Finance
Mary S. MacDonald Finance
...
Этот запрос (“без соединения”) возвращает неверный результат, так как имеющиеся между таблицами связи не задействованы. Отсюда и появляется дублирование информации в результирующей таблице. Правильный результат дает запрос с использованием операции соединения:
SELECT first_name, last_name, department
FROM employee, department
WHERE job_code = "VP"
AND employee.dept_no = department.dept_no
имена таблиц
получить список сотрудников, состоящих в должности “вице- президент”, а также названия их отделов.
FIRST_NAME LAST_NAME DEPARTMENT
=============== ================ ======================
Robert Nelson Engineering
Mary S. MacDonald Sales and Marketing
В вышеприведенном запросе использовался способ непосредственного указания таблиц с помощью их имен. Возможен (а иногда и просто необходим) также способ указания таблиц с помощью алиасов (псевдонимов). При этом алиасы определяются в предложении FROM запроса SELECT и представляют собой любой допустимый идентификатор, написание которого подчиняется таким же правилам, что и написание имен таблиц. Потребность в алиасах таблиц возникает тогда, когда названия столбцов, используемых в условиях соединения двух (или более) таблиц, совпадают, а названия таблиц слишком длинны.
Замечание 1: в одном запросе нельзя смешивать использование написания имен таблиц и их алиасов.
Замечание 2: алиасы таблиц могут совпадать с их именами.
SELECT first_name, last_name, department
FROM employee e, department d
WHERE job_code = "VP"
AND e.dept_no = d.dept_no
алиасы таблиц
получить список сотрудников, состоящих в должности “вице- президент”, а также названия их отделов.
FIRST_NAME LAST_NAME DEPARTMENT
=============== ================ ======================
Robert Nelson Engineering
Mary S. MacDonald Sales and Marketing
Пример запроса, соединяющего сразу три таблицы:
SELECT first_name, last_name, job_title,
department
FROM employee e, department d, job j
WHERE d.mngr_no = e.emp_no
AND e.job_code = j.job_code
AND e.job_grade = j.job_grade
AND e.job_country = j.job_country получить список сотрудников с названиями их должностей и названиями отделов.
FIRST_NAME LAST_NAME JOB_TITLE DEPARTMENT
========== ============ ======================= ======================
Robert Nelson Vice President Engineering
Phil Forest Manager Quality Assurance
K. J. Weston Sales Representative Field Office: East Coast
Katherine Young Manager Customer Support
Chris Papadopoulos Manager Research and Development
Janet Baldwin Sales Co-ordinator Pacific Rim Headquarters
Roger Reeves Sales Co-ordinator European Headquarters
Walter Steadman Chief Financial Officer Finance
В данном примере последние три условия необходимы в силу того, что первичный ключ в таблице JOB состоит из трех полей (см. рис.8.1).
Мы рассмотрели внутренние соединения с использованием стандарта ANSI-89. Теперь опишем новый (ANSI-92) стандарт:
условия соединения записываются в предложении FROM, в котором слева и справа от зарезервированного слова “JOIN” указываются соединяемые таблицы;
условия поиска, основанные на правойтаблице, помещаются в предложениеON;
условия поиска, основанные на левойтаблице, помещаются в предложениеWHERE.
SELECT first_name, last_name, department
FROM employee e JOIN department d
ON e.dept_no = d.dept_no
AND department = "Customer Support"
WHERE last_name starting with "P" получить список служащих (а заодно и название отдела), являющихся сотрудниками отдела “Customer Support”, фамилии кото- рых начинаются с буквы “P”.
FIRST_NAME LAST_NAME DEPARTMENT
============= =============== ===================
Leslie Phong Customer Support
Bill Parker Customer Support