Базы, банки данных

advertisement
Базы, банки данных
Пономарев Алексей
Анатольевич
Лекция №1
Термины и понятия
Информация, данные

Словом “информация” мы будем
обозначать любые сведения о чемлибо, которые могут быть
восприняты, преобразованы,
сохранены и найдены при помощи
ЭВМ.
Данные- это форма, которую
может принять информация


Представление фактов, понятий или команд в
формализованном виде, удобном для пересылки,
интерпретации и обработки человеком или
автоматически.
Любое представление, которому приписано или
может быть приписано какое-то значение.
Данные
Эти определения раскрывают два
различных аспекта понятия.
Первое утверждает, что данные –
это одна из возможных форм
представления информации.
Второе указывает на то, что
данные – это абстракция, символ,
принимающий различные значения.
Предметная область

Вовлеченная в деятельность часть
реального мира, сведения о которой
хранятся в БД, называется
предметной областью (ПО) базы
данных.
Концептуальная модель ПО

Описание ПО с точки зрения того
вида деятельности, для которого
предназначается БД.
Концептуальная модель ПО
Описание концептуальной модели включает описание 3х компонентов
Объект
Связи
Свойства
Объекты
– это вовлеченные в деятельность люди,
предметы, места, происходящие события и
т.п., информация о которых должна
храниться в БД. Можно сказать, что объект
есть то, что в словесном описании ПО
обозначается именем существительным,
возможно,
с
определениями.
Это
абстракция
множества
сходных
в
определенном смысле экземпляров.
Объекты
Объекты ПО “Учебный процесс”.
СТУДЕНТ,
ПРЕПОДАВАТЕЛЬ,
УЧЕБНАЯ
ДИСЦИПЛИНА, АУДИТОРИЯ
Объекты ПО “Больница”
ПАЦИЕНТ, ПАЛАТА, ВРАЧ
Концептуальная модель ПО есть
формальное описание объектов, их
свойств и отношений.
База данных
Это динамическая информационная
модель своей ПО, адекватно
отражающая ее состояние в любой
момент времени.
Система базы данных
База данных не может существовать
вне некоторой совокупности средств
поддержки. Она является
информационным ядром человекомашинной системы – системы базы
данных (СБД), схематически
показанной на рис 1.1.
Система базы данных
Управление
данными
СУБД
Запросы
Запрошенные
данные
ПО
(Бизнес)
Отклики
БД
Н ужные
сведения
Сохраняемые
данные
Управление
системой
Управление
бизнесом
И нформация
о бизнесе
Система базы данных
Система базы данных – это система
специальным
образом
организованных
данных,
программных,
технических,
языковых,
организационнометодических
средств,
предназначенная для поддержания
динамической
информационной
модели
ПО
и
коллективного
многоцелевого
использования
данных.
Компоненты СБД
ÑÁÄ
ÑÓÁÄ
ÈÊ
ÁÄ
Î Ñ
ßÑ
Ï Ñ
ÑÑÄ
ß äðî
ÀÁÄ
ØÑ
Ï Ï
Ò/È
Óò
ßÎ Ä
ßÌ Ä
ßÏ
ÒÑ
Î Ì Ñ
Компоненты СБД
База данных – находящаяся под управлением СУБД
совокупность хранимых данных, отражающих текущее
состояние ПО.
СУБД – комплекс программных и языковых средств,
предназначенный для создания баз данных и управления
данными.
Операционная система рассматривается как часть СБД,
поскольку, как правило, СУБД работает под управлением
универсальной ОС, используя ее штатные средства
управления файлами.
Компоненты СБД
Технические средства СБД – это чаще всего универсальные
ЭВМ с необходимым набором периферийных средств.
Тенденция нашего времени – реализация СБД на сетях
персональных ЭВМ.
Организационно-методические средства - различные
инструкции, методические и регламентирующие документы,
предназначенные для пользователей различных категорий,
такие как проектная документация, руководство
пользователя и т.п.
Функции и состав АБД











анализ предметной области;
проектирование структуры БД;
обеспечение целостности данных;
первоначальная загрузка и ведение БД;
защита данных;
обеспечение восстановления БД;
анализ обращений пользователей к БД;
анализ эффективности функционирования СБД и развитие системы;
работа с пользователями;
подготовка и поддержание системных программных средств;
организационно-методическая работа.
Принцип интегрированного
хранения
На предприятии должен поддерживаться только общий
архив, в который поступают все сведения по мере их
появления. Любой сотрудник получает нужную ему
информацию только из этого архива
Главная задача систем баз данных – поддержание
интегрированных хранилищ информации. Избыточность в
них есть, но ее ровно столько, сколько нужно, и, самое
главное, она контролируема, т.е. обеспечена идентичность
всех копий данных.
Независимость прикладных
программ и данных
Конечные пользователи СБД получают доступ к хранимым
данным через посредство прикладных программ (ПП),
работающих с общим полем данных во внешней памяти (см.
рис. 1.3). Этого требует принцип интегрированного
хранения. При этом ПП могут использовать только общие
для всех форматы хранимых файлов, определенные
проектировщиком БД. Игнорирование этого требования
недопустимо.
Независимость прикладных
программ и данных
Ï Ï 1
Ï Ï 2
Î áù èå
äàí í û å
Ï Ï n
Ï Ï 3
Рис 1.3 ПП вокруг данных
Независимость прикладных
программ и данных
Вариант 2
Вариант 1
Ï Ï 1
Ï Ï 2
Ä1
Ä2
Ï Ï 1
Ä1
Ï Ï 3
Ä2
Ï Ï 2
Ä3
Ä3
Ï Ï 3
Независимость прикладных
программ и данных
1 Вариант: Каждая ПП использует только собственные файлы со
всеми нужными данными.
2 Вариант: ПП создает собственные файлы, если нет подходящих
файлов других ПП.
В первом варианте неизбежна неконтролируемая избыточность.
Данным нельзя доверять и ими невозможно управлять как общим
ресурсом предприятия.
Во втором варианте избыточности нет, но возникает ряд проблем
проектирования и развития системы. Главная из них состоит в том,
что если прикладной программист изменит структуры файлов своей
ПП, скажем, с целью повышения эффективности программы, то
придется переписать все ПП, использующие эти файлы.
Прикладные программы оказываются взаимно зависимыми в этом
смысле.
Независимость прикладных
программ и данных
Вариант “ПП вокруг данных” (рис. 1.3) лишен этих недостатков.
Здесь нет ни неконтролируемой избыточности, ни взаимной
зависимости ПП. Однако, если ПП получают доступ к данным
непосредственно от ОС, то возникает проблема зависимости ПП от
данных.
Независимость прикладных
программ и данных
Данные, хранящиеся во внешней памяти, будем называть
хранимыми. Наименьшая (логическая) единица хранимых данных
называется хранимым полем.
Обычно во внешней памяти размещается много экземпляров
хранимых полей, т.е. значений поля.
Поле имеет имя и тип. Хранимые поля объединяются в хранимые
записи. Хранимая запись – это набор связанных хранимых полей.
Пример
номер детали
P12’‘
наименование
шайба’
вес – тип хранимой записи‘
0,1 – экземпляр записи
Хранимую запись следует понимать как тип, представленный во
внешней памяти многими экземплярами. Набор всех экземпляров
хранимых записей одного типа называется хранимым файлом.
Независимость прикладных
программ и данных
Вариант “ПП вокруг данных” предполагает, что все нужные типы хранимых
записей и все их связи определены проектировщиком БД в виде схемы
хранения данных. Прикладной программе известна часть схемы, содержащая
необходимые ее пользователю данные. Тело программы содержит ссылки на
доступные ей хранимые записи и поля. Если схема хранения изменится, то
придется переписать все ПП, ориентированные на измененную часть схемы.
!!! Требование независимости ПП и
данных состоит в том, что все эти
изменения не должны быть видны
прикладным программам.
Лекция 2. ER модели. РМД.
Модель “сущность – связь”
Концептуальная модель должна:



быть точной и однозначной;
адекватно отражать природу данных;
не зависеть от локальных интерпретаций данных (внешних
моделей), обусловленных различными аспектами их
использования.
Модель, удовлетворяющая этим требованиям, обеспечивает
порождение любых локальных интерпретаций данных
посредством формального преобразования концептуального
представления. Создание концептуальной модели ПО –
важнейший этап проектирования базы данных.
Модель “сущность – связь”

Понятийные основы концептуального моделирования
заложены американским исследователем П. Ченом,
предложившим в 1976 году так называемую модель
“сущность–связь”
(Entity–Relationship, ER-модель).
Модель “сущность – связь”
В концептуальной модели объекту ПО соответствует
сущность, а свойству объекта – атрибут.
Атрибут есть имя, принимающее значения на некотором
множестве возможных значений.
Сущность есть имя, поставленное в соответствие набору
атрибутов.
Модель “сущность – связь”
Имя сущности передает смысл соответствующего объекта
ПО. Набор атрибутов сущности соответствует набору
характеристик этого объекта, представляющих интерес с
точки зрения бизнеса. То есть, атрибуты связаны общим
смыслом, а их перечень определяется требованиями ПО.


СТУДЕНТ = {фамилия, имя, номер зачетной книжки,
номер группы}
УЧЕБНАЯ ДИСЦИПЛИНА = {код, наименование,
кафедра}.
Набор значений атрибутов сущности называется
экземпляром сущности.
Сущность
можно
понимать как множество
интерпретируемых наборов значений ее атрибутов
всех
Возможный ключ сущности.




Сущность как множество не может иметь двух идентичных
экземпляров по определению.
Подмножество атрибутов сущности, один и тот же набор
значений которых не может встретиться в двух различных
экземплярах, называется возможным ключом сущности.
Например, подмножество атрибутов {номер зачетной
книжки} является возможным ключом сущности
СТУДЕНТ. Не может быть двух различных студентов,
номера зачетных книжек которых одинаковы. Сущность
УЧЕБНАЯ ДИСЦИПЛИНА имеет два возможных ключа –
{код} и {наименование}.
Возможные ключи являются механизмом идентификации
экземпляров сущности. Указав значение ключа, мы, тем
самым, указываем на конкретный экземпляр.
Связь

Говорят, что объекты ПО состоят в связи, если
хотя бы одному экземпляру одного из них
можно
поставить
в
соответствие
(по
определенному правилу) один или более
экземпляров другого. Связь сущностей в
концептуальной модели отображает множество
связей между экземплярами соответствующих
объектов ПО
Говоря формально, связь есть отношение,
определенное на декартовом произведении
сущностей.
Связь
Ï 1
T1
Ï 2
T2
Ï 3
Ò3
Ï 4
Ò4
{(П1,Т1), (П1,Т5), (П2,Т2), (П4,Т1)}
T5
а) связь объектов ПО;
б) связь сущностей
Связь есть отношение, определенное на декартовом
произведении
множеств
допустимых
значений
возможных
ключей
связанных
сущностей
и
собственных атрибутов.
Свойства связей и
сущностей.

Cвязь характеризуется арностью (степенью) – числом
вступающих в нее сущностей.
Замечание Существующая в реальном мире n-арная
связь объектов ПО может быть представлена в
концептуальной модели в виде n бинарных связей n + 1
сущностей. Для этого достаточно определить как
сущность соответствующее связи отношение. Эта
сущность будет представлять в модели не объект ПО, а
множество фактов связи. Например, вместо тернарной
связи
ПОСТАВЩИК–ДЕТАЛЬ–ИЗДЕЛИЕ
можно
рассматривать три бинарных связи ПОСТАВЩИК–
ПОСТАВКА, ДЕТАЛЬ–ПОСТАВКА и ИЗДЕЛИЕ–ПОСТАВКА,
где ПОСТАВКА – сущность-ассоциация, в состав атрибутов
которой
входят
возможные
ключи
сущностей
ПОСТАВЩИК, ДЕТАЛЬ и ИЗДЕЛИЕ.
Свойства связей и
сущностей.
Число М экземпляров связи, которые могут быть
образованы одним экземпляром сущности, называется
мощностью (кардинальностью) связи со стороны этой
сущности.
Ï Î ÑÒÀÂÙ ÈÊ 1
M
а) связь 1:М;
ÒÎ ÂÀÐ
Ï Î ÑÒÀÂÙ ÈÊ M
M
б) связь М:М
ÒÎ ÂÀÐ
Свойства связей и
сущностей.
1:М
называется
направленной
или
функциональной, или специфическим соединением.
В такой связи всегда можно указать родителя и потомка.
Родителем называется сущность, мощность связи со стороны
которой равна М (многосвязная). Мощность направленной
связи со стороны потомка 0 или 1.
Связь типа М:М называется ненаправленной или
нефункциональной, или неспецифическим соединением. В
такой связи нет родителя и потомка.
Связь
типа
Свойства связей и
сущностей.
Ï Î ÑÒÀÂÙ ÈÊ
Ì
Ì
ÒÎ ÂÀÐ
Ï Î ÑÒÀÂÙ ÈÊ
1
Ì
Ï Î ÑÒÀÂÊÀ
Рисунок Преобразование ненаправленной связи:
Ì
1
ÒÎ ÂÀÐ
Внешний ключ и
избирательность связи.


Соединение
называется
избирательным
(идентифицирующим), если переданный им внешний
ключ полностью входит в какой-либо возможный ключ
потомка.
Соединение
называется
неизбирательным
(неидентифицирующим), если не существует такого
возможного ключа потомка, в который полностью входит
внешний ключ, переданный этим соединением.
Иерархии сущностей.


Родовой
сущностью
(супертипом, суперклассом)
называется
сущность,
экземпляры
которой
классифицированы в один или более подтипов
(подклассов).
Категорией называется сущность, экземпляры которой
представляют подтип (подкласс) родовой сущности.
Иерархии сущностей.



В состав атрибутов родовой сущности входят только общие атрибуты
всех категорий. Каждый экземпляр категории является одновременно
экземпляром родовой сущности, т.е. категория наследует атрибуты
родовой сущности. В связях родовой сущности могут участвовать
экземпляры любой категории. Категория может иметь атрибуты и/или
вступать в связи с другими сущностями, не свойственные всем
экземплярам родовой сущности, а свойственные только экземплярам
категории.
Категории родовой сущности выделяются по некоторому признаку.
Его значения одинаковы во всех экземплярах одной категории и
различны в экземплярах разных категорий. Все множество категорий,
выделенных по значениям этого признака, называется кластером
категорий, а сам признак – дискриминатором кластера. Экземпляры
родовой сущности могут классифицироваться по различным
признакам, образуя несколько кластеров категорий. Наконец, любая
категория
может быть родовой сущностью, порождающей свои
кластеры категорий.
Таким образом, понятия родовой сущности и категории позволяют
строить иерархии сущностей любой сложности.
Иерархии сущностей.







Специфическое соединение реализуется путем передачи возможного ключа
родителя в состав атрибутов потомка. Возможный ключ родителя в составе
атрибутов потомка называется
внешним ключом. Если внешний ключ
полностью входит в состав какого-либо возможного ключа потомка, то
передавшая его связь является идентифицирующей. В противном случае –
неидентифицирующей.
Потомок в идентифицирующей связи всегда идентификационно зависимая
сущность.
Потомок
в
неидентифицирующей
связи
может
быть
идентификационно независимой сущностью.
Идентифицирующая связь всегда обязательная.
Неидентифицирующая
связь
может
быть
обязательной
или
необязательной.
Сущность может быть категорией
родовой сущности и принадлежать
определенному кластеру категорий.
Сущность может быть родовой для нескольких кластеров категорий.
Категория наследует все атрибуты родовой сущности, вступает во все ее
связи и может иметь собственные атрибуты и вступать в собственные связи.
Категория может быть родовой сущностью.
Свойства отношений






Уникальность кортежей;
неупорядоченность кортежей;
неупорядоченность атрибутов;
уникальность атрибутов;
атомарность атрибутов;
изменяемость отношений.
Свойства отношений


Уникальность кортежей. Так как отношение есть множество
кортежей, в нем не может быть дубликатов кортежей, то есть
каждый кортеж встречается в отношении только один раз. Из этого
свойства следует, что каждое отношение имеет некоторый набор
атрибутов, значения которых уникально идентифицирует кортежи.
Этот набор атрибутов называют возможным ключом отношения.
Формальное определение этого понятия приведено в п. 2.3.3.
Неупорядоченность кортежей. Это также следствие того, что
отношение – множество кортежей. Множества неупорядоченны,
если их упорядоченность специально не оговорена. Заметим, что в
реальных структурах хранения данные так или иначе упорядочены.
Однако учет этой упорядоченности в процедурах манипулирования
данными сделал бы прикладные программы зависящими от
физических структур хранения. Поэтому введение каких-либо
гипотез об упорядоченности в концептуальную модель данных
было бы ошибкой.
Свойства отношений


Неупорядоченность атрибутов. Это свойство следует из
определения схемы отношения как множества пар <домен,
атрибут>. Неупорядоченность атрибутов делает возможной
модификацию схем отношений путем удаления атрибутов,
вставки новых и переименования атрибутов и позволяет
относительно просто определить ряд полезных операций
над отношениями.
Уникальность атрибутов. Одноименные атрибуты
недопустимы, поскольку это может привести к появлению в
схеме отношения дубликатов пар (домен, атрибут), что
противоречит определению. Кроме того, только
уникальность атрибутов может обеспечить возможность
отнесения значения из кортежа к определенному домену.
Свойства отношений


Атомарность значений атрибутов. Свойство следует из
определения атрибута. Атрибут принимает значения на
домене, а домен – подмножество простого типа. Таким
образом, в реляционной теории не рассматриваются так
называемые ненормализованные отношения.
Изменяемость отношений. Реляционная модель данных
рассматривает отношение как структурный тип. Тип
определяется схемой отношения. Все кортежи – знаки типа
– удовлетворяют одной и той же схеме. Тело отношения
может изменяться во времени. Отдельные кортежи могут
добавляться или удаляться. Могут изменяться значения
атрибутов в существующих кортежах. Поэтому можно
говорить об экземпляре (текущем значении) отношения с
заданной схемой.
Уровни концептуальной
модели.

На первом этапе формируются общие представления о ПО, выделяются

На втором этапе детализируются представления о свойствах сущностей и

Третий этап состоит в детализации представлений о характеристиках
основные сущности и связи. У аналитика еще нет ясных представлений о
свойствах связей и типах сущностей, о необходимых ассоциациях и
категориях, о полном перечне атрибутов и т.п. Результатом этапа является
модель верхнего уровня абстракции (уровень “сущность–связь”).
связей. Вводятся необходимые ассоциативные сущности, строятся
иерархии сущностей, определяются возможные и внешние ключи,
кардинальности и типы связей. Результатом этапа являются подробные
спецификации связей и идентификаторов экземпляров сущностей (уровень
ключей).
объектов ПО и определении окончательного состава атрибутов сущностей.
Результат этапа – детальные спецификации концептуальной модели,
пригодные для определения требований к структурам хранения данных
(уровень атрибутов).
РМД
Базовые понятия реляционной
модели данных


Реляционные БД позволяют хранить информацию
в нескольких плоских (двухмерных) таблицах
связанных между собой посредством совместно
используемых полей данных, называемых
ключами. Реляционные БД предоставляют более
простой доступ к оперативно составляемым
отчетам (обычно через SQL) и обеспечивают
повышенную надежность и целостность данных,
благодаря отсутствию избыточной информации.
Основная идея реляционного подхода состоит в
том, чтобы представить произвольную структуру
данных в виде простой двумерной таблицы или,
как говорят, нормализовать структуру.
Базовые понятия реляционной
модели данных
Достоинтсва:

наличие небольшого набора абстракций, которые
позволяют сравнительно просто моделировать большую
часть
распространенных
предметных
областей
и
допускают точные формальные определения, оставаясь
интуитивно понятными;

наличие простого и в то же время мощного
математического аппарата, опирающегося главным
образом на теорию множеств и математическую логику и
обеспечивающего теоретический базис реляционного
подхода к организации баз данных;

возможность
ненавигационного
манипулирования
данными
без
необходимости
знания
конкретной
физической организации баз данных во внешней памяти.
Базовые понятия реляционной
модели данных
В настоящее время основным предметом критики
реляционных СУБД является не их недостаточная
эффективность, а присущая этим системам некоторая
ограниченность
(прямое
следствие
простоты)
при
использование в так называемых нетрадиционных областях
(наиболее
распространенными
примерами
являются
системы автоматизации проектирования), в которых
требуются предельно сложные структуры данных. Еще
одним часто отмечаемым недостатком реляционных баз
данных является невозможность адекватного отражения
семантики
предметной
области.
Другими
словами,
возможности представления знаний о семантической
специфике предметной области в реляционных системах
очень ограничены. Современные исследования в области
постреляционных систем главным образом посвящены
именно устранению этих недостатков.
Состав РМД
РМД
СТРУКТУРНАЯ
ЦЕЛОСТНОСТНАЯ
МАНИПУЛЯЦИОННАЯ
Состав РМД



Структурная часть описывает, какие объекты рассматриваются
реляционной моделью. Постулируется, что единственной
структурой данных, используемой в реляционной модели,
являются нормализованные n-арные отношения.
Целостностная часть описывает ограничения специального
вида, которые должны выполняться для любых отношений в
любых реляционных базах данных. Это целостность
сущностей и целостность внешних ключей.
Манипуляционная часть описывает два эквивалентных способа
манипулирования реляционными данными - реляционную
алгебру и реляционное исчисление.
Базовые понятия реляционной
модели данных



РМД поддерживает только концептуальный уровень
представления данных (данные представлены такими,
какие они есть на самом деле).
Все понятия структурной и целостностной частей РМД
используются в современных графических ЯОД
–
входных
языках
компьютерных
систем
автоматизированного проектирования баз данных. Многие
понятия РМД положены в основу SQL – входного языка
современных коммерческих СУБД, обеспечивающего
управление данными в БД на концептуальном уровне.
Модель предложена
Коддом в 1970 году.
американским
математиком
Е.
Состав РМД






Выделяется шесть базовых понятий РМД:
Тип данных;
Домен;
Атрибут;
Схема отношения;
Кортеж;
Отношение.
Первые три относятся к элементам
данных, остальные – к структурам,
объединяющим элементы.
Структурная часть РМД




