База данных

Автор работы: Пользователь скрыл имя, 06 Января 2014 в 21:03, лекция

Описание работы

Системы управления базами данных (СУБД) – это специализированные программные продукты, позволяющие:
1) постоянно хранить сколь угодно большие (но не бесконечные) объемы данных;
2) извлекать и изменять эти хранящиеся данные в том или ином аспекте, используя при этом так называемые запросы;

Файлы: 1 файл

1.docx

— 453.70 Кб (Скачать файл)

Например:

 

Итак, действительно, видим, что в первом случае, когда предикат IsNull взяли от нуля, на выходе получилось значение False. Во всех случаях, в том  числе во втором и третьем, когда  аргументы логической функции оказались  равными Null-значению, и в четвертом случае, когда сам аргумент и был изначально равен Null-значению, предикат выдал значение True.

4. Null-значения и логические операции

 

Обычно в системах управления базами данных непосредственно поддерживаются только три логические операции: отрицание  ¬, конъюнкция & и дизъюнкция ∨. Операции следования ⇒ и равносильности ⇔ выражаются через них с помощью подстановок:

 

(x  ⇒ y ) ≔ (¬x  ∨ y );

(x  ⇔ y ) ≔ (x  ⇒ y ) & (y  ⇒ x );

 

Заметим, что эти подстановки  полностью сохраняются и при  использовании Null-значений.

Интересно, что при помощи операции отрицания «¬» любая  из операций конъюнкция & или дизъюнкция ∨ может быть выражена одна через другую следующим образом:

 

(x  & y ) ≔¬ (¬x  ∨¬y );

(x  ∨ y ) ≔ ¬ (¬x  & ¬y );

 

На эти подстановки, как  и на предыдущие, Null-значения влияния не оказывают.

А теперь приведем таблицы  истинности логических операций отрицания, конъюнкции и дизъюнкции, но кроме  привычных значений True и False, используем также Null-значение в качестве операндов. Для удобства введем следующие обозначения: вместо True будем писать t, вместо False – f, а вместо Null – n.

1. Отрицание  ¬x.

 

Стоит отметить следующие  интересные моменты касательно операции отрицания с использованием Null-значений:

1) ¬¬x ≔ x – закон двойного отрицания;

2) ¬Null ≔ Null – Null-значение является неподвижной точкой.

 

2. Конъюнкция x & y .

 

Эта операция также имеет  свои свойства:

1) x & y  ≔ y & x – коммутативность;

2) x & x ≔ x – идемпотентность;

3) False & y  ≔ False, здесь False – поглощающий элемент;

4) True & y  ≔ y , здесь True – нейтральный элемент.

 

3. Дизъюнкция x  ∨ y.

 

Свойства:

1) x  ∨ y  ≔ y  ∨ x  – коммутативность;

2) x  ∨ x  ≔ x  – идемпотентность;

3) False ∨ y  ≔ y , здесь False – нейтральный элемент;

4) True ∨ y  ≔ True, здесь True – поглощающий элемент.

Исключение из общего правила  составляют правила вычисления логических операций конъюнкция & и дизъюнкция ∨ в условиях действия законов поглощения :

 

(False & y ) ≔ (x  & False) ≔ False;

(True ∨ y ) ≔ (x  ∨ True) ≔ True;

 

Эти дополнительные правила  формулируются для того, чтобы  при замене Null-значения значениями False или True результат бы все равно не зависел бы от этого значения.

Как и ранее было показано для других типов операций, применение Null-значений в логических операциях могут также привести к неожиданным значениям. Например, логика на первый взгляд нарушена в законе исключения третьего  (x ∨ ¬x) и в законе рефлексивности  (x = x), поскольку при x ≔ Null имеем:

 

(x ∨ ¬x), (x = x) ≔ Null.

 

Законы не выполняются! Объясняется  это так же, как и раньше: при  подстановке Null-значения в выражение информация о том, что это значение сообщается одной и той же переменной теряется, а в силу вступает общее правило работы с Null-значениями.

Таким образом, делаем вывод: при выполнении логических операций с Null-значениями в качестве операнда эти значения определяются системами управления базами данных как применимое, но неизвестное .

5. Null-значения и проверка условий

 

Итак, из всего вышесказанного можно сделать вывод, что в  логике систем управления базами данных имеются не два логических значения (True и False), а три, ведь Null-значение также рассматривается как одно из возможных логических значений. Именно поэтому на него часто ссылаются как на неизвестное значение, значение Unknown.

Однако, несмотря на это, в  системах управления базами данных реализуется  только двузначная логика. Поэтому  условие с Null-значением (неопределенное условие) должно интерпретироваться машиной либо как True, либо как False.

В языке СУБД по умолчанию  установлено опознавание условия  с Null-значением как значения False. Проиллюстрируем это следующими примерами реализации в системах управления базами данных условных операторов If и While:

 

If P then A else B;

 

Эта запись означает: если P принимает  значение True, то выполняется действие A, а если P принимает значение False или Null, то выполняется действие B.

Теперь применим к этому  оператору операцию отрицания, получим:

 

If ¬P then B else A;

 

В свою очередь, этот оператор означает следующее: если ¬P принимает  значение True, то выполняется действие B, а в том случае, если ¬P принимает  значение False или Null, то будет выполняться  действие A.

И снова, как мы видим, при  появлении Null-значения мы сталкиваемся с неожиданными результатами. Дело в том, что два оператора If в этом примере не эквивалентны! Хотя один из них получен из другого отрицанием условия и перестановкой ветвей, т. е. стандартной операцией. Такие операторы в общем случае эквивалентны! Но в нашем примере мы видим, что Null-значению условия P в первом случае соответствует команда B, а во втором – A.

