Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

КонспектЛекций

.pdf
Скачиваний:
15
Добавлен:
14.05.2015
Размер:
1.73 Mб
Скачать

отношения, которое характеризует все возможные комбинации между элементами отдельных множеств.

Специальные реляционные операции:

1.Ограничение отношения (горизонтальная фильтрация). Результатом ограничения отношения по некоторому условию является отношение, включающее кортежи отношения-операнда, удовлетворяющее этому условию. Обозначение: R[ (r)], где - булевское выражение, составленное из термов сравнения с помощью связок «И», «ИЛИ», «НЕ» и скобок. Унарная операция.

На интуитивном уровне операцию ограничения лучше всего представлять как взятие некоторой "горизонтальной" вырезки из таблицы. Пример: выбрать из R3 студентов из группы 21402. Запишем так: R4 = R3 [Группа = 21403].

2.Проекция отношения (вертикальная фильтрация). Результатом проекции отношения

R на заданный набор его атрибутов B является отношение, кортежи которого производятся путем взятия соответствующих значений из кортежей отношенияоперанда. Обозначение: R[B]. Значения, не принадлежащие атрибутам из набора В, удаляются. Унарная операция.

Продолжаем наш пример: R = R4[Номер зачетки, ФИО].

3.Соединение отношений (соединение по условию). При соединении двух отношений R

и Q по некоторому условию образуется результирующее отношение, кортежи которого являются конкатенацией кортежей первого и второго отношений и удовлетворяют этому

условию. Обозначение: R [ ]Q.

По определению результатом операции сравнения является отношение, получаемое путем выполнения операции ограничения по условию прямого произведения отношений R и Q. Операция соединения называется операцией эквисоединения, если условие соединения имеет вид (a = b), где a и b - атрибуты разных операндов соединения. Такое соединения применяется к паре отношений R и Q, обладающих общим атрибутом (т.е. атрибутом с одним и тем же именем и определенным на одном и том же домене). На интуитивном уровне это способ связи таблиц, имеющих одинаковое по смыслу поле.

4.Деление отношений. Пусть заданы два отношения – R(a1, a2, ..., an, b1, b2, ..., bm) и T(b1, b2, ..., bm). Будем считать, что атрибут bi отношения R и атрибут bi отношения T не только обладают одним и тем же именем, но и определены на одном и том же домене. Назовем множество атрибутов {aj} составным атрибутом A, а множество атрибутов {bj} - составным атрибутом B. После этого будем говорить о реляционном делении бинарного отношения R(A,B) на унарное отношение T(B). Результатом деления является унарное отношение Q(A), состоящее из таких кортежей v, которые в отношении R фигурировали как кортежи-сцепления <v, w>, в которых множество значений {w} включало множество значений атрибута B в отношении T. Обозначение: R[A:B]T.

Предположим, что имеются два отношения: Студенты(Имя, Группа) и Имена(Имя), причем унарное отношение Имена содержит все имена студентов в университете. Тогда после выполнения операции реляционного деления отношения Студенты на отношение Имена будет получено унарное отношение, содержащее номера групп, в которых студенты обладают всеми возможными в университете именами.

11

1.7 Ключи и поддержка целостности.

Возможным (потенциальным) ключом отношения называется набор атрибутов, однозначно определяющий кортеж отношения, причём при удалении любого атрибута из этого набора его свойство однозначной идентификации кортежа теряется.

Потенциальный ключ должен иметь следующие свойства:

-уникальность (на практике – обязательное условие);

-неизбыточность (на практике – может быть нарушено);

В общем случае в отношении может быть несколько возможных ключей. Среди всех возможных ключей отношения обычно выбирают один, который считается главным, и который

называют первичным ключом отношения.

Неключевым атрибутом называется любой атрибут отношения, не входящий в состав ни одного возможного ключа. Атрибут, не входящий в состав первичного ключа, назовём

непервичным.

Различные объекты предметной области, информация о которых хранится в базе данных, всегда взаимосвязаны друг с другом. Например, накладная на поставку товара содержит список товаров с количествами и ценами, сотрудник предприятия имеет детей, числится в подразделении и т.д. Термины "содержит", "имеет", "числится" отражают взаимосвязи между понятиями. Такие взаимосвязи отражаются в реляционных базах данных при помощи внешних ключей (foreign key), связывающих несколько отношений.