Понятие тип данных в реляционной модели
данных полностью адекватно понятию типа
данных в языках программирования.
Любые данные, используемые в
программировании, имеют свои типы данных.
Важно! Реляционная модель требует, чтобы типы
используемых данных были простыми.
Для уточнения этого утверждения рассмотрим,
какие вообще типы данных обычно
рассматриваются в программировании. Как
правило, типы данных делятся на три группы:
Структурная часть РМД
Тип данных
Простые
Структурированные
Ссылочные
Структурная часть РМД










Простые типы данных
Простые, или атомарные, типы данных не обладают внутренней структурой.
Данные такого типа называют скалярами. К простым типам данных
относятся следующие типы:
Логический.
Строковый.
Численный.
Различные языки программирования могут расширять и уточнять этот
список, добавляя такие типы как:
Целый.
Вещественный.
Дата.
Время.
Денежный.
Перечислимый.
Интервальный.
Структурная часть РМД
Структурированные типы данных


Структурированные типы данных предназначены для задания сложных
структур данных. Структурированные типы данных конструируются из
составляющих элементов, называемых компонентами, которые, в свою
очередь, могут обладать структурой. В качестве структурированных типов
данных можно привести следующие типы данных:
Массивы;
Записи (Структуры).
Структурная часть РМД


Понятие домена более специфично для баз данных, хотя и имеет
некоторые аналогии с подтипами в некоторых языках
программирования. В самом общем виде домен определяется
заданием некоторого базового типа данных, к которому относятся
элементы домена, и произвольного логического выражения,
применяемого к элементу типа данных. Если вычисление этого
логического выражения дает результат "истина", то элемент
данных является элементом домена.
Наиболее правильной интуитивной трактовкой понятия
домена является понимание домена как допустимого
потенциального множества значений данного типа.
Следует отметить также семантическую нагрузку понятия
домена: данные считаются сравнимыми только в том случае, когда
они относятся к одному домену. В нашем примере значения
доменов "Номера пропусков" и "Номера групп" относятся к типу
целых чисел, но не являются сравнимыми. Заметим, что в
большинстве реляционных СУБД понятие домена не используется.
Структурная часть РМД




Домен характеризуется следующими свойствами:
Домен имеет уникальное имя (в пределах базы
данных).
Домен определен на некотором простом типе
данных или на другом домене.
Домен может иметь некоторое логическое
условие, позволяющее описать подмножество
данных, допустимых для данного домена.
Домен несет определенную смысловую нагрузку.
Структурная часть РМД
Пример:
Домен , имеющий смысл "возраст
сотрудника" можно описать как следующее
подмножество множества натуральных
чисел:
Структурная часть РМД
Атрибут есть имя, поставленное в соответствие домену и

представляющее семантически значимое свойство объекта ПО.
Если домену поставлено в соответствие имя, то говорят, что на
домене определен атрибут. Атрибут принимает значения на
домене.
На одном и том же домене можно определить произвольное число
атрибутов. Атрибуты, определенные на общем домене, наследуют
его свойства.
Семантика доменов и
атрибутов

Домен и атрибут являются средствами интерпретации типа
в терминах ПО.
Пример:
Атрибут скорость интерпретирует число 20 как скорость в
км/час, а атрибут вес интерпретирует то же число как вес в
кг.
Семантика доменов и
атрибутов
Определяя домены и атрибуты, мы тем самым
задаем некоторые ограничения на операции над
данными, обусловленные смыслом данных.
Например, вес и скорость нельзя сравнивать или
использовать совместно в арифметических
операциях, несмотря на то, что и вес, и скорость
– числа. Эти атрибуты должны быть определены
на различных доменах числового типа
Семантика доменов и
атрибутов
Àòðèáóòû
ÒÈ Ï
À1
À2
.
.
.
Am
Äî ì åí 2
Äî ì åí 1
Äî ì åí N
Семантика доменов и
атрибутов

Атрибуты, определенные на общем домене сравнимы.
Например, длина и ширина должны быть определены на
общем домене, т.к. их сравнения осмысленны. А атрибуты
табельный номер и номер телефона должны быть
определены на разных доменах. Кроме того, эти домены не
могут быть числовыми. Никто не складывает и не умножает
табельные и телефонные номера.
Структурная часть РМД




Пусть D1, D2, …Dn – домены (необязательно
различные) и А1, А2, …, Аn – атрибуты,
определенные на соответствующих доменах.
Определение. Множество R = {(D1, A1),
(D2, A2), ..., (Dn, An)} пар <домен, атрибут>
называется схемой отношения.
Интуитивно схему отношения можно понимать
как заголовок таблицы или как определение типа
простой записи.
Пусть R – схема отношения, Ai – атрибут схемы,
ai – значение атрибута.
Структурная часть РМД


Определение. Множество пар SR = {Si
: Si = (Ai, ai), (Di, Ai)  R, ai  Di, i =
1, …, n} называется кортежем,
соответствующим схеме R.
Интуитивно кортеж представляется как
строка таблицы с заданным заголовком
или набор именованных значений типов,
или экземпляр записи.
Структурная часть РМД





Например, пусть номера – домен трехсимвольных
строк, составленных из цифр ‘0’, ‘1’,...’9’, имена –
домен строк символов русского алфавита,
пробелов и точек, а схема отношения
СЛУЖАЩИЙ имеет вид:
{( номера, номер служащего), (имена, имя
служащего)}.
Кортежи этого отношения могут быть такими:
{(номер служащего, ‘345’), (имя служащего,
‘Иванов И.И.’)},
{(номер служащего, ‘938’), (имя служащего,
‘Петров П.П.’ )}.
Структурная часть РМД





Отношение интуитивно можно понимать как таблицу,
заголовком которой является строка атрибутов, а
значимыми строками – строки их значений, или как плоский
файл, однако это неточные представления.
Определение. Множество кортежей SR, соответствующих
одной и той же схеме R, называется отношением.
Отношение характеризуется:
арностью (степенью) – числом пар <домен, атрибут> в
схеме;
мощностью – числом кортежей, составляющих тело
отношения.
Структурная часть РМД

Замечание 1. Обычно отношение и его схема
обозначаются одним и тем же символом R. Если нам
понадобится явно различить схему и отношение, мы
сохраним это обозначение за отношением, а схему будем
обозначать символом R( ).
Структурная часть РМД

Экземпляр (значение) отношения –
это набор кортежей с заданной
схемой, существующий в некоторый
фиксированный момент времени.
Структурная часть РМД






Пример. Рассмотрим отношение "Сотрудники" заданное на
доменах "Номер_сотрудника", "Фамилия", "Зарплата",
"Номер_отдела". Т.к. все домены различны, то имена
атрибутов отношения удобно назвать так же, как и
соответствующие домены. Заголовок отношения имеет вид:
Сотрудники (Номер_сотрудника, Фамилия, Зарплата,
Номер_отдела)
Пусть в данный момент отношение содержит три кортежа:
(1,Иванов, 1000, 1)
(2, Петров, 2000, 2)
(3, Сидоров, 3000, 1)
Структурная часть РМД
Номер_сотрудника
Фамилия
Зарплата
Номер_отдела
1
Иванов
1000
1
2
Петров
2000
2
3
Сидоров
3000
1
Структурная часть РМД
Реляционный термин
Соответствующий "табличный"
термин
База данных
Набор таблиц
Схема базы данных
Набор заголовков таблиц
Отношение
Таблица
Заголовок отношения
Заголовок таблицы
Тело отношения
Тело таблицы
Атрибут отношения
Наименование столбца таблицы
Кортеж отношения
Строка таблицы
Степень (-арность)
отношения
Количество столбцов таблицы
Мощность отношения
Количество строк таблицы
Домены и типы данных
Типы данные в ячейках таблицы
Структурная часть РМД
ÓÐÎ ÂÅÍ Ü ER-ì î äåëè
î åñòâî
æåñòâî
ì íì îí æ
î íæ
í û
âîâî
çìçìî æ
û
õõ
à÷åí
èé
çíçí
à÷åí
èé
àòðèáóòà
àòðèáóòà
àòðèáóò
ñóù í î ñòü
ÓÐÎ ÂÅÍ Ü ÐÌ Ä
òèï äàí í û õ
äî ì åí
àòðèáóò
î òí î ø åí èå
ñâÿçü
ýêçåì ï ëÿð
ñóù í î ñòè
êî ðòåæ
ýêçåì ï ëÿð
ñâÿçè
Выводы
Реляционная модель данных состоит из трех частей:

Структурной части.
Целостной части.

Манипуляционной части.

Выводы



В классической реляционной модели используются только
простые (атомарные) типы данных. Простые типы
данных не обладают внутренней структурой.
Домены - это типы данных, имеющие некоторый смысл
(семантику). Домены ограничивают сравнения некорректно, хотя и возможно, сравнивать значения из
различных доменов.
Отношение состоит из двух частей - заголовка
отношения и тела отношения. Заголовок отношения это аналог заголовка таблицы. Заголовок отношения
состоит из атрибутов. Количество атрибутов называется
степенью отношения. Тело отношения - это аналог тела
таблицы. Тело отношения состоит из кортежей. Кортеж
отношения является аналогом строки таблицы. Количество
кортежей отношения называется мощностью отношения.
Выводы






Отношение обладает следующими свойствами:
В отношении нет одинаковых кортежей.
Кортежи не упорядочены (сверху вниз).
Атрибуты не упорядочены (слева направо).
Все значения атрибутов атомарны.
Реляционной базой данных называется набор
отношений.
Схемой реляционной базы данных называется
набор заголовков отношений, входящих в базу
данных.
Целостность данных

Во второй части реляционной модели данных определяются
два ограничения, которые должны выполняться в любой
реляционной базе данных. Это:
Целостность сущностей.

Целостность внешних ключей.
Контрольная
•Нормализовать структуру
•Указать арность результирующего отношения
•Указать мощность результирующего отношения
Манипуляционная часть
РМД
Третья часть реляционной модели, манипуляционная часть,
утверждает, что доступ к реляционным данным осуществляется при
помощи реляционной алгебры или эквивалентного ему реляционного
исчисления.
В манипуляционной составляющей определяются два базовых
механизма манипулирования реляционными данными - основанная на
теории множеств реляционная алгебра и базирующееся на
математической логике (точнее, на исчислении предикатов первого
порядка) реляционное исчисление.
Манипуляционная часть
РМД
Манипуляционная часть
РМД
Все эти механизмы обладают одним важным свойством: они
замкнуты относительно понятия отношения. Это означает, что
выражения реляционной алгебры и формулы реляционного
исчисления определяются над отношениями реляционных БД и
результатом вычисления также являются отношения. В результате
любое выражение или формула могут интерпретироваться как
отношения, что позволяет использовать их в других выражениях или
формулах.
Манипуляционная часть
РМД


Алгебра и исчисление обладают большой выразительной
мощностью: очень сложные запросы к базе данных могут быть
выражены с помощью одного выражения реляционной алгебры или
одной формулы реляционного исчисления. Именно по этой причине
именно эти механизмы включены в реляционную модель данных.
Конкретный язык манипулирования реляционными БД называется
реляционно полным, если любой запрос, выражаемый с
помощью одного выражения реляционной алгебры или одной
формулы реляционного исчисления, может быть выражен с помощью
одного оператора этого языка.
Известно, что механизмы реляционной алгебры и реляционного
исчисления эквивалентны, т.е. для любого допустимого выражения
реляционной алгебры можно построить эквивалентную (т.е.
производящую такой же результат) формулу реляционного
исчисления и наоборот.
Манипуляционная часть
РМД
Два этих подхода различаются уровнем процедурности.
Выражения реляционной алгебры строятся на основе
алгебраических операций (высокого уровня), и подобно тому, как
интерпретируются арифметические и логические выражения,
выражение реляционной алгебры также имеет процедурную
интерпретацию. Другими словами, запрос, представленный на языке
реляционной алгебры, может быть вычислен на основе вычисления
элементарных алгебраических операций с учетом их старшинства и
возможного наличия скобок.

Для формулы реляционного исчисления
однозначная интерпретация, вообще говоря,
отсутствует. Формула только устанавливает
условия, которым должны удовлетворять
кортежи
результирующего
отношения.
Поэтому языки реляционного исчисления
являются
более
непроцедурными
или
декларативными.
Реляционная алгебра
Реляционная алгебра представляет собой набор операторов,
использующих отношения в качестве аргументов, и возвращающие
отношения в качестве результата. Таким образом, реляционный оператор
выглядит как функция с отношениями в качестве аргументов:
R  f ( R1 , R2 ,, Rn )
Реляционная
алгебра
является
замкнутой,
аргументов в реляционные операторы можно
реляционные операторы, подходящие по типу:
т.к.
в
подставлять
качестве
другие
R  f ( f1 ( R11, R12 ,), f 2 ( R21, R22 ,),)
Реляционная алгебра
Существует много подходов к определению реляционной алгебры,
которые различаются набором операций и способами их интерпретации, но в
принципе, более или менее равносильны. Мы опишем немного расширенный
начальный вариант алгебры, который был предложен Коддом. В этом
варианте набор основных алгебраических операций состоит из восьми
операций, которые делятся на два класса - теоретико-множественные
операции и специальные реляционные операции
Реляционная алгебра





Как мы увидим, алгебра и исчисление обладают большой выразительной мощностью: очень сложные запросы к базе
данных могут быть выражены с помощью одного выражения реляционной алгебры или одной формулы реляционного
исчисления. Именно по этой причине такие механизмы включены в реляционную модель данных. Конкретный язык
манипулирования реляционными БД называется реляционно-полным, если любой запрос, формулируемый с помощью
одного выражения реляционной алгебры или одной формулы реляционного исчисления, может быть сформулирован с
помощью одного оператора этого языка.
Известно (и мы не будем это доказывать), что механизмы реляционной алгебры и реляционного исчисления
эквивалентны, т. е. для любого допустимого выражения реляционной алгебры можно построить эквивалентную (т. е.
производящую такой же результат) формулу реляционного исчисления и наоборот. Почему же в реляционной модели
данных присутствуют оба эти механизма?
Дело в том, что они различаются уровнем процедурности. Выражения реляционной алгебры строятся на основе
алгебраических операций (высокого уровня), и подобно тому, как интерпретируются арифметические и логические
выражения, выражение реляционной алгебры также имеет процедурную интерпретацию. Другими словами, запрос,
представленный на языке реляционной алгебры, может быть вычислен на основе выполнения элементарных
алгебраических операций с учетом их приоритетности и возможного наличия скобок. Для формулы реляционного
исчисления однозначная вычислительная интерпретация, вообще говоря, отсутствует. Формула только ставит условия,
которым должны удовлетворять кортежи результирующего отношения. Поэтому языки реляционного исчисления
являются в большей степени непроцедурными, или декларативными.
Поскольку механизмы реляционной алгебры и реляционного исчисления эквивалентны, в конкретной ситуации для
проверки степени реляционности некоторого языка БД можно пользоваться любым из этих механизмов.
Заметим, что крайне редко алгебра или исчисление принимается в качестве полной основы какого-либо языка БД.
Обычно (например, в случае языка SQL) язык основывается на некоторой смеси алгебраических и логических
конструкций. Тем не менее знание алгебраических и логических основ языков баз данных часто применяется на
практике
Теоретико-множественные
операции




При выполнении операции объединения двух отношений
производится отношение, включающее все кортежи, входящие хотя
бы в одно из отношений-операндов.
Операция пересечения двух отношений производит отношение,
включающее все кортежи, входящие в оба отношения-операнда.
Отношение, являющееся разностью двух отношений включает все
кортежи, входящие в отношение - первый операнд, такие, что ни один
из них не входит в отношение, являющееся вторым операндом.
При выполнении прямого произведения двух отношений
производится отношение, кортежи которого являются конкатенацией
(сцеплением) кортежей первого и второго операндов.
Специальные операции




Результатом ограничения отношения по некоторому условию
является отношение, включающее кортежи отношения-операнда,
удовлетворяющее этому условию.
При выполнении проекции отношения на заданный набор его
атрибутов производится отношение, кортежи которого производятся
путем взятия соответствующих значений из кортежей отношенияоперанда.
При соединении двух отношений по некоторому условию
образуется результирующее отношение, кортежи которого являются
конкатенацией кортежей первого и второго отношений и
удовлетворяют этому условию.
У операции реляционного деления два операнда - бинарное и
унарное отношения. Результирующее отношение состоит из
одноатрибутных кортежей, включающих значения первого атрибута
кортежей первого операнда таких, что множество значений второго
атрибута (при фиксированном значении первого атрибута) совпадает
со множеством значений второго операнда.
Дополнительные операции


Операция переименования производит отношение, тело
которого совпадает с телом операнда, но имена атрибутов изменены.
Операция присваивания позволяет сохранить результат
вычисления реляционного выражения в существующем отношении БД.
Операция объединения
Смысл в реляционной алгебре в целом остается теоретикомножественным. Но если в теории множеств операция объединения
осмысленна для любых двух множеств-операндов, то в случае
реляционной алгебры результатом операции объединения должно
являться отношение.
Если допустить в реляционной алгебре возможность теоретикомножественного объединения произвольных двух отношений (с
разными схемами), то, конечно, результатом операции будет
множество, но множество разнотипных кортежей, т.е. не отношение.
Если исходить из требования замкнутости реляционной алгебры
относительно понятия отношения, то такая операция объединения
является бессмысленной.
Операция объединения

Все эти соображения приводят к появлению понятия совместимости
отношений по объединению: два отношения совместимы по
объединению в том и только в том случае, когда обладают
одинаковыми заголовками. Более точно, это означает, что в
заголовках обоих отношений содержится один и тот же набор имен
атрибутов, и одноименные атрибуты определены на одном и том же
домене
Объединением двух совместимых по типу отношений A и B
называется отношение с тем же заголовком, что и у отношений A и B,
и телом, состоящим из кортежей, принадлежащих или A, или B, или
обоим отношениям.
Операция объединения
Синтаксис операции объединения:
A UNION B
Замечание. Объединение, как и любое отношение, не может
содержать одинаковых кортежей. Поэтому, если некоторый кортеж
входит и в отношение A, и отношение B, то в объединение он входит
один раз.
Операция объединения
Таб №
1
2
3
Фамилия
Иванов
Петров
Сидоров
Зарплата
1000
2000
3000
Таб №
1
2
4
Фамилия
Иванов
Васильев
Сидоров
Зарплата
1000
2500
3000
Операция объединения
Таб №
Фамилия
Зарплата
1
Иванов
1000
2
Петров
2000
3
Сидоров
3000
2
Васильев
2500
4
Сидоров
3000
Операция объединения

Замечание. Как видно из приведенного примера, потенциальные
ключи, которые были в отношениях A и B не наследуются
объединением этих отношений. Поэтому, в объединении отношений A
и B атрибут "Табельный номер" может содержать дубликаты значений.
Если бы это было не так, и ключи наследовались бы, то это
противоречило бы понятию объединения как "объединение
множеств". Конечно, объединение отношений A и B имеет, как и
любое отношение, потенциальный ключ, например, состоящий из всех
атрибутов
.
Пересечение

Пересечением двух совместимых по типу отношений A и B
называется отношение с тем же заголовком, что и у отношений A и B ,
и телом, состоящим из кортежей, принадлежащих одновременно
обоим отношениям.

Синтаксис операции пересечения:
A intersect B
Пересечение
Таб №
Фамилия
Зарплата
1
Иванов
1000
Замечание. Казалось бы, что в отличие от операции объединения,
потенциальные ключи могли бы наследоваться пересечением отношений. Однако
это не так. Вообще, никакие реляционные операторы не передают
результатирующему отношению никаких данных о потенциальных ключах.
Вычитание


Вычитанием двух совместимых по типу отношений A и B называется
отношение с тем же заголовком, что и у отношений и , и телом,
состоящим из кортежей, принадлежащих отношению A и не
принадлежащих отношению B.
Синтаксис операции вычитания:
A minus B
Вычитание
Таб №
Фамилия
Зарплата
2
Петров
2000
3
Сидоров
3000
Декартово произведение
Декартовым произведением двух отношений A и B называется
отношение, заголовок которого является сцеплением заголовков
отношений A и B :
а тело состоит из кортежей, являющихся сцеплением кортежей
отношений A и B:
таких, что
Декартово произведение

Синтаксис операции декартового произведения
A TIMES B



Замечание. Мощность произведения A TIMES B равна произведению
мощностей отношений A и B , т.к. каждый кортеж отношения
соединяется с каждым кортежем отношения .
Замечание. Если в отношения A и B имеются атрибуты с одинаковыми
наименованиями, то перед выполнением операции декартового
произведения такие атрибуты необходимо переименовать.
Замечание. Перемножать можно любые два отношения, совместимость
по типу при этом не требуется.
Декартово произведение
№ поставщика
1
2
3
Наим_пост
Иванов
Петров
Сидоров
№ детали
1
2
3
Наим_дет
Болт
Гайка
Винт
Декартово произведение
№ поставщика
Наим_пост
№ детали
Наим_дет
1
Иванов
1
Болт
1
Иванов
2
Гайка
1
Иванов
3
Винт
2
Петров
1
Болт
2
Петров
2
Гайка
2
Петров
3
Винт
3
Сидоров
1
Болт
3
Сидоров
2
Гайка
3
Сидоров
3
Винт
Декартово произведение
Замечание. Сама по себе операция декартового произведения не очень
важна, т.к. она не дает никакой новой информации, по сравнению с
исходными отношениями. Для реальных запросов эта операция почти никогда
не используется. Однако операция декартового произведения важна для
выполнения специальных реляционных операций, о которых речь пойдет
ниже.
Специальные реляционные
операции
Операция ограничения требует наличия двух операндов:
ограничиваемого отношения и простого условия ограничения.
Выборкой (ограничением, селекцией) на отношении A с
условием c называется отношение с тем же заголовком, что и у
отношения A, и телом, состоящем из кортежей, значения атрибутов
которых при подстановке в условие c дают значение ИСТИНА.
C представляет собой логическое выражение, в которое могут
входить атрибуты отношения и (или) скалярные выражения.
Ограничение
В простейшем случае условие c имеет вид X Ө Y
где -Ө один из операторов сравнения (<, >, =, ≠ и т.д.), а X и Yатрибуты отношения или скалярные значения. Такие выборки
называются - Ө выборки (тэта-выборки) или Ө -ограничения, Ө -
селекции.
Синтаксис операции выборки:
A where c
или соответственно:
A where X ӨY
Ограничение
Таб №
1
2
3
Фамилия
Иванов
Петров
Сидоров
Зарплата
1000
2000
3000
Результат выборки A WHERE ЗАРПЛАТА<3000 будет иметь вид:
Таб №
1
2
Фамилия
Иванов
Петров
Зарплата
1000
2000
Ограничение