А теперь рассмотрим действие условного оператора While:

 

While P do A; B;

 

Как работает этот оператор? Пока переменная P имеет значение True, будет выполняться действие A, а  как только P примет значение False или Null, выполнится действие B.

Но не всегда Null-значения интерпретируются как False. Например, в ограничениях целостности неопределенные условия опознаются как True (ограничения целостности – это условия, накладываемые на входные данные и обеспечивающие их корректность). Это происходит потому, что в таких ограничениях отвергнуть нужно только заведомо ложные данные.

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

Перепишем условные операторы If и While с использованием этой функции:

 

1) If IfNull ( P, False) then A else B;

2) While IfNull ( P, False) do A; B;

 

Итак, функция подмены IfNull (выражение 1, выражение 2) возвращает значение первого выражения, если оно не содержит Null-значения, и значение второго выражения – в противном случае.

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

 

Лекция  № 3. Реляционные объекты данных

1. Требования  к табличной форме представления  отношений

 

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

Но помимо этого, вполне ожидаемого, существуют и другие требования.

2. Заголовок таблицы, представляющей  отношение, должен обязательно  состоять из одной строки –  заголовка столбцов, причем с  уникальными именами. Многоярусных  заголовков не допускается. Например, таких:

 

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

 

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

А это очень важно, поскольку  является третьим свойством.

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

 

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

 

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

5. Данные во всех столбцах  должны быть одного и того  же типа. И кроме того они  должны быть простого типа.

Поясним, что такое простой  и сложный типы данных.

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

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

2. Домены  и атрибуты

 

Домены и атрибуты –  базовые понятия в теории создания баз данных и управления ими. Поясним, что же это такое.

Формально, домен атрибута  (обозначается dom(a) ), где а – некий атрибут, определяется как множество допустимых значений одного и того же типа соответствующего атрибута а. Этот тип должен быть простым, т. е:

 

dom(a) ⊆ {x | type(x) = type(a)};

 

Атрибут  (обозначается а), в свою очередь, определяется как упорядоченная пара, состоящая из имени атрибута name(a) и домена атрибута dom(a), т. е.:

 

a = (name(a): dom(a));

 

В этом определении вместо привычного знака «,» (как в стандартных  определениях упорядоченных пар) используется «:». Это делается для того, чтобы  подчеркнуть ассоциацию домена атрибута и типа данных атрибута.

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

 

а1 = (Курс: {1, 2, 3, 4, 5});

а2 = (МассаКг: {x | type(x) = real, x 0});

а3 = (ДлинаСм: {x | type(x) = real, x 0});

 

Заметим, что у атрибутов  а2 и а3 домены формально совпадают. Но семантическое значение этих атрибутов различно, ведь сравнивать значения массы и длины бессмысленно. Поэтому домен атрибута ассоциируется не только с типом допустимых значений, но и семантическим значением.

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

 

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

3. Схемы  отношений. Именованные значения  кортежей

 

В теории и практике СУБД понятия схемы отношения и  именованного значения кортежа на атрибуте являются базовыми. Приведем их.

Схема отношения  (обозначается S ) определяется как конечное множество атрибутов с уникальными именами, т. е.:

 

S = {a | a ∈ S};

 

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

Количество атрибутов  в схеме отношений определяет степень  этого отношения  и обозначается как мощность множества: |S |.

Схема отношений может  ассоциироваться с именем схемы  отношений.

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

S = {a1, a2, a3, a4} – схема отношений этой таблицы.

 

Имя отношения изображается как схематический заголовок  таблицы.

В текстовой же форме представления  схема отношений может быть представлена как именованный список имен атрибутов, например:

 

Студенты (№  зачетной книжки, Фамилия, Имя, Отчество, Дата рождения).

 

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

Из определения следует, что схема отношения может  быть и пустой (S = ∅). Правда, возможно это только в теории, так как на практике система управления базами данных никогда не допустит создания пустой схемы отношения.

Именованное значение кортежа на атрибуте  (обозначается t(a) )определяется по аналогии с атрибутом как упорядоченная пара, состоящая из имени атрибута и значения атрибута, т. е.:

 

t(a) = (name(a) : x), x ∈ dom(a);

 

Видим, что значение атрибута берется из домена атрибута.

В табличной форме представления  отношения каждое именованное значение кортежа на атрибуте – это соответствующая  ячейка таблицы:

Здесь t(a1), t(a2), t(a3) – именованные значения кортежа t на атрибутах а1, а2, а3.

 

Простейшие примеры именованных  значений кортежей на атрибутах:

 

(Курс: 5), (Балл: 5);

 

Здесь соответственно Курс и  Балл – имена двух атрибутов, а 5 – это одно из их значений, взятое из их доменов. Разумеется, хоть эти  значения в обоих случаях равны  друг другу, семантически они различны, так как множества этих значений в обоих случаях отличаются друг от друга.

4. Кортежи.  Типы кортежей

 

Понятие кортежа в системах управления базами данных может быть интуитивно найдено уже из предыдущего  пункта, когда мы говорили об именованном  значении кортежа  на различных атрибутах. Итак, кортеж  (обозначается t , от англ. tuple – «кортеж») со схемой отношения S определяется как множество именованных значений этого кортежа на всех атрибутах, входящих в данную схему отношений S. Другими словами, атрибуты берутся из области определения кортежа, def(t) , т. е.:

 

t  ≡  t (S ) = {t (a ) | a  ∈ def (t ) ⊆ S ;.

Информация о работе База данных