- •Содержание
- •Основные понятия
- •Понятие данных
- •Файловые системы
- •Системы баз данных
- •История развития субд
- •Трехуровневая архитектура ansi/sparc
- •Общая характеристика моделей данных
- •Основные понятия модели данных
- •Представление статических и динамических свойств
- •Общая характеристика структурных компонентов. Множества: домены и атрибуты
- •Общая характеристика структурных компонентов. Отношения: сущности
- •Общая характеристика структурных компонентов. Отношения: связи
- •Общая характеристика ограничений целостности
- •Модель данных «сущность – связь»
- •Уровни представления информации
- •Уровень 1 – информация о сущностях и связях
- •Уровень 2. Структура информации
- •Ограничения целостности в модели сущность-связь
- •Расширенная модель данных сущность-связь: нотация idef1x
- •Реляционная модель данных
- •Базовые структурные компоненты реляционной модели данных
- •Целостная часть реляционной модели данных
- •Языковые средства описания данных
- •Манипуляционная часть реляционной модели данных
- •Подмножество sql для манипулирования данными
- •Примеры написания запросов
- •I. И еще несколько примеров написания запросов из документации [10]
- •Краткая характеристика языка sql pl db2® udb
- •Дополнительные возможности описания ограничений целостности
- •Дополнительные возможности db2
- •Описание данных
- •Манипулирование данными
- •Дополнительные возможности формирования запросов
- •Типы данных, определенные пользователем
- •Функции, определенные пользователем
- •Теория проектирования реляционных баз данных
- •Цели проектирования
- •Функциональные зависимости
- •1. Рефлексивность
- •2. Пополнение
- •3. Транзитивность
- •4. Псевдотранзитивность
- •5. Аддитивность (объединение)
- •6. Декомпозиция (проективность)
- •7. Композиция
- •Нормализация отношений
- •Внутренние структуры хранения
- •Структурная схема обработки запроса
- •Бинарные деревья
- •Многоходовые деревья
- •Сравнение методов индексирования
- •Создание индексов в db2®
- •Организация файлов базы данных в db2®
6. Декомпозиция (проективность)
Если X YZ, то X Y и X Z
Иллюстрирует данное правила пример, приведенный выше, в котором просто нужно поменять местами пометки «Дано:» и «Следует:».
Доказательство.
Дано: X YZ. Требуется получить X Y и X Z.
В соответствии с правилом 1 YZ Y и YZ Z.
В соответствии с правилом 3 (частный случай правила 4), из X YZ и YZ Y следует X Y; аналогично, из X YZ и YZ Z следует X Z.
7. Композиция
Если X Y и Z W, то XZ YW
Пример:
|
|
|
|
|
|
|
|
Дано: |
|
|
|
|
Следует: |
|
||||
R |
(A |
B |
C |
D) |
|
A |
|
B |
и |
C |
|
D |
|
A |
C |
|
B |
D |
|
a1 |
b1 |
c1 |
d1 |
|
a1 |
|
b1 |
|
c1 |
|
d1 |
|
a1 |
c1 |
|
b1 |
d1 |
|
a2 |
b2 |
c1 |
d1 |
|
a2 |
|
b2 |
|
c1 |
|
d1 |
|
a2 |
c1 |
|
b2 |
d1 |
|
a1 |
b1 |
c1 |
d1 |
|
a1 |
|
b1 |
|
c1 |
|
d1 |
|
a1 |
c1 |
|
b1 |
d1 |
|
a3 |
b3 |
c2 |
d3 |
|
a3 |
|
b3 |
|
c2 |
|
d3 |
|
a3 |
c2 |
|
b3 |
d3 |
Доказательство.
Дано: X Y и Z W. Требуется получить XZ YW.
В соответствии с правилом 2 из X Y следует XZ YZ, а из Z W следует YZ YW.
В соответствии с правилом 3 из XZ YZ и YZ YW следует XZ YW.
Определение ключа
Ключ отношения определяется на основе функциональных зависимостей.
Рассмотрим некоторые определения.
Определение
Множество атрибутов Y функционально полно зависит от атрибутов X, если Y функционально зависит от X и не зависит функционально от любого собственного подмножества X.
Другими словами, если есть X Y, то для любого Z ⊂ X нет зависимости Z Y.
Если детерминант представлен единственным атрибутом, тогда никакие проблемы при определении ключа не возникают. Если же ключ представлен совокупностью нескольких атрибутов, требуется проверить, действительно ли имеет место функционально полная зависимость.
Например, рассмотрим следующее отношение:
ПОСТАВКА ДЕТАЛЕЙ ( S#, SNAME, CITY, P#, PNAME, PRICE, QTY).
Для данного отношения определена функциональная зависимость (S#, P#) QTY, и она является функционально полной зависимостью.
С другой стороны, для этого же отношения определена и функциональная зависимость (S#, P#) CITY, но она не является функционально полной, так как существует функциональная зависимость S# CITY.
Определение
Если R – схема отношения с атрибутами A1, A2, …, An и множеством функциональных зависимостей F, X ⊆ U – некоторое подмножество атрибутов {A1, A2, …, An}, то X называется ключом R, если:
функциональная зависимость X A1A2…An принадлежит F+,
ни для какого собственного подмножества Y ⊂ X функциональная зависимость Y A1A2…An не принадлежит F+.
Другими словами, X A1A2…An есть функционально полная завдекомпозиции отношения рассметривается и деисимость.
Если X – первичный ключ отношения R, тогда из функциональной зависимости X A1A2…An в соответствии с правилом 6 следуют функциональные зависимости X Ai для i = 1, 2, …, n.
Декомпозиция с соединением без потерь
При проектировании базы данных может возникнуть ситуация, когда некоторое отношение должно быть разбито на несколько других отношений. Такой процесс разбиения называется декомпозицией отношения. При этом, поскольку отношение характеризуется схемой и имеет некоторую реализацию, декомпозиция отношения затрагивает и схему отношения, и его реализацию.
Определение
Декомпозицией схемы отношения R(A1, A2, …, An) называется замена ее совокупностью подмножеств {Ri} схемы R (подсхем) таких, что R1 ∪ R2 ∪ … ∪ Rk = R. При этом не обязательно, чтобы Ri были не пересекающимися.
Декомпозиция реализации отношения определяется как совокупность проекций отношения на подсхемы, полученные при декомпозиции схемы отношения. Так, если есть некоторая реализация отношения r(R), то, используя декомпозицию, получим:
ri = πRi(r), i = 1, 2, …, k.
Важно, чтобы декомпозиция была обратимой, т.е. выполнялась без потери информации: по проекциям отношения ri можно было бы восстановить исходную реализацию отношения r. Очевидно, что восстановление r из ri реализуется с помощью операции естественного соединения:
s
= r1
r2
… rk
Где гарантия, что s ≡ r? Если такой гарантии нет, получив из ri s, мы не будем знать, достоверна информация или нет.
Рассмотрим пример. Пусть отношение со схемой S(S#, STATUS, CITY) имеет следующую реализацию:
S |
(S#, |
STATUS, |
CITY) |
|
S1 |
30 |
N1 |
|
S2 |
30 |
N2 |
Так как декомпозиция представляет собой проекцию отношения, рассмотрим следующие способы декомпозиции:
a) |
S1 |
(S#, |
STATUS) |
|
S2 |
(S#, |
CITY) |
|
|
S1 |
30 |
|
|
S1 |
N1 |
|
|
S2 |
30 |
|
|
S2 |
N2 |
Делаем операцию естественного соединения – восстановление исходного отношения:
s1 s2 = S |
(S#, |
STATUS, |
CITY) |
|
S1 |
30 |
N1 |
|
S2 |
30 |
N2 |
Получили отношение, совпадающее с исходным.
b) |
S1 |
(S#, |
STATUS) |
|
S2 |
(STATUS, |
CITY) |
|
|
S1 |
30 |
|
|
30 |
N1 |
|
|
S2 |
30 |
|
|
30 |
N2 |
Восстанавливаем:
s1 s2 = S |
(S#, |
STATUS, |
CITY) |
|
S1 |
30 |
N1 |
|
S1 |
30 |
N2 |
|
S2 |
30 |
N1 |
|
S2 |
30 |
N1 |
В результате получили лишние строки, отсутствовавшие в исходном отношении.
Таким образом, возникает вопрос: как разбивать исходное отношение, чтобы не потерять информацию? Эта проблема получила название декомпозиции с соединением без потери информации. Вопрос о том, происходит ли потеря информации, тесно связан с функциональными зависимостями.
Определение
Пусть R – схема отношения, в результате декомпозиции которой получены схемы R1, R2, …, Rk, и F – множество функциональных зависимостей для R. Говорят, что эта декомпозиция обладает свойством соединения без потерь относительно F, если каждая реализация r(R), удовлетворяющая F, может быть представлена в виде:
r
= πR1(r)
πR2(r)
… πRk(r)
Теорема
Пусть R(A, B, C) – схема отношения с атрибутами (подмножествами атрибутов) A, B и C. Если данная схема отношения удовлетворяет функциональной зависимости A B, то осуществляется декомпозиция без потери на {R1, R2}, где R1 = {A, B} и R2 = {A, C}.
Вернемся к приведенному выше примеру: S(S#, STATUS, CITY}. Так как S# – первичный ключ отношения, то S# CITY. Отсюда, декомпозиция без потери осуществляется на подсхемы S1(S#, CITY) и S2(S#, STATUS). Функциональные зависимости STATUS S# или STATUS CITY отсутствуют, поэтому второй пример декомпозиции не сохраняет исходное отношение.
Но здесь может возникнуть еще одна проблема. Предположим, что в условиях данной задачи поставщик дислоцирован в конкретном городе, а каждый город имеет определенный статус. Следовательно, для приведенной схемы отношения имеют место следующие функциональные зависимости:
S# CITY
CITY STATUS
В соответствии с теоремой можно предложить два способа декомпозиции без потери информации:
относительно S# CITY: S11(S#, CITY) и S12(S#, STATUS)
относительно CITY STATUS: S21(CITY, S#) (или S21(S#, CITY) – порядок задания имен атрибутов никакого значения не имеет) и S22(CITY, STATUS)
Какой из этих двух способов лучше?
Чтобы ответить на этот вопрос, введем еще одно определение:
Проекцией множества функциональных зависимостей F на множество атрибутов Z (πZ (F)) называется множество зависимостей X Y в F+, таких, что XY ⊆ Z.
Рассмотрим все тот же пример.
Для исходного отношения определено следующее множество функциональных зависимостей:
F = {S# CITY, CITY STATUS}
Из них по правилам вывода можно вывести следующие зависимости:
S# STATUS – правило транзитивности;
S# (CITY, STATUS) – правило объединения.
Отсюда,
F+ = {S# CITY, CITY STATUS, S# STATUS, S# (CITY, STATUS)}
Для способа a) декомпозиции определены следующие функциональные зависимости:
S# STATUS, из схемы отношения S11(S#, STATUS)
S# CITY, из схемы отношения S12(S#, CITY)
Для способа b) декомпозиции определены следующие функциональные зависимости:
S# CITY, из схемы отношения S21(S#, CITY)
CITY STATUS, из схемы отношения S22(CITY, STATUS)
Определение
Говорят, что декомпозиция сохраняет множество функциональных зависимостей F, если из объединения всех зависимостей, принадлежащих πRi (F), для i = 1, 2, …, k, логически следуют все зависимости, принадлежащие F.
Из функциональных зависимостей, сохранившихся при способе декомпозиции a), нельзя логически вывести зависимость CITY STATUS, т.е. данная декомпозиция не сохраняет функциональные зависимости.
Для способа декомпозиции b) все функциональные зависимости из F сохранены.
Что дает сохранение функциональных зависимостей? Рассмотрим следующий пример.
Пусть дана следующая реализация отношения:
S |
(S#, |
STATUS, |
CITY) |
|
S1 |
30 |
N1 |
|
S2 |
30 |
N2 |
|
S3 |
40 |
N3 |
Выполним декомпозицию этого отношения способом a):
|
S11 |
(S#, |
CITY) |
|
S12 |
(S#, |
STATUS) |
|
|
S1 |
N1 |
|
|
S1 |
30 |
|
|
S2 |
N2 |
|
|
S2 |
30 |
|
|
S3 |
N3 |
|
|
S3 |
40 |
Предположим, что поставщик S2 переехал в город N3. Тогда в отношении S11 появится кортеж <S2, N3>. Но в отношении S12 сохраняется кортеж <S2, 30>, в соответствии с которым город N3 приобретает статус 30, что неправильно. Следовательно, для поддержания достоверного состояния реализаций потребуется изменить не только кортеж в S11, но и кортеж в S12, т.е. требуется зависимое обновление двух отношений.
Если же выполнить декомпозицию отношения способом b):
|
S21 |
(S#, |
CITY) |
|
S22 |
(CITY, |
STATUS) |
|
|
S1 |
N1 |
|
|
N1 |
30 |
|
|
S2 |
N2 |
|
|
N2 |
30 |
|
|
S3 |
N3 |
|
|
N3 |
40 |
Тогда достаточно изменить кортеж в отношении S21: <S2, N3>; статус города N3 определен в отношении S22 независимо от того, какой поставщик в этом городе дислоцирован.