Смысл операции выборки очевиден - выбрать кортежи отношения,
удовлетворяющие некоторому условию. Таким образом, операция
выборки дает "горизонтальный срез" отношения по некоторому
условию.
В результате выполнения операции ограничения производится
отношение, заголовок которого совпадает с заголовком отношенияоперанда, а в тело входят те кортежи отношения-операнда, для
которых значением условия ограничения является true.
Операция взятия проекции
Операция взятия проекции также требует наличия двух
операндов - проецируемого отношения A и списка имен атрибутов,
входящих в заголовок отношения A.
Проекцией отношения А по атрибутам X, Y, Z где каждый из
атрибутов принадлежит отношению A, называется отношение с
заголовком (X,Y,Z) и телом, содержащим множество кортежей вида
(x,y,z) таких, для которых в отношении A найдутся кортежи со
значением атрибута X равным x, значением атрибута Y равным y, …,
значением атрибута Z равным z
Синтаксис операции проекции:
A[X,Y,…,Z]
Операция взятия проекции
№ пост
1
2
3
4
Наим_пост
Иванов
Петров
Сидоров
Сидоров
Город
Уфа
Москва
Москва
Челябинск
Операция взятия проекции
Проекция A[Город] будет иметь вид
Город
Уфа
Москва
Челябинск
Операция взятия проекции
Результатом проекции отношения A по списку атрибутов
(a1, a2, ..., an) является отношение, с заголовком,
определяемым множеством атрибутов (a1, a2, ..., an), и с
телом, состоящим из кортежей вида
<a1:v1, a2:v2, ..., an:vn>
таких, что в отношении A имеется кортеж, атрибут a1
которого имеет значение v1, атрибут a2 имеет значение v2,
..., атрибут an имеет значение vn. Тем самым, при
выполнении операции проекции выделяется "вертикальная"
вырезка отношения-операнда с естественным уничтожением
потенциально возникающих кортежей-дубликатов.
Операция соединения
отношений
Обычно
рассматривается
разновидностей операции соединения:
•Общая операция соединения;
•Θ -соединение (тэта-соединение);
•Экви-соединение;
•Естественное соединение.
несколько
Тэта-соединение
Синтаксис:
(A TIMES B) WHERE XΘY
Замечание: эта операция частный
случай операции общего соединения.
Иногда, для операции Θ-соединения
применяют следующий, более короткий
синтаксис: А[XΘY]B
Пример
Номер поставщика
Наименование
поставщика
1
2
3
Иванов
Петров
Сидоров
Номер детали
1
2
3
Наименование
детали
Болт
Гайка
Винт
X
Статус
поставщика
4
1
2
Y
(Статус детали)
3
2
1
Пример (продолжение)
Ответ на вопрос "какие поставщики имеют право
поставлять какие детали?" дает Ө соединение A[X>=Y]B
Номер
постав
щика
Наименование
поставщик
а
:
X
(Статус
поставщ
ика)
Номер Наименован
детал
ие
и
детали
Y
(Стату
с
детал
и)
1
Иванов
4
1
Болт
3
1
Иванов
4
2
Гайка
2
1
Иванов
4
3
Винт
1
2
Петров
1
3
Винт
1
3
Сидоров
2
2
Гайка
2
3
Сидоров
2
3
Винт
1
Экви-соединение
Операция соединения называется
операцией эквисоединения, если условие
соединения имеет вид (a = b), где a и b атрибуты разных операндов соединения.
Этот случай важен потому, что (a) он
часто встречается на практике, и (b) для
него существуют эффективные
алгоритмы реализации.
Синтаксис экви-соединения:
A[X=Y]B
Пример
Номер поставщика
PNUM
1
2
3
Номер детали
DNUM
1
2
3
Наименование
поставщика
PNAME
Иванов
Петров
Сидоров
Наименование детали
DNAME
Болт
Гайка
Винт
Пример (продолжение)
Номер
поставщика
PNUM
1
1
1
2
2
3
Номер
детали
DNUM
1
2
3
1
2
1
Поставляемо
е количество
VOLUME
100
200
300
150
250
1000
Пример (продолжение)
Ответ на вопрос, какие детали
поставляются поставщиками, дает
экви-соединение
P[Pnum=Pnum]SPJ
Пример (продолжение)
Номер
поставщ
ика
PNUM1
1
Наименован
ие
поставщика
PNAME
Иванов
Номер
поставщ
ика
PNUM2
1
Номер
детали
DNUM
1
Поставляем
ое
количество
VOLUME
100
1
Иванов
1
2
200
1
Иванов
1
3
300
2
Петров
2
1
150
2
Петров
2
2
250
3
Сидоров
3
1
1000
Операция деления
отношений


Эта операция наименее очевидна из всех операций реляционной
алгебры и поэтому нуждается в более подробном объяснении.
Пусть заданы два отношения - A с заголовком {a1, a2, ..., an, b1,
b2, ..., bm} и B с заголовком {b1, b2, ..., bm}. Будем считать, что
атрибут bi отношения A и атрибут bi отношения B не только
обладают одним и тем же именем, но и определены на одном и том
же домене. Назовем множество атрибутов {aj} составным
атрибутом a, а множество атрибутов {bj} - составным атрибутом b.
После этого будем говорить о реляционном делении бинарного
отношения A(a,b) на унарное отношение B(b).
Результатом деления A на B является унарное отношение C(a),
состоящее из кортежей v таких, что в отношении A имеются
кортежи <v, w> такие, что множество значений {w} включает
множество значений атрибута b в отношении B.
Деление отношений
Пусть даны отношения A(X1,X2,…,Xn, Y1,
Y2, …, Yn) и B(Y1, Y2, …, Yn) , причем
атрибуты (Y1, Y2, …, Yn) - общие для двух
отношений.
Делением отношений A на B
называется отношение с заголовком
(X1,X2,…,Xn)
и
телом,
содержащим
множество кортежей (x1,x2,…,xn) таких,
что для всех кортежей (y1, y2, …, yn) в
отношении A найдется кортеж (x1,x2,…,xn,
y1, y2, …, yn).
Деление отношений
Отношение A выступает в роли
делимого, отношение B выступает в
роли делителя.
Деление отношений аналогично
делению чисел с остатком.
Синтаксис операции деления:
A devidby B
Пример
В примере с поставщиками,
деталями и поставками ответим на
вопрос, "какие поставщики
поставляют все детали?".
Пример (продолжение)
Номер поставщика
PNUM
1
1
1
2
2
3
Номер детали
DNUM
1
2
3
1
2
1
Пример (продолжение)
Номер детали
DNUM
1
2
3
Пример (продолжение)
Деление X devidby И дает список номеров поставщиков,
поставляющих все детали:
Номер поставщика
PNUM
1
Структурированный язык
запросов SQL
Язык РБД SQL (Structured Query Language) предназначен
для определения ресурсов данных, манипулирования данными
и управления доступом к данным на концептуальном уровне.
SQL не является языком программирования и не содержит
никаких процедурных средств. Строго говоря, это подъязык
данных.
Структурированный язык
запросов SQL


Первая версия SQL была разработана фирмой IBM в начале 70-х
годов[1]
и
использовалась
в
качестве
входного
языка
экспериментальной СУБД System-R. Описание языка было впервые
опубликовано в 1974 году. К середине 80-х годов многие
производители коммерческих СУБД создали свои реализации SQL. Во
избежание «вавилонского смешения языков» в мире реляционных
СУБД Международная Организация Стандартизации и Американский
Национальный Институт Стандартов (ISO/ANSI) приняли в 1986 году
первый стандарт SQL1. В 1989 году этот стандарт был пересмотрен.
Сейчас на него ссылаются как на SQL1 или SQL-89. В 1992 году
принят новый стандарт, известный ныне под названиями SQL2, SQL92, SQL/92. Распространенные в настоящее время коммерческие
СУБД, за исключением наиболее «продвинутых», ориентированы на
стандарт SQL1. Мы при изложении возможностей языка будем в
основном придерживаться требований SQL2, т.к. этот стандарт
практически полностью включает SQL1 и является основой для
перспективных разработок.
[1] Она называлась SEQUEL (Structured English Query Language).
Структурированный язык
запросов SQL
Следует иметь в виду, что стандарты SQL, равно как и
прочие стандарты в области программного обеспечения,
носят
рекомендательный
характер.
Производители
программных продуктов могут не придерживаться их
требований. Тем не менее, знакомство со стандартами
необходимо, так как они определяют общие свойства всех
реализаций и согласованные представления разработчиков
СУБД о системных требованиях и перспективах развития.
Для практического использования SQL в конкретной среде
разработки необходимо изучить поддерживаемую средой
версию языка по технической документации.
Структурированный язык
запросов SQL
SQL
Èí òåðàêòèâí û é
Ñòàòè÷åñêèé
Âñòðî åí í û é
Äèí àì è÷åñêèé
Ì î äóëüí û é
Структурированный язык
запросов SQL





Интерактивный SQL дает возможность пользователю работать с
базой данных в интерактивном режиме. Вводимые пользователем
команды SQL немедленно исполняются.
Статический SQL – записанный заранее код SQL, используемый в
прикладных программах. Предусмотрены две версии статического
SQL.
Встроенный SQL – код SQL, включённый в код исходного текста
прикладной программы на одном из ЯВУ. Эта версия является
расширением базового ЯВУ за счет операторов SQL.
Модульный SQL не предполагает включения операторов SQL в
базовый язык. Приложение состоит из отдельных модулей SQLоператоров, скомпонованных с модулями других языков.
Динамический SQL – код SQL, генерируемый во время исполнения
прикладной программы. Он заменяет статический в тех случаях, когда
необходимый код SQL не может быть определен при написании
приложения, так как он зависит от оперативных решений
пользователя.
Структурированный язык
запросов SQL
Категории
язык определения данных
DDL – Data Definition Language
язык манипулирования данными
DML – Data Manipulation Language
операторы управле
DCS – Data Contr
Язык определения данных
(DDL – Data Definition Language) включает все операторы,
используемые для определения схемы БД и объектов схемы;












CREATE SCHEMA - создать схему базы данных
DROP SHEMA - удалить схему базы данных
CREATE TABLE - создать таблицу
ALTER TABLE - изменить таблицу
DROP TABLE - удалить таблицу
CREATE DOMAIN - создать домен
ALTER DOMAIN - изменить домен
DROP DOMAIN - удалить домен
CREATE COLLATION - создать последовательность
DROP COLLATION - удалить последовательность
CREATE VIEW - создать представление
DROP VIEW - удалить представление
Язык манипулирования
данными

(DML – Data Manipulation Language) содержит операторы,
используемые для выборки и обновления данных;
SELECT - отобрать строки из таблиц
INSERT - добавить строки в таблицу
UPDATE - изменить строки в таблице
DELETE - удалить строки в таблице
COMMIT - зафиксировать внесенные изменения

ROLLBACK - откатить внесенные изменения




Операторы управления
данными




(DCS – Data Control Statements) используются для определения
привилегий пользователей.
CREATE ASSERTION - создать ограничение
DROP ASSERTION - удалить ограничение
GRANT - предоставить привилегии пользователю или приложению на
манипулирование объектами
REVOKE - отменить привилегии пользователя или приложения
Имеются и другие категории, например, операторы определения
транзакций, диагностические операторы и т.д. Стандарт SQL2
определяет свыше 50 операторов.
Объект
Стандарт трактует объект как нечто, имеющее уникальное имя
и определение, постоянно сохраняемые в системном каталоге СУБД.
Например, объектами являются схемы, явно определенные таблицы,
домены, правила (утверждения).
Объект создается пользователем, имеющим соответствующую
привилегию CREATE. Этот пользователь является владельцем
объекта и может распоряжаться им по своему усмотрению. В
частности, он может передавать привилегии другим пользователям.
Объект может быть уничтожен только его владельцем. Исполняя
оператор уничтожения объекта, система удалит из своего каталога его
имя и определение.
Объект
Стандартное имя
Русское название
ASSERTION
Утверждение
CHARACTER SET
Набор символов
COLLATION
Сравнение
DOMAIN
Домен
SCHEMA
Схема
TABLE
Таблица
TRANSLATION
Трансляция
VIEW
Представление
Идентификатор авторизации



Для того чтобы SQL-система могла обеспечить защиту данных,
каждый источник SQL-операторов (SQL-агент) получает уникальное
имя – идентификатор авторизации (Authorization ID). ID сохраняется в
системном каталоге и может быть именем физического лица, группы
или прикладной программы. Какие бы то ни было действия в БД
выполняются SQL-системой только от имени конкретного ID.
С ID могут быть связаны привилегии, определяющие конкретные
действия в БД, которые разрешено выполнять пользователю. Обычно
привилегии определяют действия ID при работе с интерактивным SQL
или в рамках приложения. Однако при работе с приложениями
привилегии часто назначаются приложениям, а не ID, от имени
которых они запускаются. В этом случае ID, имеющий привилегию
запуска
приложения, как бы получает его привилегии. Они
распространяются только на сеанс работы с приложением и
недействительны в интерактивном режиме.
Идентификатор авторизации (ID) – идентификатор источника
операторов SQL и одновременно объект, с которым связаны
привилегии. Может быть пользователем или модулем, владельцем
схемы SQL и ее содержимого.
Сеанс



Установление связи с СУБД (подключение) определяет начало сеанса
работы пользователя. При подключении система
получает
информацию о том, какой ID будет являться SQL-агентом.
Сеанс – набор SQL-операторов, исполняемых от имени определенного
ID с момента его подключения к системе до момента отключения.
SQL-агенту разрешено выполнять несколько подключений. Поэтому
одновременно могут существовать несколько сеансов одного и того же
ID. В каждом из них могут использоваться различные источники
данных. Активным в любой момент времени является только один
сеанс – текущий. Пользователь может изменять текущий сеанс.
Тип данных
Все значения любого столбца в любой SQL-таблице должны
принадлежать одному и тому же типу данных. Тип данных должен
быть частью определения самого столбца или частью определения
домена, из которого выбираются значения столбца. Стандарт
определяет шесть категорий типов данных. Каждый тип имеет
собственное имя и может быть только простым. Допускаются
синонимы имен, например, CHARACTER эквивалентно CHAR. Имена
типов или их синонимы используются в определениях столбцов и
доменов.
Домен


Понятие домена в SQL отличается от аналогичного понятия в РМД.
Стандарт не определяет домен как логическую категорию значений,
которые можно сравнивать. Согласно стандарту, домен есть просто
именованная совокупность значений данных. Имя и определение
домена (см. п. 0) сохраняются в специальной таблице системного
каталога. На имя домена можно ссылаться внутри определения
таблицы как на тип данных.
Домен (DOMAIN) – объект, который может использоваться как
альтернатива типу данных для столбцов. Домен определяет тип
данных и может также задавать некоторые другие элементы,
например, значение по умолчанию, одно или несколько ограничений.
Таблица


Таблица в SQL является аналогом отношения РМД. Однако в отличие
от отношения, схема таблицы может не содержать уникального
подмножества
атрибутов
(столбцов).
Стандарт
не
требует
обязательного указания первичного и альтернативных ключей при
определении таблицы. С точки зрения SQL-системы в этом нет
необходимости. Она автоматически присваивает каждой строке
уникальный внутренний номер – суррогатный ключ. Однако этот ключ
пользователю не виден и вне системы смысла не имеет. Это приводит
к тому, что в таблицах SQL могут (с точки зрения пользователя)
содержаться дубликаты строк и совершенно непонятно, как их следует
интерпретировать.
Таблица (TABLE) – объект, являющийся набором значений, которые
могут разделяться на строки и столбцы, так что на пересечении
строки и столбца располагается только одно значение. Все значения в
столбце принадлежат одному типу данных (домену). Столбцы имеют
имена, уникальные в пределах таблицы.
Таблица
Òàáëèöà
Èì åí î âàí í àÿ òàáëèöà
Ï ðåäñòàâëåí èå
Í åèì åí î âàí í àÿ òàáëèöà
Áàçî âàÿ òàáëèöà
Ï î ñòî ÿí í àÿ òàáëèöà
Âðåì åí í àÿ òàáëèöà
Ñî çäàí í àÿ âðåì åí í àÿ
òàáëèöà
Ãëî áàëüí àÿ âðåì åí í àÿ
òàáëèöà
Î áúÿâëåí í àÿ âðåì åí í àÿ
òàáëèöà
Ëî êàëüí àÿ âðåì åí í àÿ
òàáëèöà
Представление




Кроме базовых таблиц, физически сохраняемых во внешней памяти, в
схеме могут быть определены виртуальные таблицы – представления.
Представление имеет собственное имя, зарегистрированное в
системном каталоге. На него можно ссылаться как на имя таблицы в
операторах манипулирования данными. Заголовок представления, в
отличие от заголовка таблицы, не определяется явно путём
специфицирования столбцов. Определение представления содержит
запрос к другим таблицам, который связывается с именем
представления и сохраняется в системном каталоге. Запрос
исполняется при обработке оператора манипулирования данными, в
котором встретилась ссылка на представление. Результат запроса и
является содержимым представления. Таким образом, представление,
в отличие от временной таблицы, всегда отражает текущее состояние
базовых таблиц, существующее в момент исполнения запроса.
Представление (VIEW) есть объект, содержащий именованный запрос,
на который можно ссылаться в операторах манипулирования
данными.
Механизм представлений обеспечивает возможность предъявления
хранимых данных в удобной и привычной для конечного пользователя
форме. Кроме того, он является средством ограничения доступа к
данным.
Язык манипулирования
данными
В состав языка манипулирования данными (DML) входят четыре
оператора, предназначенных для извлечения и обновления данных.
Эти операторы (таблица 6.3) применяются только к именованным
таблицам. Их общая особенность состоит в том, что они описывают
конечный результат обработки данных, а не процедуру обработки.
SQL-система сама определяет, где находятся нужные данные, и какие
пути доступа к ним существуют, и сама генерирует эффективные
последовательности операций для их получения (обновления).
Язык манипулирования
данными
Название
Назначение
SELECT
Осуществляет выборку данных из одной или более
таблиц,собирая их в неименованную временную
таблицу.
INSERT
Добавляет новые строки в существующую таблицу.
UPDATE
Обновляет значения указанных
существующей таблицы.
DELETE
Удаляет строки существующей таблицы.
полей
в
строках
Оператор выборки данных



Оператор SELECT реализует концепции реляционной алгебры и
реляционного исчисления и является наиболее сложной и богатой
возможностями командой языка. Результатом действия оператора
является неименованная таблица, на которую невозможно сослаться
из других команд SQL. Тем не менее, произведенный оператором
SELECT результат может быть использован для управления работой
любого другого оператора DML. Кроме того, оператор SELECT
используется в определениях ограничений, а представления можно
трактовать как именованные операторы SELECT.
Оператор SELECT часто используется в предикатах SQL в качестве
переменной в простом операторе сравнения или в качестве
определения множества допустимых значений переменной в
специальных предикатах. Это обеспечивает возможность вложения
команд выборки данных, благодаря чему запрос любой сложности
может быть сформулирован в виде одного оператора SELECT,
содержащего несколько подзапросов – вложенных команд SELECT.
Многие основные и вспомогательные конструкции SQL созданы для
описания понятий, связанных с выборкой данных. Поэтому мы начнем
знакомство с языком именно с оператора SELECT, являющегося
фундаментальным средством.
Оператор выборки данных
Синтаксическая диаграмма оператора имеет вид:
SELECT [ DISTINCT ] {элемент_целевого_списка.,..}
| [ спецификатор. ]*
FROM {
{ имя_таблицы [ [AS] псевдоним [(имя_столбца.,..)] ]}
| { подзапрос [AS] псевдоним [(имя_столбца.,..)] }
| соединение
}.,..
[ WHERE предикат ]
[ GROUP BY { [спецификатор.]имя_столбца }.,..]
[ HAVING предикат ]
[ ORDER BY {{ имя_целевого_столбца [ ASC | DESC ]}.,..}
| {{ положительное_целое [ ASC | DESC ]}.,..}
]
;
Оператор выборки данных
Из синтаксической диаграммы видно, что в общем случае
оператор может включать шесть предложений.
Два из них – SELECT и FROM – являются обязательными и
входят в состав любого конкретного оператора выборки. Они
указывают, что должно быть выбрано (целевой список предложения
SELECT) и из каких таблиц (список таблиц в предложении FROM).
Остальные четыре предложения (WHERE, GROUP BY, HAVING,
ORDER BY) определяют условия, которым должны удовлетворять
выходные данные.
Порядок следования предложений в любом реальном
операторе SELECT должен соответствовать указаному в
диаграмме.
Прежде чем познакомиться с деталями синтаксических
конструкций, рассмотрим с концептуальной точки зрения процесс
исполнения оператора в целом.
Обработка оператора
SELECT
Последовательность обработки предложений в операторе SELECT не
вполне соответствует порядку их следования в синтаксической диаграмме
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
Обработка оператора
SELECT





Первым всегда обрабатывается предложение FROM. Оно описывает
источник данных – набор таблиц, содержащих запрашиваемые
данные. В результате обработки в рабочем буфере системы создается
неименованная временная таблица, которую мы будем называть далее
F-таблицей. С концептуальной точки зрения она представляет собой
расширенное прямое произведение таблиц, указанных после
ключевого слова FROM.
Необязательные предложения WHERE, GROUP BY, HAVING, если
они использованы в команде, обрабатываются в указанном порядке
после предложения FROM. В результате обработки в рабочих
буферах системы создаются неименованные временные таблицы,
которые мы будем называть W-, G- и H-таблицами соответственно.
Каждая из них является преобразованием таблицы предыдущего
уровня.
W-таблица содержит только те строки F-таблицы, на которых
предикат предложения WHERE принял значение TRUE.
G-таблица представляет собой F- или W-таблицу, строки которой
собраны в группы с одинаковыми наборами значений в столбцах,
указанных после ключевого слова GROUP BY.
H-таблица включает только такие группы строк из G-таблицы, на
которых предикат предложения HAVING принял значение TRUE.
Обработка оператора
SELECT