Пусть дано отношение R. Подмножество атрибутов А отношения R будем называть внешним ключом, если:

1.Существует отношение S (R и S не обязательно различны) с потенциальным ключом K.

2.Каждое значение A в отношении R всегда совпадает со значением K для некоторого кортежа из S, либо является null-значением.

Отношение S называется родительским отношением, отношение R называется дочерним отношением.

Под целостностью реляционной базы данных будем понимать соответствие информационной модели предметной области, хранимой в базе данных, объектам реального мира и их взаимосвязям в каждый момент времени.

1.Правило структурной целостности: допускается работа только с однородными структурами данных типа «реляционное отношение».

2.Правило целостности объектов: первичный ключ отношения не должен содержать значений NULL.

3.Правило языковой целостности: реляционная СУБД должна обеспечивать языки описания и манипулирования данными не ниже стандарта SQL.

Ссылочная целостность обеспечивает поддержку непротиворечивого состояния базы данных в процессе модификации данных при выполнении операций добавления или удаления.

4. Правило ссылочной целостности (declarative referential integrity): база данных не должна содержать значений внешних ключей, для которых не существует соответствующих значений

12

потенциальных ключей. Поддерживается один из двух принципов взаимосвязи между экземплярами кортежей взаимосвязанных отношений:

- кортежи подчинённого отношения уничтожаются при удалении кортежа основного отношения, связанного с ними.

- кортежи основного отношения модифицируются при удалении кортежа основного отношения, связанного с ними, при этом на месте ключа родительского отношения ставится значение

NULL.

Для внешнего ключа характерны следующие свойства:

-Каждое значение атрибута внешнего ключа должно являться значением соответствующего потенциального ключа. Причём обратное необязательно.

-Количество атрибутов внешнего ключа должно соответствовать количеству атрибутов потенциального ключа. Если внешний ключ – составной, то и потенциальный – составной.

-Для внешнего ключа не требуется, чтобы он был компонентом первичного ключа или вообще какого-либо потенциального ключа в отношении, к которому он принадлежит.

-Каждый атрибут, входящий в данный внешний ключ, должен быть пределен на том же домене, что и соответствующий атрибут потенциального ключа.

-Для атрибутов внешнего ключа разрешается иметь значение NULL.

В общем случае запрещение реальной СУБД при проверке условия ссылочной целостности изменять или удалять значения первичного ключа называется ограничением (restrict). Отображение изменений или удалений значений первичного ключа на соответствующих значениях внешнего ключа называется каскадированием (cascading).

1.8 Нормализация отношений в базе данных.

Классическая технология проектирования реляционных баз данных связана с теорией

нормализации, основанной на анализе функциональных зависимостей между атрибутами отношений.

Функциональной зависимостью набора атрибутов B отношения R от набора атрибутов А того же отношения называется такое соотношения проекций1 R[A] и R[B], при котором в каждый момент времени любому элементу проекции R[A] соответствует только один элемент проекции R[B], входящий вместе с ним в какой-либо кортеж отношения R. Обозначение: R.AR.B

Взаимно-независимые – атрибуты, которые не зависят функционально друг от друга.

Аксиомы функциональных зависимостей:

1.Рефлексивность: если B А, то А B.

2.Дополнение: если А B, то АС BС.

3.Транзитивность: если А B и B C, то А С.

Проектирование схемы базы данных обычно осуществляется путём декомпозиции (разбиения) исходного набора отношений, при этом полученные отношения являющихся проекциями исходных.

Схемы базы данных называются эквивалентными, если содержание исходной базы может быть получено путём естественного соединения отношений, входящих в результирующую схему, и при этом не появляется новых кортежей в исходной базе данных.

1 Проекция – это копия отношения, в которую не включены один или несколько атрибутов исходного отношения.

13

Нормализация – это процесс проектирования схемы базы данных с использованием декомпозиции. Каждой нормальной форме соответствует некоторый определённый набор ограничений, и отношение находится в некоторой нормальной форме, если удовлетворяет свойственному ей набору ограничений.

