База данных

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

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

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

Файлы: 1 файл

1.docx

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

Коллектив Авторов 

Базы  данных: конспект лекций

 

Лекция  № 1. Введение

1. Системы управления базами данных

 

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

1) постоянно хранить сколь  угодно большие (но не бесконечные)  объемы данных;

2) извлекать и изменять  эти хранящиеся данные в том  или ином аспекте, используя  при этом так называемые запросы;

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

4) обращаться к хранящимся  данным со стороны нескольких  пользователей одновременно (т. е.  предоставляют доступ к механизму  управления транзакциями).

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

Сейчас системы управления базами данных являются наиболее сложными программными продуктами на рынке и  составляют его основу. В дальнейшем предполагается вести разработки по сочетанию обычных систем управления базами данных с объектно-ориентированным программированием (ООП) и интернет-технологиями.

Изначально СУБД были основаны на иерархических  и сетевых моделях данных , т. е. позволяли работать только с древовидными и графовыми структурами. В процессе развития в 1970 г. появились системы управления базами данных, предложенные Коддом (Codd), основанные на реляционной модели данных .

2. Реляционные  базы данных

 

Термин «реляционный»  произошел от английского слова  «relation» – «отношение».

В самом общем математическом смысле (как можно помнить из классического  курса алгебры множеств) отношение  – это множество

 

R = {(x 1, …, x n ) | x 1 ∈ A 1,…,x n ∈  A n },

 

где A 1, …, A n –  множества, образующие декартово произведение. Таким образом, отношение R  –  это подмножество декартова произведения множеств: A 1 × …  × A n :

 

R  ⊆ A  1 × …  × A n .

 

Например, рассмотрим бинарные отношения строгого порядка «больше» и «меньше» на множестве упорядоченных  пар чисел A  1 = A2  = {3, 4, 5}:

 

R > = {(3, 4), (4, 5), (3, 5)} ⊂  A 1 × A 2;

R < = {(5, 4), (4, 3), (5, 3)} ⊂ A 1 × A 2.

 

Эти же отношения можно  представить в виде таблиц.

Отношение «больше» R >:

 

Отношение «меньше» R <:

 

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

Нужно заметить, что эти  два рассмотренных нами отношения R > и R < не эквивалентны между собой, другими словами, таблицы, соответствующие этим отношениям, не равны друг другу.

Итак, формы представления  данных в реляционных БД могут  быть разными. В чем проявляется  эта возможность различного представления  в нашем случае? Отношения R > и R < – это множества, а множество – структура неупорядоченная, значит, в таблицах, соответствующих этим отношениям, строки можно менять между собой местами. Но в то же время элементы этих множеств – это упорядоченные наборы, в нашем случае – упорядоченные пары чисел 3, 4, 5, значит, столбцы менять местами нельзя. Таким образом, мы показали, что представление отношения (в математическом смысле) в виде таблицы с произвольным порядком строк и фиксированным числом столбцов является приемлемой, правильной формой представления отношений.

Но если рассматривать  отношения R > и R < с точки зрения заложенной в них информации, то понятно, что они эквивалентны. Поэтому в реляционных базах данных понятие «отношение» имеет несколько другой смысл, нежели отношение в общей математике. А именно оно не связано с упорядоченностью по столбцам в табличной форме представления. Вместо этого вводятся так называемые схемы отношений «строка – заголовок столбцов», т. е. каждому столбцу дается заголовок, после чего их можно беспрепятственно менять местами.

Вот как будут выглядеть  наши отношения R > и R < в реляционной базе данных.

Отношение строгого порядка (вместо отношения R >):

 

Отношение строгого порядка (вместо отношения R <):

 

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

Итак, мы видим, что при  помощи такого несложного приема, как  дополнение таблиц необходимыми заголовками, мы приходим к тому, что отношения R > и R < становятся эквивалентными друг другу.

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

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

 

Лекция  № 2. Отсутствующие данные

 

В системах управления базами данных для определения отсутствующих  данных описаны два вида значений: пустые (или Empty-значения) и неопределенные (или Null-значения).

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

1. Пустые  значения (Empty-значения)

 

Пустое значение  – это просто одно из множества возможных значений какого-то вполне определенного типа данных.

Перечислим наиболее «естественные», непосредственные пустые значения  (т. е. пустые значения, которые мы могли бы выделить самостоятельно, не имея никакой дополнительной информации):

1) 0 (нуль) – нулевое значение  является пустым для числовых  типов данных;

2) false (неверно) – является  пустым значением для логического  типа данных;