Выходная
таблица
запроса является результатом обработки
предложения SELECT. В простейшем случае её можно представлять
себе как реляционную проекцию F-, W-, G- или H-таблицы на
столбцы, указанные после ключевого слова. На самом деле это
неточно, так как элементами целевого списка запроса могут быть не
только имена столбцов источника, но и выражения, агрегатные
функции и т.п.
Предложение ORDER BY всегда обрабатывается после предложения
SELECT. Результатом обработки является выходная таблица запроса,
строки которой упорядочены по значениям столбцов, указанных после
ключевого слова ORDER BY.
В процессе обработки оператора SELECT никаких изменений в
физической базе данных не происходит. Система манипулирует
копиями базовых таблиц в своих рабочих буферах.
Алгоритм исполнения
оператора SELECT
1.
2.
3.
4.
Вычислить и поместить в рабочий буфер F-таблицу – расширенное
прямое произведение таблиц, указанных после слова FROM.
Если в состав оператора включено предложение WHERE, то для
каждой строки F-таблицы вычислить значение предиката,
указанного после ключевого слова. Вычислить и поместить в
рабочий буфер W-таблицу, составленную из строк F-таблицы, на
которых предикат принял значение TRUE.
Если в состав оператора включено предложение GROUP BY, то
вычислить и поместить в рабочий буфер G-таблицу, собрав строки
рабочего буфера в группы с одинаковыми значениями столбцов,
указанных после ключевого слова, иначе выполнить п. 5.
Если в составе оператора присутствует ключевое слово HAVING,
то для каждой группы строк G-таблицы вычислить значение
предиката, указанного после ключевого слова. Вычислить и
поместить в рабочий буфер H-таблицу, составленную из строк Gтаблицы, на которых предикат принял значение TRUE.
Алгоритм исполнения
оператора SELECT
5. Если в рабочем буфере находится F-таблица или W-таблица, то для
каждой строки рабочего буфера вычислить значения столбцов,
указанных после ключевого слова SELECT, и сформировать строку
выходной таблицы запроса.
Иначе, если в рабочем буфере находится G-таблица или H-таблица,
то для каждой группы строк рабочего буфера вычислить значения
столбцов, указанных после ключевого слова SELECT, и сформировать
одну строку выходной таблицы запроса.
6. Если в составе оператора присутствует ключевое слово ORDER BY, то
отсортировать строки выходной таблицы запроса по значениям
столбцов, указанных после ключевого слова.
Предложение SELECT
Предложение SELECT описывает целевой список – заголовок выходной
таблицы запроса.
Список может задаваться посредством перечисления элементов.
элемент_целевого_списка ::=
{
{
{[спецификатор.]имя_столбца}
| выражение
| агрегатная_функция
}
[ AS имя_целевого_столбца ]
}
| символьная_константа
Предложение SELECT
спецификатор – имя или псевдоним источника данных;
имя_столбца – имя столбца источника данных;
выражение – допустимое выражение для вычисления значения;
агрегатная_функция – функция множества значений (столбца),
возвращающая скалярное значение [2, п.2.5.5];
имя_целевого_столбца – имя столбца выходной таблицы; обычно
используется для именования столбцов, содержащих значения
выражений или агрегатных функций;
символьная_константа – любая последовательность допустимых
символов.
В этом случае порядок следования столбцов выходной таблицы запроса
задаётся явно, а типы и длины значений столбцов наследуются от
соответствующих столбцов базовых таблиц.
Если для определения целевого списка используется конструкция
[спецификатор.]*, то в заголовок выходной таблицы войдут (в
соответствующем порядке) все столбцы указанного источника данных.
Примеры допустимых предложений SELECT приведены ниже.
Предложение FROM
Предложение FROM определяет исходные данные для запроса –
источник данных. Обычно источниками данных являются
именованные таблицы.
имя_таблицы – имя базовой таблицы или представления.
[AS] псевдоним[(имя_столбца.,..)] – необязательная конструкция,
определяющая новое имя таблицы и, возможно, новые имена её
столбцов. Ключевое слово AS смысловой нагрузки не несёт.
Псевдоним используется для ссылок в последующих предложениях
команды и действителен только внутри того оператора SELECT, в
котором определён. Обычно именованным таблицам назначают
псевдонимы для того, чтобы облегчить понимание запроса человеком.
Однако в ряде случаев псевдонимы необходимы для разрешения
конфликтов имён.
Стандарт SQL1 допускал в предложении FROM только ссылки на имена
базовых таблиц и представлений. В отличие от этого, SQL2 разрешает
использовать в качестве источников данных неименованные таблицы
– результаты запросов или явно заданных реляционных операций
соединения.
Предложение FROM
Конструкция
подзапрос [AS] псевдоним [(имя_столбца.,..)]
предназначена для обеспечения ссылок на столбцы результата
запроса. Здесь подзапрос – заключённый в круглые скобки оператор
SELECT произвольной сложности. В этом случае псевдоним
обязателен. Он используется как локальное имя неименованной
таблицы, произведённой подзапросом.
Пример 1

Получить имена и статусы всех
поставщиков.
SELECT S.Snam, S.St FROM S;
Этот оператор произведёт
следующую таблицу:
Пример 1
Snam
Иван
Николай
Григорий
St
100
50
80
Петр
Константин
Иван
Сергей
20
100
100
90
Владимир
Егор
30
100
Пример 2



Получить имена и статусы всех
поставщиков, использовать оператор
переименования колонок, а также
исключить дубликаты строк.
SELECT DISTINCT Snam AS Имя, St
AS Статус FROM S;
Во временной таблице изменятся
имена столбцов Snam и St на Имя и
Статус соответственно.
Пример 2
Имя
Статус
Владимир
30
Григорий
80
Иван
100
Константин
100
Николай
50
Петр
20
Егор
100
Сергей
90
Пример 3
Использование скалярных выражений и
переименований колонок в запросах
SELECT Pnum AS Номер,
Pnam AS Наименование,
We/1000 AS Вес,
'кг' AS Ед. измер.
FROM P;
Пример 3
Номер
Наименование
Вес
Ед. измер.
P1
P2
корпус
разъём
0,3
0,003
кг
кг
P3
кнопка
0,005
кг
P4
корпус
0,8
кг
P5
P6
P7
панель
кинескоп
кнопка
0,1
1,2
0,01
кг
кг
кг
P8
панель
0,45
кг
P9
лампочка
0,001
кг
Пример 4
Получить
всю
информацию
о
поставщиках, имеющих статус выше
90.
SELECT *
FROM S
WHERE St > 90;
Пример 4
Snum
Snam
St
Ci
S5
Константин
100
Яя
S9
Иван
100
Лесото
S9
Егор
100
Яя
S1
Иван
100
Томск
Пример 5
Получить значения номеров и
наименований изделий,
производимых в Томске.
SELECT Jnum, Jnam
FROM J
WHERE Ci = ‘Томск’;
Пример 5
Jnum Jnam
J3
дисплей
J6
клавиатура
Insert
Insert into table TableName
(columns defenition)
Values
(values defenition)
Update
Update TableName set
ColumnName=Values
Where ColumnName=Values2
Alter

Alter Table Tablename
Delete

Delete from TableName
Drop
Drop table TableName
SQL РА
Отношение R
R.a1
R.a2
A
1
A
2
B
1
B
3
B
4
CREATE TABLE R(a1 CHAR(1),
a2 INT, PRIMARY KEY(a1,a2))
Отношение S
S.b1
S.b2
1
h
2
g
3
h
CREATE TABLE S(b1 INT
PRIMARY KEY, b2 CHAR(1))
Операция выборки в SQL

Выборка σ(a2=1)( R )={(a, 1), (b, 1)}
записывается следующим образом:
SELECT a1, a2FROM RWHERE a2=1
Операция проекции в SQL
Проекция Πb2(S)={(h), (g))
записывается следующим образом:

SELECT b2FROM S
Декартово произведение


Декартово произведение RxS двух
отношений (двух таблиц) определяет
новое отношение - результат
конкатенации (т.е. сцепления) каждого
кортежа (каждой записи) из отношения R
с каждым кортежем (каждой записью) из
отношения S.
RxS={(a, 1, 1, h), (a, 2, 1, h),
(b, 1, 1,
h), ... }SELECT R.a1, R.a2, S.b1, S.b2
Операция соединения по двум отношениям






Формат операции:
FROM имя_таблицы_1 {INNER | LEFT | RIGHT}
JOIN имя_таблицы_2 ON условие_соединения
Существуют различные типы операций соединения:
тета-соединение R FS;
соединение по эквивалентности R =S;
естественное соединение R S;
внешнее соединение R S; R S;
полусоединение R FS.
Естественное соединение
называется соединение по эквивалентности двух
отношений R и S, выполненное по всем общим
атрибутам, из результатов которого исключается по
одному экземпляру каждого общего атрибута


SELECT R.a1, R.a2, S.b2FROM R,
SWHERE R.a2=S.b1
SELECT R.a1, S.b1, S.b2FROM R INNER
JOIN S ON R.a2=S.b1
Естественное соединение
a
a
b
b
R S, F=(R.a2=S.b1)
R.a2 или
R.a1
S.b2
S.b1
1
h
2
g
3
h
1
h
Проекция


SELECT *FROM Сделка, Товар WHERE
Сделка.КодТовара=Товар.КодТовара
SELECT *FROM Товар INNER JOIN
Сделка
ON
Товар.КодТовара=Сделка.КодТовара
Тета-соединение отношений в SQL


SELECT R.a1, R.a2, S.b1, S.b2FROM R,
SWHERE R.a2=S.b1
SELECT R.a1, R.a2, S.b1, S.b2FROM R
INNER JOIN S ON R.a2=S.b1
Внешнее соединение.
R.a1
a
a
b
b
b
R S, F=(R.a2=S.b1)
R.a2
S.b1
1
1
2
2
1
1
3
3
4
null
S.b2
h
g
h
h
null
Левое
SELECT R.a1, R.a2, S.b1, S.b2FROM R LEFT JOIN S ON R.a2=S.b1
Правое
SELECT R.a1, R.a2, S.b1, S.b2FROM R RIGHT JOIN S ON R.a2=S.b1
Объединение
SELECT R.a1, R.a2 FROM R
UNION
SELECT S.b2, S.b1 FROM S
Пересечение
SELECT R.a1, R.a2
FROM R,S
WHERE R.a1=S.b1 AND R.a2=S.b2
SELECT R.a1, R.a2FROM R
WHERE R.a1 IN
(SELECT S.b1 FROM S WHERE S.b1=R.a1)
AND R.a2 IN
(SELECT S.b2
FROM S
WHERE S.b2=R.a2)
Разность
SELECT R.a1, R.a2FROM R
WHERE NOT EXISTS
(SELECT S.b1,S.b2 FROM S
S.b1=R.a2 AND S.b2=R.a1)
WHERE
Таблица 5.6.
Отношение R
имя
пол
рост
возраст
вес
a
ж
160
20
60
b
м
180
30
70
c
ж
150
16
40
Отношение S
имя
a
пол
ж
возраст
20
Деление
T1=ПC(R)
рост
вес
•CREATE VIEW T1AS SELECT рост,весFROM R
TT=(S X T1)-R
имя
•CREATE VIEW TT ASSELECT S.имя, S.пол, S.возраст,
пол
возраст
рост
вес
T1.рост, T1.весFROM S, T1
T2=ПC((S X T1)-R)
рост
•CREATE VIEW T2ASSELECT TT.рост, TT.весFROM TTWHERE NOT EXISTS
вес
(SELECT R.рост, R.вес
FROM R
WHERE TT.имя=R.имя AND TT.пол=R.пол
T=T1-T2
рост
•SELECT T1.рост, T1.весFROM T1WHERE NOT EXISTS
(SELECT T2.рост,T2.вес
вес
FROM T2
WHERE T1.рост=T2.рост AND T1.вес=T2.вес)
AND TT.возраст=R.возраст
AND TT.р
РМД. Целостность.
Целостность данных



Модель БД отражает реальное состояние ПО в любой
фиксированный момент времени в виде текущей
конфигурации хранимых данных. Очевидны два основных
требования к этой конфигурации.
Любое хранимое в БД значение любого семантически
значимого атрибута в любой момент времени должно быть
истинным значением характеристики соответствующего
объекта ПО.
Состояние БД в любой момент времени должно иметь
осмысленную интерпретацию в терминах ПО.
Целостность данных


Текущее состояние БД является целостным, если
возможна осмысленная интерпретация его в терминах ПО.
Целостность данных и адекватность данных – не одно и
то же. Данные могут быть целостными, но при этом не
соответствующими
действительности.
Обеспечение
адекватности – проблема пользователя, поддержание
целостности может быть проблемой СУБД.
Целостность данных



Правила, о которых мы только что говорили, являются
специфическими в том смысле, что они применяются к
одной конкретной БД. Их называют внешними
ограничениями целостности (ОЦ) данных.
Внешние ОЦ – это обусловленные требованиями конкретной
ПО правила, соблюдение которых обеспечивает
интерпретируемость хранимых данных.
Все БД, основанные на РМД, кроме специфических правил
(внешних ОЦ), подчиняются еще общим правилам
целостности. Эти правила называются внутренними ОЦ
РМД. Однако, прежде чем обсуждать их, введем важнейшие
понятия возможного, первичного и внешнего ключей
отношения.
Целостность данных


Определение. Пусть R( ) – схема отношения и K  R( )
– подмножество атрибутов схемы. Подмножество К
называется возможным (потенциальным) ключом
отношения, если
А) в любой момент времени в текущем значении R нет
двух кортежей с одинаковым значением К;
Б) никакое подмножество L  К не обладает свойством
А).
Свойство А) называется свойством уникальности, а
свойство Б) – свойством неизбыточности.
Возможный ключ отношения – это уникальное
неизбыточное подмножество его атрибутов.
Целостность данных





Потенциальные ключи служат средством идентификации объектов
предметной области, данные о которых хранятся в отношении.
Объекты предметной области должны быть различимы.
Потенциальные ключи служат единственным средством адресации
на уровне кортежей в отношении. Точно указать какой-нибудь
кортеж можно только зная значение его потенциального ключа
Важно заметить, что понятие возможного ключа – логическое. Его не
следует путать с физическим понятием уникального индекса
Если потенциальный ключ содержит единственный атрибут, то он
называется простым. В противном случае – составным.
Если отношение имеет несколько возможных ключей, то один из них
выделяется и помечается как первичный. Тогда все остальные
возможные ключи называются альтернативными. Первичные
ключи обеспечивают механизмы связи отношений
Целостность данных




Определение. Пусть В – базовое отношение и FK – некоторое
подмножество атрибутов его схемы FK  B ( ).
FK называется внешним ключом (Foreign Key) отношения В, если
А) существует базовое отношение А с первичным ключом РК
(Primary Key);
Б) каждое значение FK в текущем значении В всегда совпадает со
значением РК некоторого кортежа в текущем значении А.
Целостность данных

Отношения А и В называются связанными. Отношение А называется
родительским или ссылочным, В – потомком или ссылающимся. РК
называют родительским (ссылочным) ключом. FK – ключом-потомком
(ссылающимся).
Целостность данных
№ поставщика
Наименование
поставщика
Номер детали
Наименование
детали
Поставляемое
количество
1
Иванов
1
Болт
100
1
Иванов
2
Гайка
200
1
Иванов
3
Винт
300
2
Петров
1
Болт
150
2
Петров
2
Гайка
250
3
Сидоров
3
Винт
1000
Целостность данных
Что произойдет, если изменилось наименование поставщика? Т.к.
наименование поставщика повторяется во многих кортежах
отношения, то это наименование нужно одновременно изменить во
всех кортежах, где оно встречается, иначе данные станут
противоречивыми. То же самое с наименованиями деталей. Значит,
данные хранятся в нашем отношении с большой избыточностью
Целостность данных
Далее, как отразить факт, что некоторый поставщик, например
Петров, временно прекратил поставки деталей? Если мы удалим все
кортежи, в которых хранится информация о поставках этого
поставщика, то мы потеряем данные о самом Петрове как
потенциальном поставщике. Выйти из этого положения, оставив в
отношении кортеж типа (2, Петров, NULL, NULL, NULL) мы не
можем, т.к. атрибут "Номер детали" входит в состав потенциального
ключа и не может содержать null-значений. То же самое произойдет,
если некоторая деталь временно не поставляется никаким
поставщиком. Получается, что мы не можем хранить информацию о
том, что есть некий поставщик, если он не поставляет хотя бы одну
деталь, и не можем хранить информацию о том, что есть некоторая
деталь, если она никем не поставляется.
Целостность данных
Подобные проблемы возникают потому, что мы смешали в
одном отношении различные объекты предметной области и данные о поставщиках, и данные о деталях, и данные о
поставках деталей. Говорят, что это отношение плохо
нормализовано (просто нормализованным оно является хотя
бы потому, что оно есть отношение и, следовательно,
автоматически находится в 1НФ).
Целостность данных
В реляционных базах данных основными являются взаимосвязи типа
"один-ко-многим". Взаимосвязи типа "много-ко-многим" реализуются
использованием нескольких взаимосвязей типа "один-ко-многим".
Отношение, входящее в связь со стороны "один" (например,
"Поставщики"), называют родительским отношением. Отношение,
входящее в связь со стороны "много" (например, "Поставки"),
называется дочернем отношением.
Целостность данных
Разнесем данные по трем
отношениям:
"Поставщики",
"Детали",
"Поставки".
Целостность данных





"Поставщики выполняют Поставки",
"Детали поставляются через Поставки".
Эти две взаимосвязи косвенно определяют новую взаимосвязь между
"Поставщиками" и "Деталями":
"Детали поставляются Поставщиками".
Эти фразы отражают различные типы взаимосвязей. Чтобы более
точно
отразить
предметную
область,
можно
иначе
переформулировать фразы:
"Один Поставщик может выполнять несколько Поставок", "Одна
Деталь может поставляться несколькими Поставками".
Это пример взаимосвязи типа "один-ко-многим".
Взаимосвязь
между
"Поставщиками"
и
"Деталями"
можно
переформулировать так:
"Несколько Деталей может поставляться несколькими Поставщиками".
Это пример взаимосвязи типа "много-ко-многим".
Целостность данных
Механизм реализации взаимосвязи "один-ко-многим"
состоит в том, что в дочернее отношение
добавляются атрибуты, являющиеся ссылками на
ключевые атрибуты родительского отношения. Эти
атрибуты
и
являются
внешними
ключами,
определяющими, с какими кортежами родительского
отношения связаны кортежи дочернего отношения.
Такие атрибуты еще называют мигрирующими из
родительского отношения.
Номер поставщика
Наименование поставщика
1
Иванов
2
Петров
3
Сидоров
Номер детали
Наименование детали
1
Болт
2
Гайка
3
Винт
Номер поставщика
Номер детали
Поставляемое количество
1
1
100
1
2
200
1
3
300
2
1
150
2
2
250
3
3
1000
Внутренние ограничения
целостности РМД.



Выделяют три разновидности
внутренних ОЦ:
целостность домена,
целостность сущности,
ссылочная целостность.
Целостность домена




Домены являются одной из важнейших составляющих РМД.
Механизм доменов обеспечивает:
принципиальную возможность ограничения сравнений и
блокирования бессмысленных операций в БД;
принципиальную возможность формального контроля ввода
данных. Если предикат, определяющий домен, принял на
вводимом значении атрибута значение .F., система не должна
принимать это значение атрибута.
Таким образом, если система поддерживает домены, то она
способна предотвратить грубые ошибки пользователя. Поэтому
при проектировании концептуальной модели очень важно
правильно определить домены всех хранимых атрибутов.
Правило целостности домена: всякий атрибут может
принимать значения только из своего домена.
Целостность сущности


Правило целостности сущности часто формулируют как
требование уникальности значений первичного ключа.
Однако, на самом деле это не так. Требование
целостности сущности состоит в том, что каждый
кортеж любого отношения должен быть
идентифицируем. Иначе говоря, в БД не должна
храниться информация о чем-то таком, что мы не
можем идентифицировать.
Это требование связано с проблемой представления
незнания в БД. В реальной жизни в базу данных
нередко приходится включать кортежи, содержащие
неизвестные значения некоторых атрибутов.
Правило целостности сущности: ни один компонент
первичного ключа отношения не может принимать
неопределенное значение.
Ссылочная целостность

Требование ссылочной целостности:
ни в какой момент времени в базе данных не может быть значений
ссылающегося ключа, которых нет среди существующих значений
родительского ключа.
или

ни в какой момент времени в БД не может быть определенных (не
Null-) значений ссылающегося ключа, которых нет среди
существующих значений родительского ключа.
Операции обновления и
целостность данных
Целостность домена
Целостность
сущности
Ссылочная
целостность
INSERT
ДА
ДА
ДА
DELETE
НЕТ
НЕТ
ДА
UPDATE
ДА
ДА
ДА
Контроль целостности
домена.


Правило целостности домена должно проверяться при любой попытке
ввода/обновления значения любого атрибута, определенного на этом
домене. Для того чтобы РСУБД могла это делать, правило должно
быть сформулировано в виде предиката и связано с доменом
специальным предложением ЯОД – предложением объявления домена
(см. п. 2.4.1). Обрабатывая это предложение, система вносит в свой
каталог имя домена и реализует процедуру вычисления значений
предиката. Процедура связывается с именем домена и сохраняется
для дальнейшего исполнения.
Атрибут связывается со своим доменом строкой предложения
определения базового отношения (см. п. 2.4.2.). Это определение
также сохраняется в системном каталоге. При попытке присваивания
атрибуту значения в новом или существующем кортеже система
находит по каталогу имя соответствующего домена и вычисляет
значение связанного с ним предиката на новом значении атрибута.
Если предикат принял значение .F., обновление отвергается.
Контроль целостности
сущности