1NF .

Отношение находится в первой нормальной форме тогда и только тогда, когда значения всех его атрибутов атомарны.

Это определение является синонимом определения отношения в теории реляционных баз данных.

Пример отношения, которое НЕ находится в 1NF: расписание занятий

Преподаватель

День недели

Время

Дисциплина

Вид занятия

Группа

 

Понедельник

8:00

Теор. мех.

практика

21301

Иванов И.И.

9:45

Теор. мех.

лекция

21301

 

 

Вторник

11:20

Оптика

лекция

21301, 21303

 

Вторник

11:20

Базы данных

практика

21402

Петров П.П.

Среда

9:45

Комп.

практика

21202 (2)

 

Четверг

18:35

графика

практика

21202 (1)

Для перевода отношения в 1NF необходимо разделить с дублированием содержания общие ячейки на отдельные записи.

2NF .

Отношение находится во второй нормальной форме тогда и только тогда, когда оно находится в первой нормальной форме и не содержит неполных функциональных зависимостей непервичных атрибутов от атрибутов первичного ключа.

Функциональная зависимость R.A R.B называется полной, если набор атрибутов В функционально зависит от А, но не зависит функционально от любого подмножества А, то есть если А1 А R.A –/ R.B. В противном случае функциональная зависимость называется

неполной.

Пример отношения, которое НЕ находится во 2NF: результаты сессии.

Рассмотрим отношение R ( ФИО, номер зачетки, группа, дисциплина, оценка ).

Первичный ключ подчеркнут.

Однако при этом атрибуты (ФИО, группа) зависят только от части первичного ключа – от атрибута (номер зачетки).

При этом возможны следующие аномалии:

-в результате ошибки оператора студенту по результатам одного или нескольких экзаменов приписали не ту группу.

-если студент не сдал ни одного экзамена, то он не существует.

Для приведения отношения во 2NF следует провести декомпозицию (разбить на проекции), например так:

1.R1 ( ФИО, номер зачетки, группа).

2.R2 (номер зачетки, дисциплина, оценка ).

Приведение таблицы ко второй нормальной форме позволяет избежать повторения (избыточности) данных.

14

3NF .

Отношение находится в третьей нормальной форме тогда и только тогда, когда оно находится во второй нормальной форме и не содержит транзитивных зависимостей.

Функциональная зависимость R.A R.B является транзитивной, если существует набор атрибутов C такой, что:

1.С не является подмножеством А.

2.С не включает в себя В. (В С)

3.Существует функциональная зависимость R.A R.С.

4.Не существует функциональной зависимости R.С R.А.

5.Существует функциональная зависимость R.С R.B.

Иными словами, требование 3NF сводится к тому, чтобы все неключевые поля зависели только от первичного ключа и не зависели друг от друга.

Пример отношения, которое находится во 2NF, но НЕ находится в 3NF: связь студента с группой, факультетом, специализацией.

Дано отношение: R( номер зачетки, ФИО, группа, факультет, кафедра ).

Первичный ключ подчеркнут. Так как он состоит из одного атрибута, то критерий 2NF выполнен.

В отношении имеются транзитивные зависимости, в числе которых:

1)номер зачётки группа (обратное неоднозначно), группа факультет, номер зачётки факультет.

2)номер зачётки кафедра, кафедра факультет, номер зачётки факультет.

Для приведения отношения в 3NF требуется декомпозиция следующего вида:

1.R1 ( номер зачетки, ФИО, группа ).

2.R2 ( группа, факультет).

3.R3 ( кафедра, факультет ).

BCNF .

Отношение находится в нормальной форме Бойса-Кодда, если оно находится в третьей нормальной форме и каждый детерминант отношения является возможным ключом этого отношения.

Определение: Если в отношении существует несколько функциональных зависимостей, то каждый атрибут или набор атрибутов, от которого зависит другой атрибут, называется

детерминантом отношения.

Иными словами, отношение находится в BCNF, если любая функциональная зависимость между его атрибутами сводится к полной функциональной зависимости от возможного ключа.

Пример отношения, которое находится в 3NF, но НЕ находится в BCNF: таблица результатов приемных экзаменов:

