Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
материалы к БД по дисциплине.docx
Скачиваний:
19
Добавлен:
21.04.2019
Размер:
1.3 Mб
Скачать

Операторы манипулирования данными.

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

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

Примеры использования операторов INSERT, UPDATE, DELETE, SELECT.

Выбор записей с условием.

Определить имена поставщиков по крайней мере одной красной детали.

SELECT DISTINCT S[.SNAME

FROM S

WHERE S.S IN

(SELECT SP.S

FROM SP

WHERE SP.P IN

(SELECT P.P

FROM P

WHERE P.COLOR = 'Red' ) );

Запрос на добавление данных. Заполнение таблицы Р данными.

INSERT INTO S VALUES ('S1','Smith', 20, 'London')

INSERT INTO S VALUES ('S2','Jones', 10, 'Paris')

INSERT INTO S VALUES ('S3','Black', 30, 'Paris')

INSERT INTO S VALUES ('S4','Smith', 20, 'London')

Запрос на обновление данных.

Удвоить статус всех поставщиков, расположенных в Лондоне.

UPDATE S SET STATUS=STATUS*2 WHERE S.CITY='London';

Запросы на удаление данных.

Удалите строку из таблицы S, содержащую сведения о поставщике S4.

DELETE S WHERE S# ='S4'

Удаление таблицы. Для удаления таблицы используется оператор DROP, имеющий простой формат

DROP TABLE name.

Удалить таблицу S

DROP TABLE S.

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

Удаление базы данных. Для удаления базы данных используется команда DROP DATABASE.

DROP DATABASE name

Лекция8.Функциональные зависимости(ФЗ) и ключи.

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

Основные определения.

Рассмотрим переменную-отношение SCP.

SCP

S#

CITY

P#

QTY

S1

London

P1

100

S1

London

P2

100

S2

Paris

P1

200

S2

Paris

P2

200

S3

Paris

P2

300

S4

London

P2

400

S4

London

P4

400

S4

London

P5

400

Рис.1.

Рассмотрим зависимость S# ―> CITY. Номер поставщика функционально определяет город. Эта зависимость означает, что каждый поставщик находится в одном городе.

Функциональные зависимости P# +> QTY и QTY +> P# не существуют.

Определение функциональной зависимости для переменной-отношения:

Пусть R – переменная-отношение, а X и Y – произвольные подмножества множества атрибутов переменной отношения R. Тогда Y функционально зависимо от Х

(Х ―> Y)

(читается «Х функционально определяет Y») тогда и только тогда, когда для любого допустимого значения переменной отношения R каждое значение множества Х отношения R связано в точности с одним значением множества Y отношения R. Если два кортежа совпадают по значению Х, они также совпадают по значению Y. Данное отношение удовлетворяет требованиям сразу нескольких функциональных зависимостей.

{S#, P#} ―> {CITY} (1)

{S#, P#} ―> {QTY} (2)

{S#, P#} ―> {CITY, QTY} (3)

{S#, P#} ―> {S#} (4)

{S#, P#} ―> {S#, P#, CITY, QTY} (5)

{S#} ―> {QTY} (6)

{QTY} ―> {S#} (7)

Левая часть функциональных зависимостей называется детерминантом, правая – зависимой частью.

Если множество одноэлементно, то скобки можно опустить.

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

Одновременное соблюдение двух зависимостей А ―> В и В ―> А называется взаимнооднозначным соответствием (например, функциональные зависимости (6) и (7)).Такая ситуация соответствует связи 1:1.

Единственный способ определения функциональной зависимости – тщательный анализ семантики атрибутов данного отношения.

Если Х является потенциальным ключом переменной отношения R, то все атрибуты Y должны обязательно быть функционально зависимы от Х, т.е. P# ―> {P#, PNAME, COLOR, WGT, CITY}

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

Пример тривиальной зависимости: {S#, P#} ―> S#.

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

Замыкание множества зависимостей.

Рассмотрим зависимость:

{S#, P#} ―> {CITY, QTY} - (S)

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

{

S+ «замыкание»

S#, P#} ―> CITY

{S#, P#} ―> QTY

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

Существуют правила вывода функциональных зависимостей на основе заданных функциональных зависимостей. Они называются аксиомами АРМСТРОНГА.

Правило рефлексивности: если множество В является подмножеством множества А, то (А ―> В). Это правило определения тривиальной зависимости.

Правило дополнения: если А определяет В, то АС ―> ВС.

Правило транзитивности: если А ―> В и В ―> С, то А ―> С.

Из этих трех правил можно вывести несколько дополнительных правил, которые упрощают процесс вычисления замыкания S+.

Правило самоопределения: А ―> А.

Правило декомпозиции: если А ―> ВС, то А ―> В и А ―> С.

Правило объединения: если А ―> В и А ―> С, то А ―> ВС.

Правило композиции: если А ―> B и С ―> D, то АС ―> ВD.

Пример1. Пусть дана переменная-отношение R с атрибутами А, В, С, D, E, F и следующими функциональными зависимостями:

А ―> ВС

В ―> Е

СD ―> EF

Показать, что для переменной - отношения R также выполняется функциональная зависимость AD ―> E, которая вследствие этого принадлежит замыканию заданного множества S.

Решение:

A ―> BC (задана) (1)

A ―> C (из( 1) по правилу декомпозиции) (2)

AD ―> CD (из (2) по правилу дополнения) (3)

CD ―> EF (задана) (4)

AD ―> EF (зависимости(3) и (4) образуют транзитивную зависимость) (5)

AD ―> E (из (5) по правилу декомпозиции) (6)

Данная зависимость для переменной- отношения R выполняется и принадлежит замыканию S+.

Как определить замыкание S+ ? Один из способов – это применять правило вывода функциональной зависимости до тех пор, пока создание новых функциональных зависимостей не прекратиться. На практике редко требуется вычисление замыкания само по себе. В отношениях с большим числом строк нахождение потенциального ключа по значениям отношения достаточно трудно. Кроме того, на стадии проектирования ЭИС, значения многих отношений не известны, поэтому потенциальный ключ переменной- отношения определяется по известным функциональным зависимостям.

Замыкание множества атрибутов.

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

Присвоим замыканию начальное значение (множество атрибутов)-{Z}. Далее для каждой функциональной зависимости из S проверяется условие: если ее левая часть является подмножеством замыкания, то к результату добавляются атрибуты, стоящие в правой части функциональной зависимости. Если левая часть функциональной зависимости не является подмножеством замыканий, то результат остается прежний.

Пример2. Дана переменная отношение с атрибутами А, В, С, D, E, F и следующими функциональными зависимостями:

A ―> BC

E ―> CF

B ―> E

DC ―> EF

Вычислить замыкание {AB}+ множества атрибутов А, В, исходя из заданного множества функциональных зависимостей S.

{AB}+ = {A, B, C, E, F}

Решение: присвоим замыканию начальное значение- множество атрибутов {AB}. Выполним внутренний цикл 4 раза по одному для каждой функциональной зависимости.

Атрибут А функциональной зависимости А ―> ВС, является подмножеством {AB}, следовательно, к результату добавляем ВС. Теперь замыкание представляет собой множество {A, B, C}.

Атрибут E функциональной зависимости E ―> CF не является подмножеством {A, B, C} – результат остается прежний.

Атрибут В функциональной зависимости В ―> Е является подмножеством {A, B, C}, следовательно к результату добавляем атрибут Е . Теперь замыкание представляет собой множество {A, B, C, Е}.

DC функциональной зависимости DC ―> EF не является подмножеством {A, B, C, Е} - результат прежний.

Применим тот же алгоритм к предыдущему результату. На первой итерации результат остается прежний. На второй итерации результат- {A, B, C, E, F}.На третьей и четвертой итерациях – результат остается прежний.

После еще одного четырехкратного прохождения цикла замыкание остается неизменным. Таким образом {AB}+ = {A, B, C, E, F}.

Т.к. {AB}+ не определяет все атрибуты отношения, то АВ – не ключ.

Пример3. Дана переменная- отношение с атрибутами A, B, C, D, E, F, G и следующими функциональными зависимостями:

A ―> B

BC ―> DE

AEF ―> G

1. Вычислить замыкание по атрибутам AС.

Решение: {AС}+ = {A, С, В, D, E}. Как видно {AС}+ не определяет все атрибуты переменной-отношения R, следовательно это не ключ.

вычислить замыкание по атрибутам A, С, F

2.Вычислить замыкание по атрибутам AС F.

Решение: {A, С, F}+ = {A, C, F, В, D, E, G};

AСF определяет все атрибуты отношения, следовательно AСF - суперключ. Его сократить нельзя. Значит AСF - потенциальный ключ переменной -отношения R.

3.Подразумевается ли зависимость ACF ―> DG одной из функциональных зависимостей множества S или является ли она членом замыкания множества S.

Решение. DG является подмножеством замыкания {A, С, F}+, следовательно зависимость ACF ―> DG подразумевается одной из ФЗ множества S, то есть является членом замыкания S+.

Вывод 1.Функциональная зависимость Х ―> Y является членом замыкания S+ тогда и только тогда, когда множество Y является подмножеством замыкания X+.

Вывод 2. если замыкание {Z}+ состоит из всех атрибутов переменной -отношения R, то подмножество Z называется суперключом переменной -отношения R.

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

Можно заметить, что потенциальный ключ состоит из атрибутов, которые не встречаются в правых частях всех функциональных зависимостей R. Но таким образом можно определить потенциальный ключ, если заранее известно, что он единственный. В противном случае необходимо вычислить замыкание атрибутов. ACF – не встречается в правых частях функциональных зависимостей.

Неприводимое множество зависимостей.

Пусть S1 и S2 – два множества функциональных зависимостей. Если S1+ = S2+ , то множества S1 и S2 – эквивалентны. Если S1 эквивалентно S2, то соблюдение СУБД ограничений, представленных зависимостями множества S2, автоматически обеспечит соблюдение ограничений, представленных зависимостями S1 и наоборот.

Можно найти множество функциональных зависимостей S2, которое эквивалентно S1 и неприводимо, не вычисляя замыкание.

Множество ФЗ называется неприводимым тогда и только тогда, когда оно обладает следующими свойствами:

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

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

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

Пример4. Дана переменная-отношение S с функциональными зависимостями.

S# ―> SNAME

S# ―> STATUS

S# ―> CITY

Является ли множество функциональных зависимостей неприводимым?

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

  1. Правая часть каждой функциональной зависимости содержит один атрибут.

  2. Ни одна из этих зависимостей не может быть опущена без изменения замыкания множества, то есть без утраты некоторой информации.

  3. Левая часть каждой функциональной зависимости является неприводимой (ее нельзя сократить).

Лекция9. Нормализация.

Процесс нормализации основывается на концепциях нормальных норм. Первая НФ (1НФ), вторая НФ (2НФ), третья НФ (3НФ) определены Коддом. Определение Кодда 3НФ приводит к некоторой неадекватности. Переработанное и более точное понятие 3НФ, данное Бойсом и Коддом является более строгим. Отношение в 3НФ по новому определению называют нормальной формой Бойса-Кодда (НФБК). Четвертая НФ (4НФ) и пятая НФ (5НФ) определены Фейгином (Fagin).

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

Декомпозиция без потерь.

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

Рассмотрим переменную -отношение S.

S

S#

STATUS

CITY

S3

30

Paris

S5

30

London

а)

SST SC

S#

STATUS

S3

30

S5

30

STATUS

CITY

30

Paris

30

London

б)

SST

STS

S#

STATUS

S3

30

S5

30

STATUS

CITY

30

Paris

30

London

Рис. 1. Декомпозиция переменной- отношения S.

Следует отметить, что процесс декомпозиции – это операция проекции.

В случае а) информация не утрачивается (декомпозиция без потерь). При соединении переменных -отношений SST и SC будет получено исходное отношение S. В случае б) нельзя сказать в каком городе находится поставщик. При соединении переменных -отношений SST и STC получено исходное отношение S получено не будет, значит некоторая информация будет утрачена. В этом случае декомпозиция не является декомпозицией без потерь.

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

Каждая переменная-отношение S; SP; P имеет неприводимое множество функциональных зависимостей. Эти функциональные зависимости можно представить еще в виде диаграммы.

Рис.2. Диаграммы функциональных зависимостей для переменных- отношений S; SP; P.

Все переменные- отношения находятся в 3НФ.

Первая, вторая и третья нормальные формы.

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

Это определение говорит о том, что все переменные- отношения находятся в 1НФ. Однако, переменная -отношение в 1НФ обладает структурой., которая нежелательна по ряду причин.

Предположим, что вся информация, касающаяся поставщиков и поставок, содержится не в двух, а в переменной-отношении FST. При этом введем еще одну функциональную зависимость CITY  STATUS, то есть статус поставщика определяется городом (местонахождением). Например, все поставщики в Лондоне имеют статус 20.

Атрибут SNAME – для простоты опустим.

Первичный ключ переменной-отношения FST- {S#,P#}.

FST

S#

CITY

STATUS

P#

QTY

S1

London

20

P1

300

S1

London

20

P2

200

S1

London

20

P3

400

S1

London

20

P4

200

S1

London

20

P5

100

S1

London

20

P6

100

S2

Paris

10

P1

300

S2

Paris

10

P2

400

S3

Paris

10

P2

200

S4

London

20

P2

200

S4

London

20

P4

300

S4

London

20

P5

400

Таблица 1.

Для переменной-отношения FST можно определить следующие функциональные зависимости:

1.{S#,P#}  QTY.

2.{S#,P#} CITY.

{S# CITY (более сильная зависимость).

3.{S#,P#} STATUS.

{S#} STATUS (более сильная зависимость).

4.CITY  STATUS .

Зависимости 2 и 4 образуют транзитивную зависимость.

Диаграмма переменной-отношения FST будет иметь вид, представленный на рис. 1.

Рис. 1. Функциональные зависимости в переменной- отношении FST.

CITY не приведен, зависит от S# , а не от всего ключа.

Как видно из диаграммы не все условия 3НФ соблюдаются:

  1. Не все неключевые атрибуты взаимно-независимы (CITY и STATUS)

  2. Не все неключевые атрибуты неприводимо (фнкционально-полно) зависимы от первичного ключа

STATUS и CITY каждый в отдельности зависит от части ключа S# а не от всего ключа {S#, P#}

Эта структура нежелательна.

Операция INSERT.

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

Операция DELETE.

  1. Удаление. Если из FST удалить кортеж, который является единственным для некоторого поставщика, то вместе с информацией о поставке детали будет удалена информация о городе, в котором находится поставщик. Это происходит из-за того, что в этом отношении собрано много информации).

Операция UPDATE

  1. Обновление. Если поставщик с номером S1 переместился в другой город, то нужно отыскать все кортежи, в которых связаны между собой значения S1 и London, чтобы внести изменения.

Для решения этих проблем заменим переменную отношений FST двумя переменными отношениями (проекциями) SECOND и SP.

SECOND SP

S#

STATUS

CITY

S1

20

London

S2

10

Paris

S3

10

Paris

S4

20

London

S5

30

Rome

S#

P#

QTY

S1

P1

300

S1

P2

200

S1

P3

400

S1

P4

200

S1

P5

100

S1

P6

100

S2

P1

300

S2

P2

400

S3

P2

200

S4

P2

200

S4

P4

300

S4

P5

400

Функциональные зависимости в переменных- отношениях SECOND и SP.

Новая структура позволяет:

  1. Поместить информацию о поставщике с номером S5, находящемся в Риме, даже в том случае, если он в данный момент не поставляет детали.

  2. При удалении кортежа с номером S3 из SP не утрачивается информация, что этот поставщик находится в Париже.

  3. Номер поставщика указывается один раз.

Определение 2НФ дано для отношения.

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

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

Обе переменные -отношения находятся во 2НФ. Структура переменной –отношения SP находится в 3НФ, ее рассматривать не будем.

Зависимость STATUSCITY, хотя является неприводимой , но и одновременно является транзитивной (через CITY). Эти транзитивные зависимости также характеризуются аномалиями.

  1. Включение. Мы не можем утверждать, что с конкретным городом связано конкретное значение статуса, пока нет поставщика в этом городе.

  2. Удаление. Если исключим из “SECOND” S5, то вместе с поставщиком исключится информация о городе и его статусе.

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

Если обновить не все кортежи, то получается искажение информации.

Заменим исходную переменную отношения SECOND двумя проекциями SC и CS.

SC

CS

S#

CITY

S1

London

S2

Paris

S3

Paris

S4

London

S5

Rome

Табл. 4

CITY

STATUS

London

20

Paris

10

Rome

30

Moscow

50

Табл. 5

S#

CITY

CITY

STATUS

Рис.3 Функциональные зависимости в отношениях SC и CS

Таким образом результатом дальнейшей нормализации стало исключение транзитивных зависимостей.

Определение 3НФ дано для отношения.

Третья НФ (в определение предполагается наличие только одного потенциального ключа, который так же является первичным ключом отношения).

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

Переменные-отношения SC и CS находятся в 3НФ. Как говорилось выше, этот процесс обратим.

Лекция10. Семантическое моделирование .Модель сущность-связь. ER –диаграмма.

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

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

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

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

  • Хотя весь процесс проектирования происходит на основе учета зависимостей, реляционная модель не предоставляет каких-либо средств для представления этих зависимостей.

  • Несмотря на то, что процесс проектирования начинается с выделения некоторых существенных для приложения объектов предметной области ("сущностей") и выявления связей между этими сущностями, реляционная модель данных не предлагает какого-либо аппарата для разделения сущностей и связей.

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

Семантические модели должны отвечать следующим требованиям:

- обеспечить интегрированное представление предметной области;

- понятийный аппарат модели должен быть понятен как специалисту предметной области, так и администратору базы данных;

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

Наиболее распространенной семантической моделью является модель сущность-связь (entity -relationship) или ER - модель.

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