Правило целостности сущности должно проверяться при любой
попытке добавления нового кортежа в базовое отношение
(операция INSERT) или обновления значения первичного ключа
(операция UPDATE). Для этого в РСУБД может быть определена
стандартная процедура, возвращающая логическое значение.
Входными данными для нее являются имя обновляемого отношения
и вводимое значение набора атрибутов первичного ключа.
Процедура возвращает значение .F., если
хотя бы один атрибут набора принял значение Null или
значение набора уже существует в текущем множестве значений
первичного ключа обновляемого отношения.
Процедура связывается с конкретным отношением в процессе
обработки строки определения первичного ключа в предложении
определения отношения (см. п. 2.4.2). В соответствующий раздел
системного каталога заносится перечень атрибутов, входящих в
состав первичного ключа. При попытке выполнить операцию
UPDATE модуль контроля обновлений может установить по
каталогу, входит ли обновляемый атрибут в первичный ключ. Если
да, то процедура запускается. Попытка выполнения операции
INSERT всегда инициирует эту процедуру. Обновление отвергается,
если процедура контроля целостности сущности возвратила
значение .F.
Ссылочная целостность








Для поддержания обычно используются две основные стратегии:
RESTRICT (ОГРАНИЧИТЬ) - не разрешать выполнение операции,
приводящей к нарушению ссылочной целостности.
CASCADE (КАСКАДИРОВАТЬ) - разрешить выполнение требуемой
операции, но внести каскадные изменения в другие отношения так,
чтобы не допустить нарушения ссылочной целостности.
Дополнительными стратегиями поддержания ссылочной
целостности являются:
SET NULL (УСТАНОВИТЬ В NULL) - все некорректные значения
внешних ключей изменять на null-значения.
SET DEFAULT (УСТАНОВИТЬ ПО УМОЛЧАНИЮ) - все
некорректные значения внешних ключей изменять на некоторое
значение, принятое по умолчанию.
В реальных СУБД можно также отказаться от использования какойлибо стратегии поддержания ссылочной целостности:
IGNORE (ИГНОРИРОВАТЬ) - выполнять операции, не обращая
внимания на нарушения ссылочной целостности.
Нотации
Нотация Чена
Нотация Мартина
Нотация IDEF1X
Нотация IDEF1X
Нотация Баркера
Трехуровневая архитектура
СБД. ANSI SPARC



Эта архитектурная концепция предлагает
использовать три уровня представления данных:
внешний уровень – представления данных для
различных конечных пользователей.
внутренний уровень – представление данных в
памяти ЭВМ, но без конкретных технических
деталей (схема хранения).
концептуальный уровень – обобщенное
логическое представление данных, не
содержащее никаких ссылок на реализацию.
Трехуровневая архитектура СБД
ÓÐÎ ÂÍ È ÑÓÁÄ
Ï Ï 1
ÂÌ Ä1
Ï Ï 2
ÂÌ Ä2
Êî í öåï òóàëüí û é óðî âåí ü
(ÊÌ Ä)
Âí óòðåí í èé óðî âåí ü
(Âí Ì Ä)
Ï Ï n
ÂÌ Än
Ï ðèêëàäí û å ï ðî ãðàì ì û
Âí åø í èé óðî âåí ü
(èí äèâèäóàëüí û å
ï ðåäñòàâëåí èÿ
ï î ëüçî âàòåëåé)
Î áî áù åí í î å
ï ðåäñòàâëåí èå
ï î ëüçî âàòåëåé
Ï ðåäñòàâëåí èå
â ï àì ÿòè
ÓÐÎ ÂÅÍ Ü Î Ñ
Ôèçè÷åñêèé
óðî âåí ü
(ÔÁÄ)
Трехуровневая архитектура СБД
Трехуровневая архитектура
СБД
Пример:
Пусть в нашей ПО имеется объект СЛУЖАЩИЙ,
характеризующийся свойствами:



табельный номер
номер отдела
зарплата
Есть два конечных пользователя БД – КП1 и КП2. Для КП1
представляют интерес только табельный номер и номер
отдела, для КП2 – табельный номер и зарплата. Объект
имеет три уровня представления или описания.
Трехуровневая архитектура
СБД
Каждому из них обслуживающая его ПП предоставляет ту
информацию о СЛУЖАЩем, в которой он заинтересован,
скрывая другие характеристики.
Трехуровневая архитектура
СБД
Внешний уровень 1 (COBOL)
01 EMP#
DCL
02 ЕМPNO
PIC X (6)
03 DEPNO
PIC X (4)
Внешний уровень 2 (PL/1)
1 EMP
2 EMP CHAR (6)
3 SAL FIXED BIN (31);
Первые строчки этих текстов объявляют имена объекта.
Вторые и третьи строчки указывают имена и типы
характеристик объекта. Для КП1 – это табельный номер и номер
отдела, а для КП2 – табельный номер и зарплата. Отметим, что в
разных представлениях имена объекта и его характеристик могут
быть различными.
Трехуровневая архитектура
СБД
Концептуальный уровень
СЛУЖАЩИЙ
 Номер служащего
CHAR (6)
 Номер отдела CHAR (4)
 Зарплата NUMERIC (5)
Трехуровневая архитектура
СБД

На внутреннем уровне объект СЛУЖАЩИЙ представлен типом внутренней
записи STORED_EMP.
Внутренний уровень

STORED_EMPLENGTH= 20

PREFIXTYPE = BYTE (6),OFFSET= 0

EMP#TYPE = BYTE (6),OFFSET= 6,

INDEX = EmPXDEPT#TYPE = BYTE (4),OFFSET=12,

PAYTYPE =FULLWORD,OFFSET=16
Указана длина записи – 20 байт. Запись состоит из четырех хранимых полей
– PREFIX, EMP#, DEPT# и PAY. Поле PREFIX содержит необходимую
служебную информацию. Три поля данных соответствуют свойствам
СЛУЖАЩего. Поле EMP# связано с индексом ЕМРХ, обеспечивающим
быстрый поиск по значениям ЕМР#. Этот индекс определен на внутреннем
уровне, но не виден уже на концептуальном.
Трехуровневая архитектура
СБД
Ï î ëüçî âàòåëü À1
Áàçî âû é ÿçû ê
+
ï î äú ÿçû ê äàí í û õ
Ñõåì à
ÂÌ Ä À
Ï î ëüçî âàòåëü À2
Áàçî âû é ÿçû ê
+
ï î äú ÿçû ê äàí í û õ
Áàçî âû é ÿçû ê
+
ï î äú ÿçû ê äàí í û õ
Ñõåì à
ÂÌ Ä Á
Âí åø í åå
ï ðåäñòàâëåí èå
À
Î òî áðàæåí èå
"âí åø í èé À" - "êî í öåï òóàëüí û é"
Ñõåì à ÊÌ Ä
Ï î ëüçî âàòåëü Á1
Âí åø í åå
ï ðåäñòàâëåí èå
Á
Î òî áðàæåí èå
"âí åø í èé Á" - "êî í öåï òóàëüí û é"
Êî í öåï òóàëüí î å ï ðåäñòàâëåí èå
Î òî áðàæåí èå
"êî í öåï òóàëüí û é" - "âí óòðåí í èé"
Ñõåì à Âí Ì Ä
Âí óòðåí í åå ï ðåäñòàâëåí èå
ÑÓÁÄ
Трехуровневая архитектура
СБД



Внешнее представление состоит из множеств экземпляров некоторых типов
внешних записей. Эти внешние записи, как видно из примера, отнюдь не должны
совпадать с хранимыми. Подъязык данных пользователя определен в терминах
внешних записей. Значит, операции выборки/обновления будут определяться над
множеством внешних записей.
На концептуальном уровне данные представлены такими, какие они есть на
самом деле. Концептуальное представление состоит из множества экземпляров
каждого типа концептуальной записи. Она вовсе не обязана совпадать с внешней
или хранимой записью. Концептуальное представление задается концептуальной
схемой, которая включает определения типов концептуальных записей. Для
определения концептуальной схемы используется специальный ЯОД, не содержащий
средств определения структур хранения и методов доступа к данным.
Внутреннее представление состоит из множества экземпляров каждого типа
внутренней (хранимой) записи. Это представление, так же, как и внешнее и
концептуальное, не связано с физическим уровнем, т.е. с блоками, цилиндрами,
дорожками и т.д. Оно описывается внутренней схемой, которая определяет типы
хранимых записей, способы представления хранимых полей, физическую
последовательность хранения записей, существующие индексы и т.д. Внутренняя
схема описывается с помощью внутреннего ЯОД, отличающегося как от ЯОД
подъязыка данных внешнего представления, так и от концептуального ЯОД. Всё, что
ниже этого уровня, – уровень ОС.
Трехуровневая архитектура
СБД

Отображения
определяют
верхнего
соответствия
между
представлениями
и
нижнего
уровней.
Отображение концептуальный  внутренний ставит в
соответствие концептуальным полям и записям хранимые.
Это соответствие является взаимно однозначным. При
изменении структур хранения отображение концептуальный
 внутренний изменяется так, чтобы концептуальная схема
осталась неизменной. Аналогично отображение внешний 
концептуальный ставит в соответствие концептуальным
полям и записям внешние. Отображения реализуются
посредством статей словаря данных системы и специальных
модулей СУБД, обеспечивающих преобразования данных.
Трехуровневая архитектура
СБД

Доступ к данным в трехуровневой архитектуре
ПП
РО
8
1
Схема
КМД
Схема
ВнМД
3
Буферы
СУБД
6
4
5
ФБД
ВМД
2
СУБД
7
Схема
ОС
Трехуровневая архитектура
СБД








Шаг 1. ПП обращается к СУБД с запросом на чтение записи внешней модели.
Шаг 2. СУБД, используя схемы ВМД и КМД и описание отображения внешний 
концептуальный, определяет, какие записи КМД необходимы для формирования
требуемой записи ВМД.
Шаг 3. СУБД, используя схемы КМД и ВНМД и описание отображения
концептуальный  внутренний, определяет, какие записи внутренней модели
необходимы для формирования затребованных записей КМД и совокупность
физических записей, которые должны быть для этого считаны с физического
носителя.
Шаг 4. СУБД выдает ОС запрос на считывание в свои буферы необходимых записей
физической базы данных (ФБД).
Шаг 5. ОС считывает затребованные записи и помещает их в системные буферы
СУБД.
Шаг 6. На основании имеющихся схем моделей и описаний отображений СУБД
формирует в своем буфере затребованную внешнюю запись.
Шаг 7. СУБД пересылает сформированную внешнюю запись в рабочую область (РО)
ПП.
Шаг 8. СУБД передает в ПП сообщение о результатах выполнения запроса.
Процедура записи данных из ПП в ФБД выполняется аналогично
Нормализация
Функциональные
зависимости


Пусть задана переменная отношения r, и X и Y
являются произвольными подмножествами заголовка
r («составными» атрибутами).
В значении переменной отношения r атрибут Y
функционально зависит от атрибута X в том и
только в том случае, если каждому значению X
соответствует в точности одно значение Y. В этом
случае говорят также, что атрибут X
функционально определяет атрибут Y (X
является детерминантом (определителем) для Y, а
Y является зависимым от X). Будем обозначать это
как r.X-> r.Y.
Функциональные
зависимости
Функциональная зависимость соответствует
математическому понятию функции и является
отношением типа «многие-к-одному» между двумя
множествами атрибутов определенного отношения.
Для данного отношения R зависимость A—>B
выполняется для отношения R тогда и только тогда,
когда любые два кортежа отношения R с
одинаковыми значениями A имеют одинаковые
значения B.
Функциональные
зависимости

Очевидно, что если СЛУ_НОМ является первичным ключом отношения
СЛУЖАЩИЕ, то для этого отношения справедлива функциональная
зависимость (Functional Dependency – FD) СЛУ_НОМ-> СЛУ_ИМЯ.
Функциональные
зависимости
СЛУ_НОМ-> СЛУ_ИМЯ
СЛУ_НОМ-> СЛУ_ЗАРП
СЛУ_НОМ-> ПРО_НОМ
СЛУ_НОМ-> ПРОЕКТ_РУК
{СЛУ_НОМ, СЛУ_ИМЯ}-> СЛУ_ЗАРП
{СЛУ_НОМ, СЛУ_ИМЯ}-> ПРО_НОМ
{СЛУ_НОМ, СЛУ_ИМЯ}-> {СЛУ_ЗАРП,
ПРО_НОМ} … ПРО_НОМ-> ПРОЕКТ_РУК и т.д.
Функциональные
зависимости
Поскольку имена всех служащих различны, то
выполняются и такие FD (2):
 СЛУ_ИМЯ-> СЛУ_НОМ
 СЛУ_ИМЯ-> СЛУ_ЗАРП


СЛУ_ИМЯ-> ПРО_НОМ и т.д.
FD (3):

СЛУ_ЗАРП-> ПРО_НОМ
Функциональные
зависимости
Однако заметим, что природа FD группы (1)
отличается от природы FD групп (2) и (3).
Логично
предположить,
что
идентификационные
номера
служащих
должны быть всегда различны, а у каждого
проекта имеется только один руководитель.
Поэтому FD группы (1) должны быть верны
для
любого
допустимого
значения
переменной отношения СЛУЖАЩИЕ_ПРОЕКТЫ
и могут рассматриваться как инварианты,
или
ограничения
целостности
этой
переменной отношения.
Функциональные
зависимости
FD
группы (2) базируются на менее
естественном предположении о том, что
имена
всех
служащих
различны.
Это
соответствует действительности для примера,
но возможно, что с течением времени FD
группы (2) не будут выполняться для какоголибо
значения
переменной
отношения
СЛУЖАЩИЕ_ПРОЕКТЫ.
Функциональные
зависимости
Наконец, FD группы (3) основана на совсем
неестественном предположении, что никакие двое
служащих, участвующие в разных проектах, не
получают одинаковую зарплату. Опять же, данное
предположение верно для примера, но, скорее всего,
это случайное совпадение.
В дальнейшем нас будут интересовать только те
функциональные зависимости, которые должны
выполняться
для
всех
возможных
значений
переменных отношений
Функциональные
зависимости
Заметим, что если атрибут A отношения r является
возможным ключом, то для любого атрибута B этого
отношения всегда выполняется FD A B (в группе (1) к
этим FD относятся все FD, детерминантом которых
является СЛУ_НОМ). Обратите внимание, что
наличие в отношении СЛУЖАЩИЕ_ПРОЕКТЫ FD
ПРО_НОМ ПРОЕКТ_РУК приводит к некоторой
избыточности этого отношения. Имя руководителя
проекта является характеристикой проекта, а не
служащего, но в нашем случае содержится в теле
отношения столько раз, сколько служащих работает
над проектом.
Функциональные
зависимости



FD A-> B называется тривиальной, если A B (т. е.
множество атрибутов A включает множество B или
совпадает с множеством B).
Очевидно, что любая тривиальная FD всегда
выполняется.
Например,
в
отношении
СЛУЖАЩИЕ_ПРОЕКТЫ
всегда
выполняется
FD
{СЛУ_ЗАРП, ПРО_НОМ}-> СЛУ_ЗАРП. Частным
случаем тривиальной FD является A-> A.
Поскольку тривиальные FD выполняются всегда, их
нельзя трактовать как ограничения целостности, и
поэтому
они
не
представляют
интереса
с
практической точки зрения. Однако в теоретических
рассуждениях их наличие необходимо учитывать.
Функциональные
зависимости
FD A C называется транзитивной, если
существует такой атрибут B, что имеются
функциональные зависимости A-> B и B-> C и
отсутствует функциональная зависимость C->
A.
Замыкание
Множество всех ФЗ, которые задаются
данным
множеством
функциональных
зависимостей S, называется замыканием S и
обозначается символом S+.
Аксиома Армстронга



Правило
вывода
Армстронга:
пусть
в
перечисленных ниже правилах A, B и C —
произвольные подмножества множества атрибутов
заданного отношения R, а символическая запись AB
означает объединение A и B.
1. Рефлективность: если B является подмножеством
A, то A—>B.
2. Дополнение: если A—>B, то AС—>BС.
3. Транзитивность: если A—>B и B—>C, то A—>C.
Каждое
из
этих
правил
может
быть
непосредственно доказано на основе определения
функциональной зависимости.
Дополнительные правила
определения замыкания
На практике, на основе приведенных
правил выводят дополнительные правила:
 1. Самоопределение: A—>A.
 2. Декомпозиция: если A—>BC, то A—>B и A—
>C.
3. Объединение: если A—>B и A—>C,
то A—>BC.
 4. Композиция: если A—>B и C—>D, то AC—
>BD, где D — другое произвольное
подмножество множества атрибутов R.

Нормализация
к
проектированию реляционных баз данных на
основе нормализации, т. е. декомпозиции
(разбиения путем проецирования) отношения,
находящегося в предыдущей нормальной форме, на два или
более
отношений,
удовлетворяющих
требованиям следующей нормальной формы.
 Считаются правильными такие декомпозиции
отношения, которые обратимы, т. е. имеется
возможность собрать исходное отношение из
декомпозированных отношений без потери
информации.
Такие
декомпозиции
называются декомпозициями без потерь.

Мы
будем
обсуждать
подход
Теорема Хита
Декомпозиция без потерь
Анализ
показывает,
что
в
случае
декомпозиции
(1)
мы
не
потеряли
информацию о служащих – про каждого из
них можно узнать имя, размер зарплаты,
номер
выполняемого
проекта
и
имя
руководителя проекта. Вторая декомпозиция
не дает возможности получить данные о
проекте служащего, поскольку Иванов и
Иваненко получают одинаковую зарплату,
следовательно, эта декомпозиция приводит к
потере информации. Что же привело к тому,
что
одна
декомпозиция
является
декомпозицией без потерь, а вторая – нет?
Декомпозиция без потерь
Заметим, что при проведении декомпозиции мы использовали
операцию взятия проекции. Каждое из отношений СЛУЖ, СЛУ_ПРО и
ЗАРП_ПРО
является
проекцией
исходного
отношения
СЛУЖАЩИЕ_ПРОЕКТЫ. В случае декомпозиции (1) отсутствие потери
информации означает, что в результате естественного соединения
отношений СЛУЖ и СЛУ_ПРО мы гарантированно получим отношение,
заголовок и тело которого совпадают с заголовком и телом отношения
СЛУЖАЩИЕ_ПРОЕКТЫ. Следует отметить, что это произойдет для
любых допустимых (и согласованных) значений переменных отношений
СЛУЖАЩИЕ_ПРОЕКТЫ, СЛУЖ и СЛУ_ПРО, поскольку у всех этих
переменных атрибут СЛУ_НОМ является возможным ключом. Однако
если выполнить естественное соединение отношений СЛУ и ЗАРП_ПРО,
то будет получено отношение
Декомпозиция без потерь
Результат естественного соединения отношений СЛУЖ и ЗАРП_ПРО
Декомпозиция без потерь

Схема
этого
отношения,
естественно
(поскольку соединение – естественное),
совпадает
со
схемой
отношения
СЛУЖАЩИЕ_ПРОЕКТЫ, но в теле появились
лишние кортежи, наличие которых и приводит
к утрате исходной информации. Интуитивно
понятно, что это происходит потому, что в
отношении
ЗАРП_ПРО
отсутствуют
функциональные
зависимости
СЛУ_ЗАРП
ПРО_НОМ и СЛУ_ЗАРП ПРОЕКТ_РУК, но
точнее причину потери информации в данном
случае мы объясним несколько позже.
Теорема Хита
Пусть задано отношение r {A, B, C}
(A, B и C, в общем случае, являются
составными атрибутами) и
выполняется FD A-> B.
 Тогда r = (r PROJECT {A, B}) NATURAL
JOIN (r PROJECT {A, C}).

Декомпозиция без потерь по теореме Хита
Декомпозиция без потерь по теореме Хита
В отношении СЛУЖАЩИЕ_ОТДЕЛЫ_ПРОЕКТЫ
атрибут СЛУ_НОМ не является возможным
ключом, но, как показано на предыдущем
слайде, наличия FD СЛУ_НОМ-> СЛУ_ОТД
оказывается достаточно для декомпозиции
этого отношения без потерь.
Первые шаги нормализации


При проектировании базы данных решаются две
основные проблемы.
Каким образом отобразить объекты предметной
области в абстрактные объекты модели данных,
чтобы это отображение не противоречило семантике
предметной области и было, по возможности, лучшим
(эффективным, удобным и т. д.)? Часто эту проблему
называют проблемой логического проектирования
баз данных.
Как обеспечить эффективность выполнения запросов
к базе данных, т. е. каким образом, имея в виду
особенности конкретной СУБД, расположить данные
во внешней памяти, создания каких дополнительных
структур (например, индексов) потребовать и т. д.?
Эту проблему обычно называют проблемой
физического проектирования баз данных.
Первые шаги нормализации
В этой и следующей лекциях мы будем считать, что
проблема проектирования реляционной базы данных состоит
в обоснованном принятии решений о том, из каких
отношений должна состоять БД и какие атрибуты должны
быть у этих отношений.
В этой и следующей лекциях будет рассмотрен
классический
подход,
при
котором
весь
процесс
проектирования базы данных осуществляется в терминах
реляционной модели данных методом последовательных
приближений
к
удовлетворительному
набору
схем
отношений. Исходной точкой является представление
предметной области в виде одного или нескольких
отношений, и на каждом шаге проектирования производится
некоторый
набор
схем
отношений,
обладающих
«улучшенными» свойствами.
Процесс проектирования
представляет собой процесс нормализации схем отношений,
причем каждая следующая нормальная форма обладает
свойствами, в некотором смысле, лучшими, чем предыдущая.
Первые шаги нормализации
Каждой
нормальной
форме
соответствует
определенный набор ограничений, и отношение
находится в некоторой нормальной форме, если
удовлетворяет
свойственному
ей
набору
ограничений. Примером может служить ограничение
первой нормальной формы – значения всех
атрибутов
отношения
атомарны.
Поскольку
требование первой нормальной формы является
базовым требованием классической реляционной
модели данных, мы будем считать, что исходный
набор
отношений
уже
соответствует
этому
требованию.
Нормальные формы
В теории реляционных баз данных обычно
выделяется следующая последовательность
нормальных форм:
 первая нормальная форма (1NF);
 вторая нормальная форма (2NF);
 третья нормальная форма (3NF);
 нормальная форма Бойса-Кодда (BCNF);
 четвертая нормальная форма (4NF);
 пятая нормальная форма, или нормальная