Дано отношение: R( идентификатор, номер паспорта, предмет, оценка ).

Ответ на вопрос: зачем? Например, один абитуриент потерял свою карточку и ему выдали другую с другим номером. Второй абитуриент – гениальный ребенок, и у него пока нет паспорта.

15

Имеются следующие функциональные зависимости:

1.Идентификатор, предмет оценка;

2.Номер паспорта, предмет оценка; (зависимость полная)

3.Идентификатор номер паспорта; (зависимым не является непервичный атрибут)

4.Номер паспорта идентификатор.

Транзитивных зависимостей нет, так как зависимость 3 имеет обратную 4. Таким образом, отношение находится в 3NF. Но функциональные зависимости между атрибутами идентификатор и номер паспорта не являются зависимостями от возможного ключа этого отношения.

Для приведения отношения в BCNF возможна декомпозиция следующего вида:

1.R1 ( идентификатор, предмет, оценка).

2.R2 ( идентификатор, номер паспорта).

Ответ на вопрос: зачем? Например, один абитуриент потерял свою карточку и ему выдали другую с другим номером. Второй абитуриент – гениальный ребенок, и у него пока нет паспорта.

В большинстве случаев достижение третьей нормальной формы или даже формы Бойса-Кодда считается достаточным для реальных проектов баз данных, однако в теории нормализации существуют и другие нормальные формы:

4NF.

Отношение находится в четвёртой нормальной форме в том и только в том случае, если существует многозначная зависимость А –>> B и все остальные атрибуты R функционально зависят от А.

Определение: В отношении R(A,B,C) существует многозначная зависимость R.A –>> R.B в том и только в том случае, если множество значений В, соответствующее паре значений атрибутов А и С, зависит только от А и не зависит от С.

Иными словами, отношение находится в четвёртой нормальной форме, если оно находится в BCNF, и все его многозначные зависимости являются функциональными зависимостями от потенциальных ключей.

Пример (1) отношения, которое НЕ находится в 4NF: список дисциплин, которые предстоит прослушать студенту первого курса:

Дано отношение: R( номер зачетки, группа, дисциплина ).

Перечень дисциплин, которые должен слушать студент на первом курсе, определяется исключительно номером группы, а не номером зачетки. То есть, в данном отношении существуют две многозначные зависимости:

1.группа –>> дисциплина.

2.группа –>> номер зачетки.

Это означает, что каждой группе однозначно соответствует перечень дисциплин по учебному плану, и номер группы определяет список студентов, которые в этой группе учатся.

При этом возможны следующие аномалии:

-Мы не можем хранить информацию о новой группе и перечне её дисциплин до тех пор, пока в неё не будут зачислены студенты.

-Если в группу добавляется новый студент, то необходимо сгенерировать для него весь перечень дисциплин для данной группы.

16

Для приведения отношения в 4NF возможна декомпозиция следующего вида:

1.R1 ( номер зачетки, группа).

2.R2 (группа, дисциплина ).

Пример (2): меню:

Исходное отношение: R( блюдо, повар, рецепт ). Повар умеет готовить разные блюда, одинаково названные блюда могут отличаться рецептом приготовления.

Декомпозиция:

3.R1 ( повар, блюдо).

4.R2 (блюдо, рецепт).

5NF (PJ/NF).

Отношение R находится в пятой нормальной форме (нормальной форме проекциисоединения) в том и только в том случае, когда любая зависимость соединения в R следует из существования некоторого возможного ключа в R.

Определение: Отношение R (A, B, … Z) удовлетворяет зависимости соединения (А, B, … Z) в том и только в том случае, когда R восстанавливается без потерь путём соединения своих проекций на A, B, … Z (наборы атрибутов отношения R). Полной декомпозицией отношения называют такую совокупность произвольного числа его проекций, соединение которых полностью совпадает с содержимым исходного отношения.

Иными словами, отношение находится в пятой нормальной форме тогда и только тогда, когда в каждой его полной декомпозиции все проекции содержат возможный ключ.

Пример отношения, которое находится в 4NF, но НЕ находится в 5NF: почасовики.

