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

Bazy_dannykh_i_znanii_UP_SHirokov_L.A._2000

.pdf
Скачиваний:
41
Добавлен:
10.06.2015
Размер:
901.06 Кб
Скачать

ШифрКлиента

ФИО

Адрес

 

 

 

391

Белов Г. Р.

Орлина, 4

 

 

 

403

Гринев Р. Г.

Комова, 11

 

 

 

569

Белов Г. Р.

Комова,11

 

 

 

615

Яшин Р. А.

Орлина,4

 

 

 

Рис. 4.1

4.2.2. Вторичный ключ

Вторичным ключом называется идентификатор, выбираемый в качестве ключа и неоднозначно идентифицирующий кортеж, или запись, в БД.

Пример.

Рассмотрим БД Сотрудники, имеющую структуру:

Сотрудники(№Таб, ФИО, ПаспортныеДанные, Должность).

Здесь вторичным ключом может быть тип поля Должность, т.к. по нему выбирается множество сотрудников, занимающих одну и ту же должность на предприятии.

4.3. ФУНКЦИОНАЛЬНЫЕ И МНОГОЗНАЧНЫЕ ЗАВИСИМОСТИ

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

4.3.Функциональные зависимости

Вотношении R атрибут Y функционально зависит от атрибута Х, если каждому значению атрибута X соответствует единственное значение атрибута Y.

Синтаксис

X Y (X влечет Y).

Пример 1.

В отношении

Двигатель(МаркаДвигателя, Мощность, Масса)

51

значение атрибута Мощность функционально зависит от значения атрибу-

та МаркаДвигателя.

Кроме того, значение атрибута Масса также функционально зависит от значения атрибута МаркаДвигателя.

Графически функциональные зависимости представляются диаграммами. На рис. 4.2 приведена диаграмма функциональных зависимостей для рассмотренного выше примера в двух вариантах исполнения:

а) с вертикальным размещением атрибутов; б) с горизонтальным размещением атрибутов.

Рис. 4.2

На рисунке звездочкой помечен ключ-кандидат, который и принят в качестве ключа, что отображается его подчеркиванием. Пример 2.

При отсутствии однофамильцев представим отношение Служащий в виде:

Служащий(№Служащего, ФИО, ЗПлата, №Проекта, ДатаОкончания),

(4.1)

а1

а2

а3

а4

а5

 

где аi (i=1,...,5) - символьные имена атрибутов, вводимые для упрощения построения схем отношений и анализа функциональных зависимостей в

них.

Выявим в отношении (4.1) функциональные зависимости и определим ключ. С этой целью изобразим функциональные зависимости отношения "Служащий" в виде схемы на рис.4.2. Здесь линии со стрелками определяют зависимости полей-функций аj , находящихся возле концов линий, отмеченных стрелками, от аргументов аi , находящихся возле начал этих линий. Из схемы, например, видно, что атрибут а1 не является функционально зависимым от атрибута а3 . Действительно, одинаковая зарплата может быть у нескольких служащих. Аналогично а1 не зависит от а4.

Рассмотрим возможные ключи отношения, т.е. ключи-кандидаты. Атрибут а4 не может быть ключом-кандидатом, так как от него зависит лишь атрибут а5. Вместе с тем ключами-кандидатами, обычно по-

52

мечаемыми в схемах символом "звездочка" (*), могут быть а1 и а2 , так

Рис. 4.3

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

Пример 3.

Рассмотрим отношение Программисты (с зависимостями между группами атрибутов), в котором неповторимы атрибуты ФИО и НазваниеПрограммы (Назв-еПр-мы):

Программисты(№Прогр-та, №Программы, ФИО, Назв-еПр-мы, Ресурсы), (4.2)

а1 a 2 а 3 а 4 а5

где под ресурсами понимаются средства на разработку, которые зависят от

программы и от программиста; аi (i=1,...,5) - символьные имена атрибутов.

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