форма проекции-соединения (5NF или PJ/NF).
Вложенность
нормальных форм
Нормальные формы


Основные свойства нормальных форм состоят в следующем:
каждая следующая нормальная форма в некотором смысле лучше
предыдущей нормальной формы;
при переходе к следующей нормальной форме свойства предыдущих
нормальных форм сохраняются.
В основе процесса проектирования лежит метод нормализации, т.
е. декомпозиции отношения, находящегося в предыдущей нормальной
форме, на два или более отношений, которые удовлетворяют
требованиям следующей нормальной формы.
Первая нормальная форма
Теорема : отношение находится в первой
нормальной форме (1NF), тогда и только
тогда, когда все значения атрибутов
атомарны, и все неключевые атрибуты
функционально зависят от ключа.
Первая нормальная форма
Следствие из теоремы 1: любое
нормализованное отношение находится
 в первой нормальной форме. Если отношение
находится только в 1НФ и не
 находится в более высокой нормальной
форме, то ему свойственны все
 аномалии обработки информации,
рассмотренные ранее.
Вторая нормальная форма
Пусть
имеется
переменная
отношения
СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
{СЛУ_НОМ, СЛУ_УРОВ,
СЛУ_ЗАРП, ПРО_НОМ, СЛУ_ЗАДАН}. Новые атрибуты
СЛУ_УРОВ и СЛУ_ЗАДАН содержат, соответственно, данные о
разряде служащего и о задании, которое выполняет
служащий в данном проекте. Будем считать, что разряд
служащего определяет размер его заработной платы и что
каждый служащий может участвовать в нескольких проектах,
но в каждом проекте он выполняет только одно задание.
Тогда очевидно, что единственно возможным ключом
отношения
СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
является
составной атрибут {СЛУ_НОМ, ПРО_НОМ}.
Вторая нормальная форма
Возможное значение переменной отношения СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
Вторая нормальная форма
Диаграмма множества FD отношения СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
Аномалии обновления
Во
множество
FD
отношения
СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ входит много FD, в которых
детерминантом является не возможный ключ отношения
(соответствующие стрелки в диаграмме начинаются не с
{СЛУ_НОМ, ПРО_НОМ}, т. е. некоторые функциональные
зависимости атрибутов от возможного ключа не являются
минимальными). Это приводит к так называемым аномалиям
обновления. Под аномалиями обновления понимаются
трудности, с которыми приходится сталкиваться при
выполнении операций добавления кортежей в отношение
(INSERT), удаления кортежей (DELETE) и модификации
кортежей (UPDATE).
Аномалии обновления
Обсудим сначала аномалии обновления,
вызываемые
наличием
FD
СЛУ_НОМ->
СЛУ_УРОВ
(эти
аномалии
связаны
с
избыточностью хранения значений атрибутов
СЛУ_УРОВ и СЛУ_ЗАРП в каждом кортеже,
описывающем
задание
служащего
в
некотором проекте).
Аномалии обновления



Добавление кортежей. Мы не можем дополнить отношение
СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ данными о служащем, который в
данное время еще не участвует ни в одном проекте (ПРО_НОМ
является частью первичного ключа и не может содержать
неопределенных значений). Между тем часто бывает, что сначала
служащего принимают на работу, устанавливают его разряд и размер
зарплаты, а лишь потом назначают для него проект.
Удаление кортежей. Мы не можем сохранить в отношении
СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ данные о служащем, завершившем
участие в своем последнем проекте (по той причине, что значение
атрибута ПРО_НОМ для этого служащего становится неопределенным).
Между тем характерна ситуация, когда между проектами возникают
перерывы, не приводящие к увольнению служащих.
Модификация кортежей. Чтобы изменить разряд служащего, мы
будем вынуждены модифицировать все кортежи с соответствующим
значением атрибута СЛУ_НОМ. В противном случае будет нарушена
естественная FD СЛУ_НОМ СЛУ_УРОВ (у одного служащего имеется
только один разряд).
Аномалии обновления
Для преодоления этих трудностей
можно произвести декомпозицию
переменной отношения
СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ на две
переменных отношений – СЛУЖ
{СЛУ_НОМ, СЛУ_УРОВ, СЛУ_ЗАРП} и
СЛУЖ_ПРО_ЗАДАН {СЛУ_НОМ,
ПРО_НОМ, СЛУ_ЗАДАН}. На основании
теоремы Хита эта декомпозиция является
декомпозицией без потерь, поскольку в
исходном отношении имелась FD
{СЛУ_НОМ, ПРО_НОМ}-> СЛУ_ЗАДАН.
Аномалии обновления
Значения переменных отношений
Аномалии обновления



Теперь мы можем легко справиться с операциями обновления.
Добавление кортежей. Чтобы сохранить данные о принятом на
работу служащем, который еще не участвует ни в каком проекте,
достаточно добавить соответствующий кортеж в отношение СЛУЖ.
Удаление кортежей. Если кто-то из служащих прекращает работу
над проектом, достаточно удалить соответствующий кортеж из
отношения СЛУЖ_ПРО_ЗАДАН. При увольнении служащего нужно
удалить кортежи с соответствующим значением атрибута СЛУ_НОМ из
отношений СЛУЖ и СЛУЖ_ПРО_ЗАДАН.
Модификация кортежей. Если у служащего меняется разряд (и,
следовательно, размер зарплаты), достаточно модифицировать один
кортеж в отношении СЛУЖ.
Функциональные
зависимости
Диаграмма множества FD отношения СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
Диаграммы FD в переменных отношений СЛУЖ и СЛУЖ_ПРО_ЗАДАН
Вторая нормальная форма
(2NF)
Переменная
отношения
находится во
второй нормальной форме (2NF) тогда и
только тогда, когда она находится в первой
нормальной форме, и каждый неключевой
атрибут (неключевым атрибутом называется
атрибут, не входящий ни в один возможный
ключ) минимально функционально зависит от
первичного ключа.
Вторая нормальная форма
(2NF)
Переменные отношений СЛУЖ и СЛУЖ_ПРО_ЗАДАН находятся в
2NF (все неключевые атрибуты отношений минимально зависят от
первичных ключей
СЛУ_НОМ и {СЛУ_НОМ, ПРО_НОМ} соответственно).
отношение СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ
не находится в 2NF (например,
FD {СЛУ_НОМ, ПРО_НОМ}-> СЛУ_УРОВ
не является минимальной).
Вторая нормальная форма
(2NF)
Любая переменная отношения, находящаяся в 1NF, но не
находящаяся в 2NF, может быть приведена к набору переменных
отношений, находящихся в 2NF. В результате декомпозиции мы
получаем набор проекций исходной переменной отношения,
естественное соединение значений которых воспроизводит значение
исходной переменной отношения (т. е. это декомпозиция без потерь).
Для переменных отношений СЛУЖ и СЛУЖ_ПРО_ЗАДАН исходное
отношение СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ воспроизводится их
естественным соединением по общему атрибуту СЛУ_НОМ.
Третья нормальная форма
В
произведенной
декомпозиции
переменной
отношения
СЛУЖАЩИЕ_ПРОЕКТЫ_ЗАДАНИЯ множество
FD переменной отношения СЛУЖ_ПРО_ЗАДАН
предельно
просто
–
в
единственной
нетривиальной функциональной зависимости
детерминантом является возможный ключ.
При
использовании
этой
переменной
отношения какие-либо аномалии обновления
не возникают. Однако переменная отношения
СЛУЖ не является такой же совершенной.
Аномалии обновления
Функциональные зависимости
переменной отношения СЛУЖ порождают
аномалии обновления.
Они вызываются наличием
транзитивной FD СЛУ_НОМ-> СЛУ_ЗАРП
(через FD СЛУ_НОМ-> СЛУ_УРОВ и
СЛУ_УРОВ-> СЛУ_ЗАРП).
Эти аномалии связаны с
избыточностью хранения значения
атрибута СЛУ_ЗАРП в каждом кортеже,
характеризующем служащих с одним и
тем же разрядом.
Для преодоления этих трудностей произведем декомпозицию
переменной отношения СЛУЖ на две переменных отношений
СЛУЖ1 {СЛУ_НОМ, СЛУ_УРОВ} и
УРОВ {СЛУ_УРОВ, СЛУ_ЗАРП}.
По теореме Хита, это снова декомпозиция без потерь по причине
наличия, например, FD СЛУ_НОМ-> СЛУ_УРОВ.
Возможная декомпозиция
Диаграммы FD в отношениях СЛУЖ1 и УРОВ
Тела отношений СЛУЖ1 и УРОВ
Третья нормальная форма



Это преобразование обратимо, т. е. любое
допустимое значение исходной переменной
отношения СЛУЖ является естественным
соединением значений отношений СЛУЖ1 и УРОВ.
Также можно заметить, что мы избавились от
трудностей при выполнении операций обновления.
Добавление кортежей. Чтобы сохранить данные
о новом разряде, достаточно добавить
соответствующий кортеж к отношению УРОВ.
Удаление кортежей. При увольнении последнего
служащего, обладающего данным разрядом,
удаляется соответствующий кортеж из отношения
СЛУЖ1, и данные о разряде сохраняются в
отношении УРОВ.
Модификация кортежей. При изменении
размера зарплаты, соответствующей некоторому
Третья нормальная форма
Трудности, которые мы испытывали, были
связаны с наличием транзитивной FD
СЛУ_НОМ-> СЛУ_ЗАРП.
Наличие этой FD на самом деле означало,
что атрибут СЛУ_ЗАРП характеризовал не
сущность служащий, а сущность разряд.
Третья нормальная форма
Переменная отношения находится в
третьей нормальной форме (3NF) в том и
только в том случае, когда она находится во
второй нормальной форме, и каждый
неключевой атрибут нетранзитивно
функционально зависит от первичного ключа
Аномалии обновления



Добавление кортежей. Невозможно сохранить
данные о новом разряде (и соответствующем ему
размере зарплаты), пока не появится служащий с
новым разрядом. (Первичный ключ не может
содержать неопределенные значения.)
Удаление кортежей. При увольнении последнего
служащего с данным разрядом мы утратим
информацию о наличии такого разряда и
соответствующем размере зарплаты.
Модификация кортежей. При изменении
размера зарплаты, соответствующей некоторому
разряду, мы будем вынуждены изменить значение
атрибута СЛУ_ЗАРП в кортежах всех служащих,
которым назначен этот разряд (иначе не будет
выполняться FD СЛУ_УРОВ СЛУ_ЗАРП).
Третья нормальная форма
Отношения СЛУЖ1 и УРОВ оба находятся в 3NF
(все неключевые атрибуты нетранзитивно зависят от
первичных
ключей
СЛУ_НОМ
и
СЛУ_УРОВ).
Отношение СЛУЖ не находится в 3NF (FD СЛУ_НОМ
СЛУ_ЗАРП
является
транзитивной).
Любое
отношение, находящееся в 2NF, но не находящееся в
3NF, может быть приведено к набору отношений,
находящихся в 3NF. Мы получаем набор проекций
исходного отношения, естественное соединение
которых воспроизводит исходное отношение (т. е.
это декомпозиция без потерь). Для отношений
СЛУЖ1 и УРОВ исходное отношение СЛУЖ
воспроизводится их естественным соединением по
общему атрибуту СЛУ_УРОВ.
Независимые проекции
отношений. Теорема Риссанена
Обратите внимание, что для переменной отношения
СЛУЖ {СЛУ_НОМ, СЛУ_УРОВ, СЛУ_ЗАРП},
кроме декомпозиции на отношения
СЛУЖ1 {СЛУ_НОМ, СЛУ_УРОВ} и
УРОВ {СЛУ_УРОВ, СЛУ_ЗАРП},
возможна и декомпозиция на отношения
СЛУЖ1 {СЛУ_НОМ, СЛУ_УРОВ} и
СЛУЖ_ЗАРП {СЛУ_НОМ, СЛУ_ЗАРП}.
Оба отношения, полученные путем второй декомпозиции,
находятся в 3NF, и эта декомпозиция также является декомпозицией
без потерь. Тем не менее вторая декомпозиция, в отличие от первой,
не устраняет проблемы, связанные с обновлением отношения СЛУЖ.
Например, по-прежнему невозможно сохранить данные о разряде,
которым не обладает ни один служащий. Посмотрим, с чем это связано.
Условия независимости
проекций отношения
Отношения СЛУЖ1 и УРОВ могут обновляться независимо
(являются независимыми проекциями), и при этом результат их
естественного соединения всегда будет таким, как если бы
обновлялось исходное отношение СЛУЖ.
Это
происходит
потому,
что
FD
отношения
СЛУЖ
трансформировались в индивидуальные ограничения первичного
ключа отношений СЛУЖ1 и УРОВ.
При
второй
декомпозиции
FD
СЛУ_УРОВ->СЛУ_ЗАРП
трансформируется в ограничение целостности сразу для двух
отношений (такого рода ограничения целостности называются
ограничениями базы данных, и их поддержка гораздо более накладна с
технической точки зрения).
Понятно, что в процессе нормализации декомпозиция отношения
на независимые проекции является предпочтительной. Необходимые и
достаточные
условия
независимости
проекций
отношения
обеспечивает теорема Риссанена.
Теорема Риссанена
Проекции r1 и r2 отношения r являются
независимыми тогда и только тогда, когда:
 каждая FD в отношении r логически следуетиз
FD в r1 и r2;
 общие атрибуты r1 и r2 образуют возможный
ключ хотя бы для одного из этих отношений.
Теорема Риссанена
Мы не будем приводить доказательство этой теоремы,
но продемонстрируем ее верность на примере двух
показанных выше декомпозиций отношения СЛУЖ. В
первой декомпозиции (на проекции СЛУЖ1 и УРОВ) общий
атрибут СЛУ_УРОВ является возможным (и первичным)
ключом отношения УРОВ, а единственная дополнительная
FD отношения СЛУЖ (СЛУ_НОМ-> СЛУ_ЗАРП) логически
следует из
FD СЛУ_НОМ-> СЛУ_УРОВ и СЛУ_УРОВ->СЛУ_ЗАРП,
выполняемых для отношений СЛУЖ1 и УРОВ
соответственно.
Вторая декомпозиция удовлетворяет второму условию
теоремы Риссанена (СЛУ_НОМ является первичным
ключом в каждом из отношений СЛУЖ1 и СЛУ_ЗАРП), но
FD
СЛУ_УРОВ-> СЛУ_ЗАРП не выводится из FD СЛУ_НОМ->
СЛУ_УРОВ и СЛУ_НОМ-> СЛУ_ЗАРП.
Нормальная форма БойсаКодда
До сих пор в определениях нормальных форм мы предполагали,
что у декомпозируемого отношения имеется только один возможный
ключ. На практике чаще всего бывает именно так. Но имеется один
частный случай, который (почти) удовлетворяет требованиям 2NF и
3NF, но, тем не менее, порождает аномалии обновления. Это тот
случай, когда у отношения имеется несколько возможных ключей, и
некоторые из этих возможных ключей «перекрываются», т. е. содержат
общие атрибуты.
Нормальная форма БойсаКодда
Диаграмма FD отношения СЛУЖ_ПРО_ЗАДАН1
Возможное значение переменной отношения СЛУЖ_ПРО_ЗАДАН1
Нормальная форма БойсаКодда
В отношении СЛУЖ_ПРО_ЗАДАН1 служащие уникально
идентифицируются как по номерам удостоверений, так и по именам.
Следовательно, существуют FD
СЛУ_НОМ-> СЛУ_ИМЯ и СЛУ_ИМЯ->СЛУ_НОМ.
Но один служащий может участвовать в нескольких проектах,
поэтому возможными ключами являются
{СЛУ_НОМ, ПРО_НОМ} и {СЛУ_ИМЯ, ПРО_НОМ}.
Нормальная форма БойсаКодда
Очевидно,
что,
хотя
в
отношении
СЛУЖ_ПРО_ЗАДАН1 все FD неключевых
атрибутов от возможных ключей являются
минимальными
и
транзитивные
FD
отсутствуют, этому отношению свойственны
аномалии обновления. Например, в случае
изменения имени служащего требуется
обновить атрибут СЛУ_ИМЯ во всех кортежах
отношения
СЛУЖ_ПРО_ЗАДАН1,
соответствующих данному служащему. Иначе
будет нарушена FD СЛУ_НОМ->СЛУ_ИМЯ, и
база данных окажется в несогласованном
состоянии.
Нормальная форма БойсаКодда
Причиной отмеченных аномалий является то, что в
требованиях 2NF и 3NF не требовалась минимальная
функциональная зависимость от первичного ключа
атрибутов, являющихся компонентами других возможных
ключей.
Проблему решает нормальная форма, которую
исторически принято называть нормальной формой БойсаКодда и которая является уточнением 3NF в случае
наличия нескольких перекрывающихся возможных ключей.
находится в нормальной
форме Бойса-Кодда (BCNF) в том и только в том
случае, когда любая выполняемая для этой переменной
отношения нетривиальная и минимальная FD имеет в
качестве детерминанта некоторый возможный ключ
данного отношения.
Переменная
отношения
Нормальная форма БойсаКодда
Переменная
отношения
СЛУЖ_ПРО_ЗАДАН1 может быть приведена к
BCNF путем одной из двух декомпозиций:
СЛУЖ_НОМ_ИМЯ {СЛУ_НОМ, СЛУ_ИМЯ} и
СЛУЖ_НОМ_ПРО_ЗАДАН
{СЛУ_НОМ,
ПРО_НОМ, СЛУ_ЗАДАН} с множеством FD и
значениями,
показанными
на,
и
СЛУЖ_НОМ_ИМЯ {СЛУ_НОМ, СЛУ_ИМЯ} и
СЛУЖ_ИМЯ_ПРО_ЗАДАН
{СЛУ_ИМЯ,
ПРО_НОМ, СЛУ_ЗАДАН} (FD и значения
результирующих
переменных
отношений
выглядят аналогично).
Очевидно, что каждая из декомпозиций
устраняет
трудности,
связанные
с
Нормальная форма БойсаКодда
Нормальные формы
В этой лекции мы обсудили три начальные
нормальные формы отношений – вторую и
третью нормальные формы и нормальную
форму Бойса-Кодда, – которые производятся
путем декомпозиции без потерь исходного
отношения на две проекции, где отсутствуют
аномалии изменений, существовавшие в
исходном отношении по причине наличия
функциональных
зависимостей
с
нежелательными свойствами.
Нормальные формы
Нормализация схемы базы данных способствует
более
эффективному
выполнению
системой
управления базами данных операций обновления
базы данных, поскольку сокращается число
проверок
и
вспомогательных
действий,
поддерживающих целостность базы данных. При
проектировании реляционной базы данных почти
всегда добиваются второй нормальной формы всех
входящих в базу данных отношений. В часто
обновляемых базах данных обычно стараются
обеспечить третью нормальную форму отношений.
На нормальную форму Бойса-Кодда внимание
обращают гораздо реже, поскольку на практике
ситуации, в которых у отношения имеется
несколько составных перекрывающихся возможных
ключей, встречаются нечасто
PERL
История PERL
Первая версия программы PERL была написана Лэрри Уоллом в 1986
году, когда он являлся системным администратором одного проекта UNIX,
связанного с созданием многоуровневой безопасной сети, объединявшей
несколько компьютеров, разнесенных на большие расстояния. Работа была
выполнена, но потребовалось создание отчетов на основе большого числа
файлов с многочисленными перекрестными ссылками между ними.
Первоначально Ларри предполагал использовать для этих целей фильтр awk,
но оказалось, что последний не мог управлять открытием и закрытием
большого числа файлов на основе содержащейся в них же самих информации о
расположении файлов.
Первая версия языка не содержала многих возможностей, которые можно
найти в последней версии Perl. В дальнейшем сам Ларри Уолл позаимствовал у
Генри Спенсера (Henry Spencer) пакет для работы с регулярными
выражениями и модифицировал его для языка Perl. Другие функциональные
возможности были разработаны не только Ларри Уоллом, но и его друзьями и
коллегами, и включены в состав языка.
PERL


Perl — это интерпретируемый язык, оптимизированный для просмотра
содержимого текстовых файлов, выделения из них информации и
генерирования отчетов на основе этой информации. Он обладает большим
набором преимуществ как язык сценариев общего назначения, которые
проявляются через его характерные черты и возможности.
Первым в цепочке достоинств языка Perl мы назовем его
интерпретируемость. Разработка решений с помощью компилируемых
языков программирования потребовала бы на много больше времени, чем
использование одного интерпретируемого: ведь цикл разработки
программ на таком языке короче и проще, чем на компилируемом. Мы
постепенно создаем программу, добавляя необходимые операторы, и
сразу же получаем результаты, когда она завершена: интерпретатор perl
постепенно компилирует все операторы во внутренний байт-код и
программа готова к выполнению, как только в ней поставлена последняя
точка (точнее точка с запятой, завершающая последний оператор). Для
небольших по объему программ — это достаточное преимущество, так как
отладка занимает много времени.
PERL




Практическая направленность, т. е. он создавался из практических
соображений решения задач администрирования и разработки
приложений для UNIX, а это означает, что он обладает следующими
важными свойствами:
полнотой;
простотой использования;
эффективностью.
Под полнотой Perl понимается его способность решать все
возникающие в системе UNIX в связи с ее администрированием задачи.
PERL


Для работы с базами данных можно самому написать соответствующее
приложение
на
языке
С,
а
можно
воспользоваться
свободно
распространяемыми модулями дополнительных расширений возможностей
Perl, включающих работу с многочисленными популярными системами
управления базами данных.
Способность Perl работать с сокетами TCP/IP сделала его популярным для
реализации информационных систем взаимодействия с сетевыми серверами
любых типов, использующих сокеты в качестве механизма обмена
информацией. Именно эта возможность в сочетании с использованием Perl
для создания CGI-сценариев послужила широкому распространению языка на
других многочисленных платформах.
HTML