Дано отношение: R( преподаватель, кафедра, дисциплина). Считается, что приглашённый преподаватель может работать на нескольких кафедрах и вести различные дисциплины. В этом случае ключом отношения является полный набор из трёх атрибутов. В отношении отсутствуют многозначные зависимости, и поэтому оно находится в 4NF. Однако в нём нет наборов атрибутов, которые составляют возможные ключи отношения, и потому это отношение не в PJ/NF. При этом провести полную декомпозицию на два отношения нельзя.

Возможна декомпозиция следующего вида:

1.R1 ( преподаватель, кафедра).

2.R2 (преподаватель, дисциплина ).

3.R3 (кафедра, дисциплина).

Отношение, не имеющее ни одной полной декомпозиции, также находится в пятой нормальной форме.

17

Глава 2. Язык SQL.

1. История развития и стандарты.

SQL (Structured Query Language, Структурированный язык запросов) – стандартный язык запросов по работе с реляционными БД. Прототип языка – сначала QBE, затем SEQUEL (Structured English Query Language) – был разработан в начале 70-х годов в IBM Research и

реализован в СУБД System R. В дальнейшем этот язык применялся во многих коммерческих СУБД и в силу своего широкого распространения постепенно стал стандартом «де-факто» для языков манипулирования данными в реляционных СУБД.

1989 – первый ANSI/ISO стандарт языка SQL (вторая редакция, первая была в 1987 г.). Подавляющее большинство доступных на рынке СУБД поддерживают этот стандарт полностью. Однако развитие технологий БД и необходимость создания переносимых приложений потребовали его доработки и расширения.

1992 – стандарт SQL92 или SQL2. В настоящее время все возможности стандарта ни одна СУБД не поддерживает, обычно предлагая свои собственные расширения языка. 1999 – стандарт SQL3. Если отличия между предыдущими стандартами во многом были количественными, то в SQL3 введены новые типы данных, при этом предполагается возможность задания сложных структурированных типов, которые соответствуют объектно-ориентированной идеологии программирования. Также введены стандарты на события и триггеры, которые ранее не затрагивались в стандартах. Попытка следовать стандарту SQL3 хорошо прослеживается в последней версии СУБД Oracle.

Стандарт языка баз данных – наиболее эффективный способ переноса как проекта БД, так и действующей СУБД на различные платформы. Как следствие этого – возможность более успешно конкурировать со своим программным продуктом на рынке СУБД.

SQL не является традиционным языком программирования: он не содержит операторы, позволяющие осуществлять действия на низком уровне, и ориентирован на работу со множествами. Обычно реализация SQL в какой-либо СУБД является подмножеством собственного языка системы, включающего в себя ещё и средства построчного доступа к таблицам, средства управления ходом выполнения программы и т.п. Например, в случае MS SQL Server языком системы является Transact-SQL, добавляющий к базовому SQL, помимо вышеперечисленного, дополнительные инструкции и ключевые слова почти для каждого оператора SQL.

2. Наборы команд SQL.

Подмножества команд SQL (перечислены не все):

1) DDL – Data Definition Language – язык определения данных.

CREATE TABLE

Создание новой таблицы в базе данных

DROP TABLE

Удаление таблицы из базы

ALTER TABLE

Изменение структуры таблицы или ограничения целостности таблицы

CREATE VIEW

Создание представления (виртуальной таблицы на основе запроса)

ALTER VIEW

Изменение структуры представления

DROP VIEW

Удаление представления

CREATE INDEX

Создание индекса (таблицы быстрого доступа к данным)

DROP INDEX

Удаление индекса

2) DMP – Data Manipulation Language – язык манипулирования данными.

18

DELETE

Удаление строк из таблицы

INSERT

Вставка строк в таблицу

UPDATE

Обновление значений полей в таблице

3) DQL – Data Query Language – язык запросов.

SELECT

Выборка строк из таблицы

4) TCS – Transactional Control Statement – cредства управления транзакциями.

COMMIT

Завершить транзакцию

ROLLBACK

Отменить транзакцию

SAVEPOINT

Сохранить промежуточную точку выполнения транзакции

5) Средства администрирования данных.

CREATE DATABASE

Создать новую базу данных