Из рассмотрения функциональных зависимостей видно, что в отношении нет простого ключа. Однако имеется четыре составных (или сцепленных) ключа-кандидата, состоящих из пар атрибутов (а1, а2), (а1, а4), (а2, а3), или (а3, а4), которые помечены звездочками. Так, атрибут а5 функционально зависит от любого из приведенных возможных составных ключей. По соображениям удобства для пользователей ключом принята пара атрибутов (а1, а2), т.е. (№Прогр-та, №Пр-мы), которые в формуле (4.2) и на рисунке подчеркнуты.

53

Рис. 4.4

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

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

Аксиома транзитивности

Введем обозначения: X, Y, Z – атрибуты (А); R - отношение; QА - множество атрибутов отношения R; QF - множество функциональных зависимостей.

Аксиома.

Если атрибуты X, Y и Z принадлежат множеству QA и заданы зависимости

X Y, Y Z,

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

 

X Z

или

(x y) & (y z)

 

x z .

Пример.

В отношении

Служащие(ФИО, ЗПлата, Задание, ВремяВыполнения)

54

атрибут ВремяВыполнения зависит от атрибута Задание, который в свою очередь зависит от атрибута ФИО. Следовательно, атрибут ВремяВыполнения транзитивно зависит от атрибута ФИО.

4.3.3.Многозначные зависимости

Вотношении R имеет место многозначная зависимость, если при заданном значении атрибута X существует множество взаимосвязанных значений атрибута Y. Для обозначения многозначной зависимости обычно используется символика:

X →→ Y.

Пример.

В отношении

Поставки(Завод, Изделие, Цена)

между атрибутами Завод и Изделие имеет место многозначная зависимость, т.к. одному значению атрибута Завод соответствует множество значений атрибута Изделие.

4.4. ВЫПОЛНЕНИЕ ОПЕРАЦИЙ НАД ОТНОШЕНИЯМИ

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

Для реализации изложенных функций Коддом было предложено три абстрактных теоретических языка:

реляционная алгебра;

реляционное исчисление с переменными - кортежами;

реляционное исчисление с переменными - доменами.

Эти языки по своей выразительности эквивалентны.

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

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

55

Современные языки манипулирования данными (SEQUEL (SQL), QBE, ISBL и др.), используемые в СУБД реализуют широкий набор операций:

операции с данными: включение, модификация, удаление данных;

операции обработки данных:

арифметические выражения (вычисления и сравнения);

команды присваивания и печати;

агрегатные функции.

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

Пример.

определение максимального или минимального значения домена

определение суммы домена

определение среднего домена и т.п.

4.5.ТРИ УРОВНЯ АВТОМАТИЗАЦИИ ПРИ РАБОТЕ С РЕЛЯЦИОННЫМИ БД

Всоответствии с лингвистическим обеспечением, используемым пользователями при работе с БД, предусмотрено три уровня манипулирования данными:

низший уровень - это уровень, при котором пользователь БД оперирует непосредственно с записями;

средний уровень, основанный на использовании реляционной алгебры. Пользователь для манипулирования данными использует наборы операций высокого уровня над отношениями;

высшим уровнем автоматизации в БД является исчисление отношений. Пользователь непосредственно обращается к СУБД на ПЭВМ, используя объектный язык. При этом решение сформулированной задачи по манипулированию данными осуществляется самостоятельно программой СУБД. При таком подходе пользователь не интересуется, как машина получает результат, и она, в свою очередь, имеет свободу для оптимизации запросов. В подобных системах удобнее и проще реализуется засекречивание данных.

КОНТРОЛЬНЫЕ ВОПРОСЫ

1.Перечислите свойства реляционных таблиц.

2.Что называется первичным ключом?

3.Что называется вторичным ключом?

4.Приведите пример функциональной зависимости.

5.Что понимается под многозначной зависимостью?

6.Какие операции выполняются над отношениями?

56

ГЛАВА 5. РЕЛЯЦИОННАЯ АЛГЕБРА