Простейший html-документ выглядит
следующим образом:
<html>
<head>
<title>Название</title>
</head>
<body> <p>Тело документа </body>
</html>
HTML
<html>
<head>
<title>Test Form</title>
</head>
<body>
<form action = "/cgi-bin/testform1.pl">
<b>Введите Ваше имя: </b>
<input name = "user_name" value="" size=20>
<br>
<b>Введите Ваш возраст: </b>
<input name = "user_age" value="" size=3>
<br>
<b>Введите занимаемую Вами должность: </b>
<input name = "user_position" value="" size=20>
<br>
<input type = "submit" value="Зарегистрировать">
</form>
</body>
</html>
Pl скрипт
#!/usr/local/perl/bin/perl
# Чтение и преобразование данных с формы
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$input{$name} = $value;
}
# Сохранение в файл
#$targetfile = "names.html"; # <-- ПРОВЕРЬТЕ ЭТО
$targetfile = "../names.html"; # <-- путь относительно скрипта ПРОВЕРЬТЕ ЭТО
#NAMEFILE это не имя файла а указатель на файл

open (NAMEFILE, ">>$targetfile");

print NAMEFILE "<h3>Имя: ",$input{'user_name'},"</h3>\n";

print NAMEFILE "<h3>Возраст: ",$input{'user_age'},"</h3>\n";

print NAMEFILE "<h3>Должность: ",$input{'user_position'},"</h3>\n";