DROP DATABASE

Удалить базу данных

ALTER DATABASE

Изменить свойства и объекты базы данных

GRANT

Предоставить права доступа к объектам базы данных

REVOKE

Лишить прав доступа к объектам базы данных

3. Оператор SELECT.

Весь запрос SELECT разбивается на отдельные разделы, каждый из которых имеет своё назначение. Большая часть этих разделов может быть опущена. Упрощённый вариант

синтаксиса оператора SELECT:

1SELECT [ALL | DISTINCT] <список вывода>

2[ INTO <имя новой таблицы> ]

3FROM <список таблиц и условий соединения>

4[ WHERE <условие отбора или соединения> ]

5[ GROUP BY <список полей группировки> ]

6[ HAVING <условия, накладываемые на группу> ]

7[ ORDER BY <список полей для сортировки вывода> ]

8[UNION <запрос на выборку для объединения>]

9

<список вывода>::= { * |

[<имя таблицы> | <алиас>.] {<имя столбца> | <выражение>} [AS <алиас>] | <имя столбца> = <выражение>

} […n]

Символ звёздочка означает, что в результирующий набор включаются все столбцы из указанных исходных таблиц:

SELECT * FROM publishers

Декартово произведение отношений:

SELECT * FROM publishers, authors

ALL – в результирующий набор включаются все строки, удовлетворяющие условиям запроса, даже если среди них будут одинаковые (?!, то есть полученное отношение не удовлетворяет требованиям реляционной алгебры).

19

SELECT ALL p.country FROM publishers AS p

DISTINCT – в результирующий набор включаются только уникальные строки. Если в результат выборки включаются несколько столбцов, то уникальность будет определяться по значениям обоих этих столбцов.

SELECT DISTINCT state, contract FROM authors

Простейшие вычисления в разделе SELECT:

SELECT 'Название книги: ', title, yearpub-1992 FROM titles WHERE yearpub > 1992;

Раздел WHERE предназначен для наложения горизонтальных фильтров на данные, обрабатываемые запросом. Для этого указывается логическое условие, от результата вычисления которого зависит, будет ли строка включена в результат выборки или нет.

SELECT au_lname, au_fname, state FROM authors WHERE state<>’CA’

Предикаты, используемые в условных конструкциях SQL:

1)Предикаты сравнения: =,<>,<,>,>=,<= ;

SELECT * FROM authors WHERE 1=1

2)AND – соединение нескольких логических выражений;

SELECT title FROM titles WHERE yearpub>=1995 AND yearpub<=1997

3)OR – если одно из двух условий истинно, то результат True;

SELECT title FROM titles WHERE yearpub<1995 OR yearpub>1997

4)NOT – отрицание, может ставиться непосредственно перед нижеследующими предикатами;

5)Предикат диапазона: Between A and B – принимает значение True, если сравниваемое значение лежит между A и В;

SELECT title FROM titles WHERE yearpub NOT BETWEEN 1995 AND 1997

6) Вхождение во множество: IN (<список значений>) – принимает True, если сравниваемое значение входит во множество заданных значений;

SELECT title FROM titles WHERE yearpub IN (1995, 1996, 1997)

7)Сравнение с образцом: LIKE. В шаблон могут входить специальные символы «_» – для обозначения любого одиночного символа, и «%» – для обозначения произвольной последовательности символов;

SELECT publisher, url FROM publishers WHERE publisher LIKE ‘%Wiley%’

8)Предикат сравнения с неопределённым значением: IS NULL.

SELECT publisher, “url not defined !” FROM publishers WHERE url IS NULL

Связь между таблицами с использованием раздела WHERE (стандарт SQL89)

Представим ситуацию, когда выборку данных надо производить из отношения, которое является результатом слияния нескольких отношений. При отсутствии соединения в разделе WHERE результат будет эквивалентен расширенному декартовому произведению отношений. Обычно всегда в случае использования нескольких таблиц имени поля предшествует имя таблицы во всех разделах оператора SELECT.

SELECT titles.title, titles.yearpub, publishers.publisher FROM titles, publishers

WHERE titles.pub_id = publishers.pub_id AND titles.yearpub>1996

20