Гибкость реляционных БД определяется легкостью манипулирования, т.е. модификации реляционных таблиц (РТ). Это означает, что исходя из РТ, сформированных при разработке концептуальной схемы БД, пользователь или прикладной программист могут легко создавать и далее использовать свои РТ. Для этих целей используются процедурные и непроцедурные языки.

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

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

Настоящая глава посвящена рассмотрению средств реляционной алгебры.

Для удобства изучения операторов реляционной алгебры будем рассматривать БД “Разработчики ПП”, представленную шестью таблицами на рис. 5.1.

5.1.ОПЕРАТОР "ОБЪЕДИНЕНИЕ" (UNION)

Функция: для двух РТ R1 и R2 одинаковой арности и с совпадающими типами полей формируется РТ R с записями, входящими хотя бы в одну исходную РТ.

Синтаксис: R = R1 union R2

Пример.

Объединить две РТ: R1 и R2 в одну РТ R.

R1:

A

B

R2:

A

B

Ответ: R:

A

B

 

a

4

 

c

4

 

a

4

 

b

6

 

d

8

 

b

6

 

 

 

 

 

 

 

c

4

 

 

 

 

 

 

 

d

8

57

5.2. ОПЕРАТОР "ВЫЧИТАНИЕ" (DIFFERENCE)

Функция: для двух РТ R1 и R2 одинаковой арности и с совпадающими типами полей формируется РТ R c записями, содержащимися "Разработчики ПП" в уменьшаемом - таблице R1, но отсутствующими в вычитаемом - таблице R2.

Синтаксис: R = R1 difference R2.

Таблица R1. Разработчики

Таблица R2. Программисты

ФИО

Год

Стаж

Раз-

Разр-ка

Рож-я

 

ка

 

 

 

R1

Белов А.

1940

21

R2

КрыловГ

1962

17

R3

Фатов Р.

1964

11

R4

Белов А.

1953

21

R5

Крылов Г.

1964

10

№Раз-ка

Язык

Кат-я

Пр-та

Пр-та

Прог-я

Пр-та

 

 

 

 

А1

R4

Pas

1

А2

R2

C

2

А3

R5

Pas

3

А4

R4

C

1

А5

R2

Pas

2

 

Таблица R3. Разработанные ПП

 

Таблица R4. Временные трудовые

 

 

 

 

 

 

 

 

 

коллективы (ВТК)

 

 

 

 

 

 

№ПП

Наз-еПП

№Разр-

ГСозд-я

 

№ВТК

 

Назв-е

№ком-

 

№рук-

 

 

 

 

ка

 

 

 

 

 

 

 

ВТК

ты

 

ляОТК

 

P1

ПР-1

R5

 

1982

 

 

B1

 

Луч

12

 

 

R5

 

P2

ПР-2

R2

 

1984

 

 

B2

 

Стрела

18

 

 

R3

 

P3

ПР-1

R1

 

1960

 

 

B3

 

Взлет

12

 

 

R2

 

P4

ПР-3

R2

 

1987

 

 

 

 

 

 

 

 

 

 

 

 

P5

ПР-4

R3

 

1985

 

 

 

 

 

 

 

 

 

 

 

Таблица R5. Составы ВТК

 

 

Таблица R6. Использование ПП.

 

 

 

 

№ВТК

 

№Прог-та

 

 

№ПП

№Проекта

 

№Разр-каГИПа

 

№ВТК

 

 

B1

 

A1

 

 

P5

TR1

 

 

 

R1

 

 

B3

 

 

B1

 

A3

 

 

P3

TR2

 

 

 

R4

 

 

B1

 

 

B1

 

A4

 

 

P5

TR5

 

 

 

R3

 

 

B3

 

 

B2

 

A2

 

 

P2

TR1

 

 

 

R1

 

 

B2

 

 

B2

 

A5

 

 

P4

TR2

 

 

 

R4

 

 

B1

 

 

B3

 

A1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B3

 

A5

 

 

 

 

Рис. 5.1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пример.

Вычесть из РТ R1 таблицу R2, результат записать в РТ R.

R1:

A

B

R2:

A

B

Ответ: R:

A

B

 

a

4

 

a

3

 