print NAMEFILE "<p><hr><p>\n";
close (NAMEFILE);
#Формирования сообщения для пользователя
print "Content-Type: text/html\n\n";
print "<h3>Спасибо, что заполнили форму</h3>\nНажмите ";
#В ссылке указать путь относительно директории cgi-bin
print '<a href="/names.html">сюда</a>'; # <-- ЗАМЕНИТЕ ЭТО
print ", чтобы увидеть Ваш ввод.\n";
Средства разработки серверных
приложений
В каждой форме должна присутствовать одна кнопка Submit, при
нажатии которой
формируется
http-запрос, включающий результаты
заполнения формы, и этот запрос направляется на вход приложения,
указанного в параметре action. Первым
механизмом, обеспечивающим
взаимодействие клиента с серверными приложениями, стал CGI (Common
Gateway Interface, общий шлюзовой интерфейс).
В ответ на действия пользователя, используя CGI, Web-сервер вызывает
внешнюю программу (CGI-приложение) и
передает ей информацию,
полученную
от
клиента
(например,
переданную
Webбраузером). Далее CGI-приложение обрабатывает полученную информацию,
и результаты ее работы передаются клиенту.
Средства разработки серверных
приложений
Пользователь заполняет экранную форму, описанную в html-файле с
помощью тега <form>, и нажимает на кнопку "Submit".
Возможен
также
запрос
при
непосредственном использовании адреса CGI-приложения - указывая его в
строке Location браузера:
http://localhost/cgi-bin/lab/test.cgi;
в тэге <img>;
с помощью средств включения сервера (SSI)
<!--#include virtual="/cgi-bin/ucheb/table.pl?tbname=mb"-->
и т. д.
Средства разработки серверных
приложений
На основе информации из формы б
раузер формирует HTTP-запрос и
отправляет его серверу. Информация
приводится к виду
param1=value1&param2=value2...&paramN
=valueN где parami - имя
соответствующего поля ввода, valuei введенное в него значение.
Средства разработки серверных
приложений
Символы, за исключением букв латинског
о алфавита, цифр, символа подчеркивания,
дефиса и точки при этом передаются в
закодированном виде %XX, где XX -шестнадцатеричное представление данного
символа. Символ пробела может быть
заменен символом "+".
Если указано, что при передаче должен
использоваться метод GET, эта строка пере
дается непосредственно в URL:
http://www.somehost.com/cgibin/script.cgi?param1=value1&param2=value2
Средства разработки серверных
приложений
При использовании метода POST через заголовок передается
информация
о
типе
содержимого
запроса
(для
форм это, как правило, application/x-www-form-urlencoded), а также
длина строки.
Сама строка в этом случае передается непосредственно в теле
запроса.
В заголовках запроса также передается значительное количест
во вспомогательной информации: тип браузера, адрес страницы, с
которой
был произведен запрос, и т. д. Вся эта информация
передается в HTTP-заголовках, имеющих вид
"Имя: значение". Отделяются друг от друга заголовки с помощью
символа новой строки, завершается их список еще одним символов
новой строки.
Средства разработки серверных
приложений
CGI
GET
POST
QUERY_STRING
STDIN
Средства разработки серверных
приложений
Одновременно передается и служебная информация:
REQUEST_METHOD=GET
QUERY_STRING=
CONTENT_LENGTH=
CONTENT_TYPE=
GATEWAY_INTERFACE=CGI/1.1
REMOTE_ADDR=127.0.0.1
REMOTE_HOST=
SCRIPT_NAME=/cgi-bin/var.cgi
SCRIPT_FILENAME=d:/usr/cgi-bin/var.cgi
SERVER_NAME=localhost
SERVER_PORT=80
SERVER_PROTOCOL=HTTP/1.1
SERVER_SOFTWARE=Apache/1.3.9 (Win32)
HTTP_ACCEPT=image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-excel, application/x-shockwave-flash,
application/vnd.ms-powerpoint, application/msword, */*
HTTP_USER_AGENT=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT
5.0)
HTTP_HOST=localhost
Средства разработки серверных
приложений
Обработав информацию, программа,
как
правило, либо
переадресует
браузер
на
некоторый
существующий документ с помощью http-заголовка Location, либо
формирует
виртуальный
документ,
посылая
информацию
на
стандартный
вывод
(stdout).
Телу
документа
предшествуют
HTTPзаголовки, описывающие тип возвращаемых данных, управляющие
кэшированием, работой с cookies и т. д.
Все это передается серверу. Сервер пересылает ответ CGIприложения
браузеру,
дополняя
их
при
необходимости кодом возврата и вспомогательными заголовками.
При этом используется один из двух способов -- перенаправление
броузера
на
новый адрес с
помощью
http-заголовка
Location, либо формирование виртуального документа. В последнем
случае
значение,
переданное
в
заголовке
Content-type,
используется броузером для интерпретации идущей следом инфор
мации -- например, text/html для виртуальных html-документов.
Средства разработки серверных
приложений
Браузер, основываясь на заголовках HTTP, интерпретирует ответ
CGI-приложения и выводит его для просмотра пользователем.
Реализовать CGI-приложение можно на любом языке, способном
генерировать код для серверной платформы или для которого
доступен
интерпретатор. Так, простейшее
CGI-приложение
может быть реализовано на языке пакетных файлов DOS, на Delphi,
С/С++, Tcl, Visual Basic, AppleScript, FoxPro, Perl и т. д.
Основные недостатки классического CGI -- каждое взаимодействие
клиента с сервером, во-первых,
является
независимым
от предыдущих и последующих взаимодействий,
во-вторых, приводит к запуску на сервере отдельного процесса.
Первый недостаток является тяжелым наследием HTTP-протокола, не
имеющего гарантированно работающих средств идентификации
клиентов, и все существующие решения способны лишь слегка
сгладить этот недостаток. Борьба со вторым недостатком идет
гораздо успешнее, и вполне приемлемые решения существуют для
обеих наиболее распространенных серверных платформ.
Средства разработки серверных
приложений
Для серверов, основанных на Unixплатформах, одним из самых популярных
решений является использование mod_perl
модуля, интегрирующего
в web-сервер
Apache
интерпретатор языка
Perl.
Это
позволяет
резко
уменьшить
нагрузку
на
сервер при запуске CGI-приложений,
написанных на Perl.
mod_perl позволяет разработчику писать на
Perl полноценные подключаемые модули
Apache.
Введение в PERL
PERL (Practical Extraction and Report
Language
—
практический
язык
извлечений и отчетов), применяемом для
обработки потоков информации.
 Изначально предполагалось, что он будет
использоваться в ОС Unix, но в
дальнейшем Perl стали переносить на
другие
платформы,
и
сейчас
он
существует в самых разных версиях —
для Unix, Windows, MS-DOS, OS/2, MacOS,
Amiga, Atari ST, VMS, Plan 9 и др.

Введение в PERL
Язык используется в качестве средства выполнения программ со
стороны сервера.
Его синтаксис унаследован в первую очередь от С, в него
добавлены
расширенные средства для работы со строками, регулярными выра
жениями,
ассоциативными
массивами и т. д. Это интерпретируемый язык, изначально
созданный
для
Unixсистем,
сейчас
его
интерпретаторы
доступны
для
большинства популярных архитектур, что делает особенно легким
перенос приложений.
Было бы неверно говорить
о Perl,
как
исключительно о средстве разработки CGI. Встроенные в язык
возможности, великолепная переносимость, огромное количество
существующих бибилиотек, делают его исключительно удобным
средством
для
системного
администрирования,
сетевого
программирования, обработки текстов и т.п.
Введение в PERL
Программа
представляет собой файл,
содержащий набор Perl операторов
и начинающийся со строки
вида
#!/usr/local/perl/bin/Perl.exe
указывающей путь до интерпретатора Perl.
Переменные PERL
Переменные
Скалярные
$
Списковые (массивы)
@
Хэши
%
Операции
Операции
Описание
Пример
+-*/%
Арифметические
print
2*7+4/(8%3);
print int(127/15);
#целая часть
**
Возведение
степень
++ --
Инкрементдекремент
$i++;
& (И)
| (ИЛИ)
^ (ИСКЛ)
~ (ИНВЕРТ)
<< >> (СДВИГ)
Побитовые
$x=3; $y=4;
print $x|$y;
print $x&$y;
в print 2**16;
Операции
Операции
Описание
Пример
== !=(≠) < Числовые операции if($x==9){print
"Ok!";}
>
<=
>= сравнения
<=>
Eq(=); ne(≠); строковые операции if($game
eq
lt(<); gt(>); сравнения
'doom'){print "You are
doomer!\n";}
le(<=);
ge(=>);
cmp()
||
(OR); Логические
&&(AND);
!(NOT)
?:
Условный оператор
Этот оператор
работает так же
как и в С. Если
if(($x==9)||($game
eq
'doom')){print
"hello you!\n";}
$i = 1;
$i > 1 ? print
"больше" : print
"меньше";
Операции
Операции
Описание
Пример
,
Последователь
ное
вычисление
$x=10,$y=20;
.
Конкатенация
$x='http://'.'www.uic.nno
v.ru';
x
Повторение
$x='1234'x5;
#$x='1234123412341234
1234'
=~
Сопоставление
с образцом
if($url=~/http/){print
"HTTP";}
!~
То же но
отрицанием
= += -= *= Присваивание
/= %= **=
с if($url!~/http/){print "No
HTTP";}
$x+=$y;




Строки могут быть в двойных и одинарных кавычках, разница
между ними состоит в том ,что в одинарных не осуществляется
подстановка переменных, а в двойных осуществляется, Например:
$x='qwerty';print 'my var is $x'; #выведет my var is $x
print "my var is $x"; #выведет my var is qwerty
Списки: Спискочные переменные начинаются с символа '@'
конструируются следующим образом
@List1=(1,2,5,70);@List2=(12,23,@List1);
#12,23,1,2,5,70@Rgb=($r,$g,$b);
Массивы
Также можно список использовать как
lvalue:
 @List=(1,2,3..8,15);($x,$y,$z)=@Li
st;
#$x=1,$y=2,$z=3($x,$y,$z,@list2)
=@List;
#$x=1,$y=2,$z=3,@list2=(4,5,6,7,
8,15);($r,$g,$b)=@Rgb;

Можно обращаться к нескольким,выбраным
элементам массива(срезу массива):
 @list=(1..10);@list[2,3,5,9]=(100,200,300,
400);
#@list=(1,100,200,4,300,6,7,8,400,10)@li
st[1,10]=@list[10,1];#меняет местами
элементы
 Обратится к скалярному значению -элементу
массива можно $имя_массива[индекс],
сдесь обратите внимание на знак '$'- мы ведь
обращаемся к скаляру-элементу.

Хеш






Теперь немного о хешах: хеш это такой массив который состоит из пар
ключ-значение, весь хеш обозначается %хеш ,к отдельным элементам
доступ $хеш{скалярное выражение} конструируется хеш так:
$my_hash{1}="doom";$my_hash{'quake'}="www.idsoftware.co
m";$my_hash{1+2}=100;
Хеш может быть также сконструирован из массива с четным числом
элементов где пары превращаются в ключ-значение
%hash=(1,20,2,100);#аналогично $hash{1}=20;$hash{2}=100;
удаление из хеша -операция delete:
delete $hash{1}; есть функции выдающие ключи и значения
соответственно.
%hash=(1,20,2,100,3,'doom');@k=keys %hash;
#@k=(1,2,3);@v=values %hash;#@v=(20,100,'doom');
Основные части Perl скрипта

1.
2.
3.
4.
В общем случае любой Perl скрипт состоит из четырех ключевых
частей:
Настройка. Первая часть скрипта обязательно запускает
интерпретатор и устанавливает переменный, используемые в теле
скрипта. Для запуска интерпретатора необходимо знать правильный
путь к программе.
Чтение входных данных. Эта часть "считывает" и сохраняет в
переменных входные данные в удобной для обработки форме. Эта
часть обычно неизменна во всех скриптах.
Обработка входных данных. Эта часть соответствующим образом
обрабатывает введенные данные. Она может быть простой (около 5
строк) или очень сложной (более 1000 строк) в зависимости от
выполняемой задачи.
Вывод результатов. Пользователь обычно ожидает какого-либо
ответа на свои действия. Эта часть достаточно проста в реализации.
Работа с базами данных
Для
работы
с
базами
данных
в
Perl
используется
стандартный
интерфейс программирования
DBI,
обеспечивающий доступ к большинству существующих СУБД
с помощью подключаемых драйверов. Схемы подключения к разли
чным
СУБД
(точнее,
правила
формирования
имени
источника данных) могут незначительно различаться, мы рассмотрим
работу с использованием mySQL. В первую очередь необходимо
подключить модуль DBI:

use DBI;
Подключение





Далее подключаемся к базе данных:
my $dbh = DBI->connect('DBI:mysql:hostname:base:port', 'user,
'password, { RaiseError => 1, AutoCommit => 1});
Здесь $dbh -- дескриптор базы данных, используемый в дальнейшей
работе,
DBI:
mysql:hostname:base:port --
имя источника данных, включающее имя драйвера, имя хоста,
базы, к которой мы подключаемся, и номер порта, на который
настроен sql-сервер,
user/password -- имя и пароль пользователя, имеющего доступ к
базе, в последнем параметре передаются различные флаги. По
завершении работы желательно закрыть дескриптор:
$dbh->disconnect();
Выполнение запросов
Возможно использование двух способов работы с базой. В случае,
если нам нужно только передать информацию в базу, используется
1.метод do, параметром которого является строка SQL-запроса:
$dbh->do("insert into mytable values (1,1)"); Если же необходимо
получить информацию из базы, используется следующая процедура:
Получаем дескриптор команды с помощью метода prepare:
my $sth = $dbh->prepare ("select * from mytable where field1>1");
2.Выполняем команду: $sth->execute();
3.Использование переменных
$sth = $dbh->prepare ("select * from mytable where field1>?");
$sth->execute(1);
Получение данных







3.Получаем данные. Используется один из четырех методов:
fetchrow_array
fetchrow_hash
fetchrow_arrayref
fetchrow_hashref
Методы возвращают соответственно
массив,
хэш,
ссылку на массив,
ссылку на хэш,
в которых хранятся значения полей текущей записи.









print "<SELECT name=column>\n";
# заполняем список таблиц
$sth = $dbh->prepare("show tables");
$sth->execute;
while (@line = $sth->fetchrow_array()) {
print "
<OPTION>$line[0]</OPTION>\n";
}
print "</SELECT>
$sth->finish;
Функции DBI
$scalar = $sth>affected_rows;
Сколько записей вставлено или изменено.
$scalar = $sth>info;
Статистика о предыдущих запросах ALTER
TABLE или LOAD DATA FROM INFILE.
$arrref = $sth>is_blob;
Массив битов, специфицирующих является
ли данное поле BLOB.
$arrref = $sth>is_not_null;
Массив битов, специфицирующих является
ли данное поле NULL.
$arrref = $sth>is_pri_key;
Массив битов, специфицирующих является
ли данное поле первичным ключом.
$arrref = $sth>is_num;
Массив битов, специфицирующих является
ли данное поле числом.
Функции DBI
$scalar = $sth>insert_id;
Значение, присвоенное столбцу с помощью
AUTO_INCREMENT последним INSERT.
$arrref = $sth>length;
Массив длин всех полей в байтах.
$arrref = $sth>name;
Имена всех столбцов.
$scalar = $sth>numrows;
Количество возвращаемых записей.
$scalar = $sth>numfields;
Количество возвращаемых полей.
$arrref = $sth>table;
Имена каждого столбца в таблице.
$arrref = $sth>type;
Тип каждого столбца, определен в mysql.h.
Доступен с помощью &Mysql::CHAR_TYPE,
&Mysql::INT_TYPE, &Mysql::REAL_TYPE
Модуль 1: Хранилища данных.
Microsoft OLAP 2005
Хранилища данных. Анализ данных
Обзор

История вопроса





Проблема единого взгляда на хранение,
доступ, обработку и анализ данных
On-Line Analytical Processing (OLAP) –
оперативный анализ данных
Сходство и отличия OLTP и OLAP систем
Смена реляционной парадигмы на
иерархическую
Унифицированная модель данных.
Элементы,
атрибуты,
Хранилища
данных. Анализ иерархии.
данных
Обзор

Динамика модели данных
- время
- структуры данных





Навигационный подход
Индивидуальность наблюдателя
Многомерные агрегированные
данные
Аппаратные возможности
Хранилища характеристики
данных. Анализ данных
Стоимостные
(TOC)
Тема 1. Что такое OLAP?



1962 - первая работа - Кен Айверсон
(Ken Iverson)
«Язык программирования»
(A Programming Language, APL)
1970 - первый программный продукт для
многомерного анализа данных — Express
Статья Е.Ф.Кодда:
- 12 правил OLAP (1993)
- дополнительные правила OLAP (1995)
Хранилища данных. Анализ данных
[1] Codd, E. F., Codd,
S. B., Salley, C. T.: Providing OLAP (On-
OLAP


Первое четкое определение OLAP (On-line
Analytical Processing) предложено в 1993 году
Е.Ф.Коддом (E.F.Codd) в статье, опубликованной
при поддержке Arbor Software (теперь - Hyperion
Software).
Статья включала 12 правил, которые сейчас уже
стали широко известными и описаны на сайте
любого поставщика OLAP приложений. Позже, в
1995 году, к ним были добавлены еще шесть менее
известных правил, все они были разделены на
четыре группы и названы "характеристиками"
(features). Вот эти правила, дающие определение
Хранилища данных. Анализ данных
OLAP приложения
с комментариями Найджела
Основной способ логического представления данных –
МНОГОМЕРНЫЕ КУБЫ (OLAP – кубы)
OLAP и OLTP системы
OLTP –
оперативная транзакционная обработка данных
OLAP –
оперативная аналитическая обработка данных
Характеристики OLTP системы









Большой объем информации
Часто различные БД для разных подразделений
Нормализованная схема, отсутствие дублирования информации
Интенсивное изменение данных
Транзакционный режим работы
Транзакции затрагивают небольшой объем данных
Обработка текущих данных – мгновенный снимок
Много клиентов
Малое время отклика – несколько секунд
Характеристики OLAP системы





с



Большой объем информации
Синхронизированная информация из различных БД с использованием общих
классификаторов
Ненормализованная схема БД с дубликатами
Данные меняются редко, Изменение происходит через пакетную загрузку
Выполняются сложные нерегламентированные запросы над большим объемом данных
широким применением группировок и агрегатных функций.
Анализ временных зависимостей
Небольшое количество работающих пользователей – аналитики и менеджеры
Большее время отклика (но все равно приемлемое) – несколько минут
Реализация OLAP
Типы OLAP - серверов
MOLAP (Multidimensional OLAP) - и детальные данные, и агрегаты хранятся
в многомерной БД.
ROLAP (Relational OLAP) - детальные данные храняться в реляционной БД;
агрегаты хранятся в той же БД в специально
созданных служебных таблицах.
HOLAP (Hybrid OLAP) - детальные данные храняться в реляционной БД, а
агрегаты хранятся в многомерной БД.
Правила Кодда для реляционных БД
1. Правило информации.
2. Правило гарантированного доступа.
3. Правило поддержки недействительных значений.
4. Правило динамического каталога, основанного на реляционной модели.
5.Правило исчерпывающего подъязыка данных.
6. Правило обновления представлений.
7. Правило добавления, обновления и удаления.
8. Правило независимости физических данных.
9. Правило независимости логических данных.
10. Правило независимости условий целостности.
11. Правило независимости распространения.
12. Правило единственности.
Характеристики OLAP
Четыре группы характеристик OLAP по Кодду:
основные характеристики (многомерность модели
данных, интуитивные механизмы манипулирования
данными, доступность данных, пакетное извлечение
данных, архитектура «клиент–сервер», прозрачность,
многопользовательская работа);
специальные характеристики (обработка
ненормализованных данных, хранение результатов
отдельно от исходных данных, выделение отсутствующих
данных, обработка отсутствующих значений);
характеристики построения отчетов (гибкое построение
отчетов, стабильная производительность при построении
отчетов, автоматическое регулирование физического
Хранилища данных. Анализ данных
уровня);
Основные
характеристики


1. Многомерность модели данных. С этим
утверждением мало кто спорит, и оно считается
основной характеристикой OLAP. Частью этого
требования считается возможность построения
различных проекций и разрезов модели.
2. Интуитивные механизмы манипулирования
данными. Кодд считает, что манипулирование
данными должно производится с помощью
действий непосредственно в ячейке таблиц, без
применения меню или сложных. Можно
предположить, что это подразумевает
использование операций с мышью, но Кодд этого
Хранилища данных. Анализ данных
не утверждает.
Многие продукты не выполняют
Основные
характеристики


3. Доступность. OLAP это Посредник. Кодд особенно
подчеркивает, что ядро OLAP является программой
промежуточного
уровня
между
гетерогенными
источниками данных и пользовательским интерфейсом.
Большинство продуктов обеспечивают эти функции, но
удобство доступа к данным часто оказывается ниже чем
это хотелось бы другим поставщикам программ.
4. Пакетное извлечение данных. Это правило требует,
чтобы продукты предлагали как собственные базы для
хранения анализируемых данных, так и динамический
(live) доступ к внешним данным. Мы согласны с Коддом в
этом пункте и сожалеем, что лишь немногие OLAP
продукты соответствуют ему. Даже те программы,
которые предлагают такие функции, редко делают их
Хранилища данных. Анализ данных
легкими
и
достаточно
автоматизированными.
В
Основные
характеристики


5. Архитектура "клиент-сервер". Кодд считает, что не
только каждый продукт должен быть клиент-серверным,
но и что каждая серверная компонента OLAP продуктов
должна быть достаточно интеллектуальной для того,
чтобы разные клиенты могли быть подключены с
минимальными усилиями и программированием. Это
намного более сложный тест, чем простая клиентсерверная архитектура и относительно мало продуктов
проходит его. Мы могли бы возразить, что этот тест,
возможно, сложнее, чем надо и не стоит диктовать
разработчикам архитектуру системы.
6. Прозрачность. Этот тест также сложен, но необходим.
Полное соответствие означает, что пользователь, скажем,
электронной таблицы может получить полный доступ к
Хранилища данных. Анализ данных
средствам, предоставляемым ядром OLAP и может при
Основные
характеристики

7. Многопользовательская работа. Кодд
определяет, что для того, чтобы считаться
стратегическим OLAP инструментом, приложения
должны работать не только на чтение и
интерпретацию данных, и, соответственно, они
должны обеспечивать одновременный доступ
(включая и извлечение, и обновление данных),
целостность и безопасность.
Хранилища данных. Анализ данных
Специальные
характеристики


8. Обработка ненормализованных данных. Это
означает возможность интеграции между ядром
OLAP и ненормализованным источником данных.
Кодд выделяет то, что при обновлении данных,
выполненном в среде OLAP, должна быть
возможность изменять ненормализованные данные
во внешних системах.
9. Хранение OLAP результатов отдельно от
исходных данных. В действительности, это имеет
отношение к реализации продукта, а не к его
возможностям, но мало кто будет спорить с этим
утверждением. По сути, Кобб поддерживает
Хранилища данных. Анализ данных
широко принятую
систему, в соответствии с
Специальные
характеристики


10. Выделение отсутствующих данных. Это
означает, что отсутствующие данные должны
отличаться от нулевого значения. Как правило, все
современные OLAP системы поддерживают эту
характеристику.
11. Обработка отсутствующих значений. Все
отсутствующие значения должны быть
проигнорированы при анализе, вне зависимости от
их источника.
Хранилища данных. Анализ данных
Характеристики построения
отчетов


12. Гибкое построение отчетов. Различные
измерения должны выстраиваться любым способом
в соответствии с потребностями пользователя.
Большинство продуктов соответствует этому
требованию в рамках специальных редакторов
отчетов. Хотелось бы, чтобы такие же возможности
были доступны и в интерактивных средствах
просмотра, но это встречается значительно реже.
Это - одна из причин, по которой мы
предпочитаем, чтобы функционал анализа и
построения отчетов был объединен в одном
модуле.
Хранилища данных. Анализ данных
13.
Стабильная
производительность
при
Управление размерностью



15. Общая функциональность. Все измерения
должны иметь одинаковые возможности в
структуре и функциональности.
16. Неограниченное число измерений и уровней
агрегирования. Фактически, под неограниченным
числом Кодд подразумевает 15-20, т.е. число,
заведомо превышающее максимальные
потребности аналитика.
17. Неограниченные операции между данными
различных измерений. Кодд полагает, что для
того, чтобы приложение называлось многомерным,
оно должно поддерживать любые вычисления с
Хранилища данных. Анализ данных
использованием данных всех измерений.
OLAP: Тест FASMI
FASMI – Fast Analysis of
Shared Multidimensional Information —
Быстрый анализ разделяемой многомерной
информации
Fast: ответ на запрос в течение 1-20 с
Analysis: любой сложный логический и
статистический анализ для бизнес–
приложений
Shared: защищенный многопользовательский
доступ
Хранилища данных. Анализ данных
Multidimensional:
многомерное представление
Категории OLAP анализа


Многомерный анализ данных и
отчетность
Интеллектуальный анализ
- Data Mining или Business Intelligence
Хранилища данных. Анализ данных
OLAP: Решаемые задачи



Понимание бизнеса:
интегрированный взгляд
Поддержка принятия решений
Бизнес прогнозы
Хранилища данных. Анализ данных
Пользователи OLAP систем





Руководители и менеджмент
Бизнес-аналитики, маркетологи и
аналитики по планированию
развития
Руководители среднего и младшего
звена
Рядовые сотрудники
Сотрудники
ИТ служб
Хранилища данных. Анализ данных
Рынок OLAP решений
Хранилища данных. Анализ данных
Тема 2: Планирование OLAP
проекта




Сбор и анализ бизнес требований
Сбор и анализ технических
требований
Выявление ограничений
Уточнение модели и процессов
Хранилища данных. Анализ данных
Модуль 2: Логическая
архитектура OLAP-проекта
Хранилища данных. Анализ данных
Тема 1: Логическая
архитектура OLAP Server и
объекты
Логическая архитектура OLAP основана на унифицированной многомерной
модели данных (UDM – Unified Dimensional Model)
Хранилища данных. Анализ данных
Логическая архитектура: объекты


Для определения и изменения UDM модели используется XML
DDL описание модели – XML файл
<Database xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<ID>FoodMart 2005</ID>
<Name>FoodMart 2005</Name>
<CreatedTimestamp>0001-01-01T08:00:00Z</CreatedTimestamp>
<LastSchemaUpdate>0001-01-01T08:00:00Z</LastSchemaUpdate>
<LastProcessed>0001-01-01T08:00:00Z</LastProcessed>
<State>Unprocessed</State>
<LastUpdate>0001-01-01T08:00:00Z</LastUpdate>
<Language>1033</Language>
<DataSourceImpersonationInfo>
<ImpersonationMode>Default</ImpersonationMode>
</DataSourceImpersonationInfo>
<Dimensions />
<Cubes />
<DataSources />
<DataSourceViews />
<Translations />
<Database />
Хранилища данных. Анализ данных
UDM модель и OLAP Server
• UDM Server – Microsoft Analysis Services
• Engine OLAP сервера исполняет DDL описания, написанные на XML/A
Хранилища данных. Анализ данных


Планирование
OLAP
куба
Изучить данные и бизнес процессы,
построить UDM модель
Выбрать главные объекты куба измерения (dimensions) и факты (facts)
Факт - числовая мера, домен в таблице фактов по
которому выполняется агрегирование в кубе
Измерение – формирует ось для куба и
связывается по ключу с таблицей фактов

Выбрать уровень детализации измерения
(grain)
Хранилища данных. Анализ данных
Схемы связывания
Facts и Dimensions в хранилище
Нормализованная схема
Схема ЗВЕЗДА
Схема СНЕЖИНКА
Схема КОМБИНИРОВАННАЯ
Хранилища данных. Анализ данных
Компоненты таблицы фактов
Таблицы
Dimensions
fact_Sales таблица
customer_dim
201 ALFI Alfreds
Foreign Keys
Measures
customer_key product_key time_key quantity_sales amount_sales
product_dim
25 123 Chai
time_dim
134 1/1/2000
201
25
134
400
10,789
Уровень детализации (grain) в таблице фактов fact_Sales
определяется самым нижним уровнем детализации,
хранимым в каждом измерении
Хранилища данных. Анализ данных
Схема ЗВЕЗДА
Employee_Dim
EmployeeKey
EmployeeID
...
Time_Dim
TimeKey
TheDate
...
Fact Table
Sales_Fact
Product_Dim
ProductKey
TimeKey
EmployeeKey
ProductKey
CustomerKey
ShipperKey
ProductID
...
Sales Amount
Unit Sales ...
Shipper_Dim
Customer_Dim
ShipperKey
CustomerKey
ShipperID
...
CustomerID
...
Хранилища данных. Анализ данных
Схема СНЕЖИНКА


Иерархии определяются с помощью
нескольких таблиц размерностей
Лучше нормализована чем
размерность, заданная на одной
таблице
Хранилища данных. Анализ данных
Схема Родители-дети
Сотрудник3
4
6
2
1
7
8
5
Хранилища данных. Анализ данных
Схема связывания Facts и Dimensions
Звезда (Star) – денормализованная схема.
Элементы каждого уровня иерархии извлекаются
из колонки одной и той же таблицы источника.
Количество уровней в иерархии равно количеству
столбцов таблицы-источника.
Снежинка (Snowflake) – нормализованная схема.
Элементы разных уровней иерархии извлекаются
из нескольких таблиц, связанных внешними
ключами.
Субординация (Parent-Child) разбалансированные деревья. Элементы разных
уровней извлекаются
из двух
столбцов
одной
Хранилища данных.
Анализ
данных
Тема 2: Проектирование измерений
• Объект измерение (dimension)
• Свойства атрибутов измерений
• Ключи атрибутов
• Медленно меняющиеся измерения
• Измерения с пропущенными данными
Хранилища данных. Анализ данных
Объект измерение (dimension)
<Dimension />
<ID>Customer </ID>
<Name> Customer </Name>
<Annotation />
<Attributes />
<Hierarchies />
<Dimension />
Атрибут измерения –
домен с ограниченным списком значений.
Атрибут имеет свойства: Type, Usage, KeyColumn,
NameColumn, ValueColumn, OrderBy,
OrderByAttributeID, MemberNameUnique, Translations,
Хранилища данных. Анализ данных
Свойства атрибутов измерений




Наличие нескольких видов имён
Компромисс: краткость и семантика
Удобство внутрисистемных ссылок
Индивидуальность наблюдателя
Хранилища данных. Анализ данных
Отличия
OLAP и Relational Dimensions
OLAP
REGION
West
CA
OR
East
MA
NY
Relational
REGION
West
East
STATE
CA
OR
MA
NY
REGION
West
West
East
East
Хранилища данных. Анализ данных
Измерения и иерархии
Хранилища данных. Анализ данных
Создание разных иерархий
(индивидуализация наблюдателя)
Department Dimension
Department.Region
Region 1
Department A
Department B
Region 2
Department C
Department D
Department.Management
Manager 1
Department A
Department C
Department D
Manager 2
Department B
Хранилища данных. Анализ данных
Two Hierarchies
Сортировка элементов





Для наблюдателя – удобство
Для системы – производительность и
корректность работы (родственные
функции – First Child, Parallel Period...)
Сортировка по ключу элемента (по
умолчанию для числовых типов)
Сортировка по имени элемента (по
умолчанию – для символьных типов )
Сортировка по значению свойства
элемента (member property).
Хранилища данных. Анализ данных
Сортировка извне



Использование оператора
Order({M},F) в программе на языке
MDX
{M} – множество (мультимножество)
элементов
F – функция, по значению которой
(на элементе) будут упорядочены
элементы множества (не обязательно
одной координаты)
Хранилища данных. Анализ данных
Группировка элементов
Верхний уровень
Уровень
группировки
измерения
по
уровням
0-1 км
All
1-5 км
5+ км
Хранилища данных. Анализ данных
Демонстрация: Измерения
Гиперкуб AdventureWorks
- Демонстрация размерностей Time,
Product, Employee
Хранилища данных. Анализ данных
Лаб.работа:
Создать
проект Cube_Sales,
подключив
Измерения
(dimension)
данных - AdventureWorks DB
источник
Lab A.
 Создать измерение Time по схеме звезда.
Создать иерархию Time: год-квартал-месяцдень месяца. Упорядочить номера месяцев в
году по номеру месяца (иначе месяца
сортируются по алфавиту названия месяца с
ошибкой)
 Создать измерение Product по схеме снежинка:
ProductCategory-ProductSubcategoryProductName
4. Создать измерение Employees по схеме ParentChild
5. Выбрать меру Хранилища
SalesAmount
в фактовой
таблице
данных. Анализ
данных
Lab B.Лабораторные
Создать измерение работы
Time с двумя
иерархиями Год-Квартал-Месяц:
Time.CalendarYear, Time.Fiscal.Year
'Quarter ' + convert(CHAR,
DatePart(quarter,"dbo"."TimeMonth"."Month"))
Lab C. Создать измерение Customer_Name с
группировкой по двум уровням –
Customer_group и Customer.
Взять фактовые таблицы Sales_Dollars и
Sales_Units,
сделать новый куб “Customer Group Sales”
Хранилища данных. Анализ данных
Модуль 3:
Измерения – расширенная
функциональность
Хранилища данных. Анализ данных
Тема 1: Меняющиеся измерения
• Динамические измерения
(calculated members)
• Медленно меняющиеся измерения
(Slowly Changed Dimensions - SHD)
• Деформированные измерения (ragged
dimensions)
Хранилища данных. Анализ данных
Динамические элементы
(Calculated
members)
 Отсутствуют в источнике, вычисляются


при развёртке наблюдателем
Располагаются на любом измерении
(по умолчанию – функция). Пример Цена со скидкой, пересчёт физической
единицы измерения (тонны-баррели)
По другим координатам – средний
покупатель, тринадцатый месяц.
Хранилища данных. Анализ данных
Собственная свёртка элемента
Унарные операторы – хранятся в
столбце таблицы-источника
измерения
Пример: План счетов бухгалтерии.
Индивидуальное формирование
вышележащих значений в дереве
путём сложения,
вычитания,
Хранилища данных. Анализ данных
Операции свертки элемента
Операторы
(+) (-) (*) (/) (~)
применяются к
Total Value узла
выше Siblings
Хранилища данных. Анализ данных
Порядок вычисления
функций при динамических
элементах





Формула динамического элемента
определяет функцию
По одной координате – сумма
По другой – частное
Порядок вычисления задаётся
параметром Solve Order
По умолчанию – порядок следования
элементов в редакторе куба
Хранилища данных. Анализ данных
Деформированные
измерения (Ragged
Dimension)
All
Israel
Country
No
States
State
USA
California
San Jose


La Jolla
Illinois
Chicago
Tel Aviv
Haifa
City
Variable Depth – поставить свойство в
скобки
Level Property – установить Hide Member
Хранилища данных. Анализ данных
If
Деформации координаты
(Ragged Dimension)


Деформированная звезда –
отсутствие у некоторых элементов
вышестоящих родственников.
Губерния для Москвы Петербурга.
(Hide Member If)
Деформация в схеме субординации
(Parent-Child). Прямая подчинённость
рядовых сотрудников директору.
Хранилища данных. Анализ данных
(Skipped Level Column)
Свойства атрибутов измерений




Наличие нескольких видов имён
Компромисс: краткость и семантика
Удобство внутрисистемных ссылок
Индивидуальность наблюдателя
Хранилища данных. Анализ данных
Связи элементов координаты
Rigid – зависимый элемент связан с
определяющим элементом жестко и
не может поменять родителя
 Flexible - зависимый элемент связан с
определяющим элементом гибко и
может поменять родителя.
Пример: сотрудник переехал, сменился
его адрес, в иерархии География
сотрудник будет прикреплен к
другому Хранилища
городу.
данных. Анализ данных





Медленно меняющиеся
измерения (Slowly Changed
Dimensions - SHD)
Тип 1 медленно меняющегося измерения
Тип 2 медленно меняющегося измерения
Тип 3 медленно меняющегося измерения
Быстро меняющееся измерение
Хранилища данных. Анализ данных
Ключи атрибутов



Member Key – используется в системе
для ссылок от фактовой таблицы куба к
элементу координаты. Натуральное
число. Примеры: Identity, GUID.
Краткость. Нет семантики
Surrogate Key - Прикладной или
суррогатный ключ – используется извне
куба (наблюдателем и/или программой)
для поддержки бизнес логики
MemberKey и Surrogate Key могут не
совпадать, если элементы измерения
меняютсяХранилища
со временем
(для
медленно
данных. Анализ данных
меняющихся измерений)
Демонстрация: Медленно
меняющиеся измерения
Гиперкуб AdventureWorks
Хранилища данных. Анализ данных
Виртуальные измерения



Не занимают места
Не увеличивают время обработки
куба
Не снижают производительность в
запросах, в которых не упоминаются
Хранилища данных. Анализ данных
База для виртуальных
координат



Обычная координата (Regular)
Свойство элемента (Member Property)
Свойство элемента базовой
координаты должно быть задано до
формирования виртуальной
координаты
Хранилища данных. Анализ данных
Координата Time




Системная координата на основе поля
типа Datetime (smalldatetime) источника
Имеет встроеннные возможности –
типовые виды иерархии (минута – час –
день – месяц- квартал – год)
Подвижное начало года (финансовый
год)
Набор ориентированных функций для
бизнес-аналитики (число месяцев или
дней от начала года или квартала и т.д.)
Хранилища данных. Анализ данных
Дополнительные
координаты
для времени




Требования наблюдателей
Одна иерархическая координата :
уровни Год, Квартал, Месяц, Число
Дополнительная иерархическая
координата – уровни Час, Минута
Ортогональные (независимые)
координаты Год, Месяц, Число, Час
Хранилища данных. Анализ данных
Нарушение иерархичности


Несворачиваемость недели в месяцыкварталы-годы
Наличие у элемента более одного
родительского элемента
Хранилища данных. Анализ данных
Анализ по неделям




Дополнительная координата
Дополнительная таблица с уровнями
Неделя, День. Имена недель – граничные
даты (первого и последнего дня в
неделе)
Собственный календарь, охватывающий
весь интересующий период в прошлом,
настоящем и будущем
Проблема первого дня в неделе в T-SQL
и OLAP
Хранилища данных. Анализ данных
Координаты без таблиц:
Связи ссылочные или
многие-ко-многим




Элементы могут быть извлечены из
фактовой таблицы.
Гарантия целостности
Снижение производительности при
переработке куба
Реализуются оператором Select
Distinct Хранилища данных. Анализ данных
Эвристическая координата


Строится из эвристической модели
(Data Mining)
Использует иерархическую
классификацию, построенную
моделью Data Mining
Хранилища данных. Анализ данных
Лаб.работа:
Сложные измерения
Lab A
Использовать ранее созданный куб Sales
 Добавить измерение Geography и сделать в
нем иерархию Country-Region-City. Связать
Employee с Geography
 Построить SCD измерение Employee типа 1
– у сотрудника меняется телефон и типа 2
- меняется адрес
 Построить куб, обновить измерение и
посмотреть его
Хранилища данных. Анализ данных
Лабораторные
работы
Lab B.
Динамические расчеты
для финансовых приложений
с Custom Rollup Operators.
1. Изучить колонки и их значения из таблицы счетов
Account на вкладке
Schema - Browse Data.
2. Создать новую размерность Account типа Parent-Child из
таблицы Account
с колонками Account_id и Parent_id.
3. На вкладке Advanced pane заменить All Level property на
No, т.к. All Account
имеет только одного ребенка Net Profit.
4. На вкладке Dimension Members pane отсортировать
Хранилища
данных. Анализ данных
счета в координате
Account
работы
LabЛабораторные
C. Виртуальные размерности.
1. Создать виртуальную размерность
Gender на основе размерности
Customers (сначала создать свойство
Gender).
2. Создать новый куб Gender Cube на
основе таблицы custfact, в качестве
мер выбрать колонки store_sales и
store_cost. В этот куб включить
реальную координату Customers и
виртуальную координату Gender.
Хранилища данных. Анализ данных
работы
LabЛабораторные
D. Виртуальные размерности.
1. Создать виртуальную размерность
Quarter на основе существующей
размерности (Existing Dimensions)
BrandTime в кубе Brand Cube.
2. Обработайте размерность Quarter, а
потом куб Brand Cube без designing
aggregations. Убедитесь, что после
обработки в кубе появилось две
временных размерности.
Хранилища данных. Анализ данных
Модуль 4: Физическая
архитектура OLAP проекта
Хранилища данных. Анализ данных
Обзор



Разработка физического уровня куба
Секции в реляционных данных
Секции в многомерных данных
Хранилища данных. Анализ данных
Тема 1. Разработка
физического уровня куба




Секции куба
Тип хранения данных (Storage Mode) ROLAP, MOLAP,HOLAP
Упреждающее кеширование (Proactive
Caching)
Удаленные (remote) секции
Хранилища данных. Анализ данных
Секции
куба
(partitions)
Partition – секция или
патиция – физическая
единица хранения,
определенная для куба.
Секции могут иметь
различную моду хранения и
физически располагаться
на различных серверах.
Секции обрабатываются
независимо друг от друга, в
том числе параллельно при
наличии нескольких
процессоров
Хранилища данных. Анализ данных
MOLAP
40% agg
MOLAP
20% agg
ROLAP
0% agg
Режим MOLAP
Источник реляционный


Таблицы
координат
Таблица фактов
Источник многомерная
модель



Координаты
Данные
Обобщенные
данные
Хранилища данных. Анализ данных
Режим ROLAP
Источник –
реляционный




Источник –
многомерная
модель
Таблицы
координат
 Метаданные
Таблиц фактов
Данные
Обобщённые
данные Хранилища данных. Анализ данных
Режим HOLAP
Источник –
реляционный


Таблицы
координат
Таблица фактов
Источник –
многомерная
модель

Обобщённые
значения
Хранилища данных. Анализ данных
Выбор типа хранения данных
Тип
MOLAP
ROLAP
HOLAP
Задержка
Запросы
Обработка
Размер
Средни
Большая Быстро Быстрая
й
Медленн Медленна Большо
Малая
о
я
й
Средняя Средне
Быстрая
Малый
Хранилища данных. Анализ данных
Упреждающее кеширование
(Proactive Caching)


Стандартные сценарии
Пользовательские сценарии
Хранилища данных. Анализ данных
Упреждающее кеширование –
стандартные сценарии







Real-time ROLAP
Real-Time HOLAP
Low-Latency MOLAP
Medium-Latency MOLAP
Automatic MOLAP
Scheduled MOLAP
MOLAP
Хранилища данных. Анализ данных
Упреждающее кеширование –
пользовательские сценарии

Приложение пользователя
отправляет команду XML/A
NotifyTableChange в Analysis Services
Хранилища данных. Анализ данных
Демонстрация
Выбор типа хранения данных ROLAP,
MOLAP, HOLAP в разных секциях
куба AdventureWorks
Хранилища данных. Анализ данных
Download