3) B’’ – пустая строка  бит для строк переменной длины;

4) “” – пустая строка  для строк символов переменной  длины.

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

Вот несколько примеров пустых строк постоянной длины:

 

1) B’0’;

2) B’000’;

3) ‘ ‘.

 

Как же в этих случаях определить, является ли строка пустой?

В системах управления базами данных для проверки на пустоту применяется  логическая функция, т. е. предикат IsEmpty (<выражение>) , что буквально означает «есть пустой». Этот предикат обычно встроен в систему управления базами данных и может применяться к выражению абсолютно любого типа. Если такого предиката в системах управления базами данных нет, то можно написать логическую функцию самим и включить ее в список объектов проектируемой базы данных.

Рассмотрим еще один пример, когда не так просто определить, пустое ли мы имеем значение. Данные типа «дата». Какое значение в этом типе считать пустым значением, если дата может варьироваться в диапазоне от 01.01.0100. до 31.12.9999? Для этого в СУБД вводится специальное обозначение для константы пустой даты {…} , если значения этого типа записывается: {ДД. ММ. ГГ} или {ГГ. ММ. ДД}. С этим значением и происходит сравнение при проверке значения на пустоту. Оно считается вполне определенным, «полноправным» значением выражения этого типа, причем наименьшим из возможных.

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

2. Неопределенные  значения ( Null-значения)

 

Слово Null  используется для обозначения неопределенных значений  в базах данных.

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

 

Итак, неопределенное значение  или Null-значение  – это:

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

2) неприменимое значение. У господина Карамазова (№ 2 в  нашей базе данных) просто не  может быть никаких паспортных  данных, потому что на момент  создания этой базы данных  или внесения в нее данных, он являлся ребенком;

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

1) с течением времени  понимание Null-значения может меняться. Например, у господина Карамазова (№ 2 в нашей базе данных) в 2014 г., т. е. по достижении совершеннолетия, Null-значение изменится на какое-то конкретное вполне определенное значение;

2) Null-значение может быть присвоено переменной или константе любого типа (числового, строкового, логического, дате, времени и т. д.);

3) результатом любых операций  над выражениями с Null-значе-ниями в качестве операндов является Null-значение;

4) исключением из предыдущего  правила являются операции конъюнкции  и дизъюнкции в условиях законов  поглощения (подробнее о законах  поглощения смотрите в п. 4 лекции  № 2).

3. Null-значения и общее правило вычисления выражений

 

Поговорим подробнее о  действиях над выражениями, содержащими Null-значения.

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

1) к арифметическим;

2) к побитным операциям  отрицания, конъюнкции и дизъюнкции (кроме законов поглощения);

3) к операциям со строками (например, конкотинации – сцепления  строк);

4) к операциям сравнения  (<, ≤, ≠, ≥, >).

Приведем примеры. В результате применений следующих операций будут  получены Null-значения:

 

3 + Null, 1/ Null, (Иванов' + '' + Null) ≔ Null

 

Здесь вместо обычного равенства  использована операция подстановки  «≔» из-за особого характера работы с Null-значениями. Далее в подобных ситуациях также будет использоваться этот символ, который означает, что выражение справа от символа подстановки может заменить собой любое выражение из списка слева от символа подстановки.

Характер Null-значений приводит к тому, что часто в некоторых выражениях вместо ожидаемого нуля получается Null-значение, например:

 

(x – x), y * (x –  x), x * 0 ≔ Null при x = Null.

 

Все дело в том, что при  подстановке, например, в выражение (x – x) значения x = Null, мы получаем выражение (Null – Null), и в силу вступает общее  правило вычисления значения выражения, содержащего Null-значения, и информация о том, что здесь Null-значение соответствует одной и той же переменной теряется.

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

К не менее неожиданным  результатам приводит использование Null-значений в операциях сравнения. Например, в следующих выражениях также получаются Null-значения вместо ожидаемых логических значений True или False:

 

(Null < Null); (Null ≤  Null); (Null = Null); (Null ≠ Null);

(Null > Null); (Null ≥ Null) ≔ Null;

 

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

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

 

(x < Null); (x ≤  Null); (x = Null); (x ≠ Null); (x > Null);

(x ≥ Null) ≔ Null;

 

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

IsNull (<выражение>) , что буквально означает «есть Null».

Логическая функция возвращает значение True, если в выражении присутствует Null или оно равно Null, и False – в  противном случае, но никогда не возвращает значение Null. Предикат IsNull может применяться к переменным и выражению любого типа. Если применять  его к выражениям пустого типа, предикат всегда будет возвращать False.

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