a

4

 

b

6

 

b

6

 

 

 

 

 

 

 

c

6

 

 

 

 

 

 

 

 

 

 

58

5.3. ОПЕРАТОР "ПЕРЕСЕЧЕНИЕ" (INTERSECTION)

Функция: для двух РТ R1 и R2 одинаковой арности и с совпадающими типами полей формируется РТ R с записями, входящими в обе РТ.

Синтаксис: R = R1 intersection R2.

Пример.

Выполнить пересечение таблиц R1 и R2, результат записать в таблицу R.

R1:

A

B

R2:

A

B

Ответ: R:

A

B

 

a

4

 

a

5

 

b

6

 

b

6

 

b

6

 

 

 

5.4. ОПЕРАТОР "ПРОЕКТИРОВАНИЕ" (PROJ)

Функция: из РТ R1 оператор выбирает заданные типы полей и размещает в указанном порядке в таблице R.

Синтаксис: R = proj a1,...,ar(R1)

Пример.

Из РТ "Разработчики" (R1 на рис.5.1) выбрать поле ФИО и поле ГодРождения.

R = proj ФИО, ГодРожд-я(Разработчики)

Ответ: R:

ФИО

ГодРожд-я

 

Белов А.

1940

 

Крылов Г.

1962

 

Фатов Р.

1964

 

Белов А.

1953

 

Крылов Г.

1964

5.5. ОПЕРАТОР "ВЫБОР" (SEL)

Функция: из РТ R1 по заданному критерию выбирается требуемая совокупность записей. В частном случае результатом выборки может быть и пустое множество.

Синтаксис: R= sel <F> (R1),

где F - критерий выбора.

Критерии выбора могут формулироваться на основе операторов двух типов:

операторы сравнения: =, <>, <, <=, >, >=;

логические операторы: И (AND), ИЛИ (OR), НЕ (NOT).

Пример 1.

В БД на рис. 5.1 выбрать данные разработчика Белова А.

Для решения надо использовать РТ "Разработчики" и выбрать данные Белова А.:

59

R= sel <ФИО = 'Белов А.'> (Разработчики)

Ответ: R:

№Разр-ка

ФИО

ГодРожд-я

Стаж

 

R1

Белов А.

1940

21

 

R4

Белов А.

1953

21

Пример 2.

В БД на рис 5.1 выбрать программистов выше третьей категории, работающих на Pascal'e.

Для решения воспользуемся РТ "Программисты" и критерием выбора:

<F> = <(ЯзыкПрогр-я = 'Pas') and (Катег-яПрогр-та < 3)>.

Тогда оператор примет вид:

R=sel<(ЯзыкПр-я='Pas')and(Катег-яПр-та<3)> (Программисты).

Ответ: R:

№Пр-та

№Разр-каПр-та

ЯзыкПр-я

Катег-яПр-та

 

A1

R4

Pas

1

 

A2

R2

Pas

2

5.5.1. Комбинированный запрос с операторами PROJ И SEL

Рассмотрим комбинированный запрос с операторами PROJ и SEL для БД "Разработчики ПП", приведенной на рис.5.1.

Запрос.

Выбрать ФИО разработчиков со стажем от 12 лет, ГодРождения которых 1960 и позже.

Для ответа на запрос в БД "Разработчики ПП" необходимо использовать РТ "Разработчики". Тогда уравнение ответа можно записать в виде:

R=ProjФИО(sel<(Стаж >=12)and(ГодРожд-я>=1960)> (Разр-ки))

Ответ : R:

ФИО

 

Крылов Г.

5.6. ОПЕРАТОР "СОЕДИНЕНИЕ" (JOIN)

Функция: на основе двух реляционных таблиц R1 и R2, имеющих одно или несколько полей идентичных типов, формируется реляционная таблица R, состоящая из записей, каждая из которых является конкатенацией, т.е. соединением в одну тех записей таблиц R1 и R2, у которых совпадают значения полей всех идентичных типов.

Следовательно, соединение может быть реализовано двумя спо-

60

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]