База данных

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

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

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

Файлы: 1 файл

1.docx

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

3. Set Null,  или правило присвоения Null-значений . Если же мы в операторе создания нашего базового отношения при объявлении внешних ключей применяем правило поддержания ссылочной целостности Set Null,  то обновление ключа родительского отношения или удаление кортежа из родительского отношения влечет за собой автоматическое присвоение Null-значений тем атрибутам внешнего ключа дочернего отношения, который Null-значения допускают. Следовательно, правило применимо, если такие атрибуты имеются.

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

«Родительское отношение»

 

Дочернее отношение

 

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

Допустим теперь, что из родительского отношения был  удален кортеж (…, 1), а кортеж (…, 2) обновлен, как и в предыдущем примере. Таким  образом, родительское отношение принимает  следующий вид:

Родительское отношение

 

Тогда с учетом того, что  при объявлении внешних ключей дочернего  отношения нами применялось правило  поддержания ссылочной целостности Set Null , дочернее отношение примет следующий вид:

Дочернее отношение

 

На кортеж (…, 1) не ссылался ни один ключ дочернего отношения, поэтому  его удаление не влечет за собой  никаких последствий.

Сам оператор создания базового отношения с использованием правила Set Null  при объявлении внешних ключей отношения выглядит следующим образом:

 

Create table  Родительское отношение

Primary_key

Integer

not Null

primary key  (Primary_key)

 

Create table  Дочернее отношение

Foreign_key

Integer

Null

foreign key  (Foreign_key) references  Родительское отношение (Primary_key)

on update Set Null

on delete Set Null

 

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

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

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

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

5. Понятие  индексов

 

Создание ключей в базовых  отношениях автоматически связано  с созданием индексов.

Дадим определение понятия  индекса.

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

Индексы в системах управления базами данных бывают двух видов:

1) простые.

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

2) составные.

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

Но, кроме деления на простые  и составные индексы, в системах управления базами данных существует деление индексов на уникальные и  неуникальные. Итак:

1) уникальные  индексы – это индексы, ссылающиеся не более чем на один атрибут.

Уникальные индексы, как  правило, соответствуют первичному ключу отношения;

2) неуникальные  индексы – это индексы, могущие соответствовать нескольким атрибутам одновременно.

Неуникальные ключи, в  свою очередь, чаще всего соответствуют  внешним ключам отношения.

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

 

 

 

Здесь соответственно Primary key – первичный ключ отношения, Foreign key – внешний ключ. Понятно, что  в этих отношениях, индекс атрибута Primary key – уникальный, так как он соответствует первичному ключу, т. е. одному атрибуту, а индекс атрибута Foreign key – неуникальный, ведь он соответствует  ключам внешним. И его значение «20»  соответствует одновременно первой и третьей строкам таблицы-отношения.

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

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

 

106 = (103)2 = 220;

 

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

 

Create index  имя индекса

On  имя базового отношения  (имя атрибута,.. );

 

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

Если требуется объявить уникальный индекс, перед словом index добавляют ключевое слово unique, и  тогда весь оператор создания в базовом  отношении индекса принимает  следующий вид:

 

Create unique index  имя индекса

On  имя базового отношения  (имя атрибута );

 

Тогда в самом общем  виде, если вспомнить правило обозначения  необязательных элементов (металингвистический  символ []), оператор создания индекса  в базовом отношении будет  выглядеть следующим образом:

 

Create [unique] index  имя индекса

On  имя базового отношения  (имя атрибута,.. );

 

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

 

Drop index  {имя базового отношения. Имя индекса },.. ;

 

Почему здесь используется уточненное имя индекса «имя базового отношения. Имя индекса »? В операторе удаления индекса всегда используется его уточненное имя, потому что имя индекса должно быть уникальным в пределах одного отношения, но не больше.

6. Модификация  базовых отношений

 

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

Какие основные необходимые  варианты модификации встречаются  чаще всего в практике проектирования баз данных? Перечислим их:

1) вставка кортежей.

Очень часто нужно в  уже сформированное базовое отношение  вставить новые кортежи;

2) обновление значений  атрибутов.

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

3) удаление кортежей.

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

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

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

 

Insert into  имя базового отношения  (имя атрибута,.. )

Values  (значение атрибута ,..);

 

Металингвистический символ «,..», поставленный после имени атрибута и значения атрибута, говорит нам, что этот оператор допускает одновременное  добавление нескольких атрибутов в  базовое отношение. В этом случае необходимо имена атрибутов и  значения атрибутов перечислять  через запятую в согласованном  порядке.

Ключевое слово into  в сочетании с общим названием оператора Insert  означает «вставить в» и показывает, в какое отношение необходимо вставить указанные в скобках атрибуты.

Ключевое слово Values  в этом операторе и означает «значения», «величины», которые и присваиваются этим вновь объявленным атрибутам;

2) теперь рассмотрим оператор обновления  значений атрибутов в базовом отношении. Этот оператор называется Update , что в переводе с английского и означает буквально «обновить». Дадим полный общий вид этого оператора в записи на псевдокоде и расшифруем ее:

 

Update  имя базового отношения

Set  {имя атрибута – значение атрибута },..

Where  условие ;

 

Итак, в первой строчке  оператора после ключевого слова Update  записывается имя базового отношения, в котором необходимо произвести обновления.

Ключевое слово Set переводится  с английского «задать», и в  этой строчке оператора указываются  имена атрибутов, которые необходимо обновить, и соответствующие новые  значения атрибутов.

В одном операторе можно  обновить сразу несколько атрибутов, что следует из применения металингвистического символа «,..».

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

3) оператор Delete , позволяющий удалять  какие-либо кортежи из базового отношения. Запишем его полный вид на псевдокоде и разъясним значение всех отдельных синтаксических единиц:

 

Delete from  имя базового отношения

Where  условие ;

 

Ключевое слово from  в сочетании с названием оператора Delete  переводится как «удалить из». И после этих ключевых слов в первой строчке оператора указывается имя базового отношения, из которого необходимо удалить какие-либо кортежи.

А во второй строчке оператора  после ключевого слова Where  («где») указывается условие, по которому отбираются кортежи, более не требующиеся в нашем базовом отношении.

 

Лекция  № 9. Функциональные зависимости

1. Ограничение  функциональной зависимости

 

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

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

Пусть нам дано отношение, содержащее данные о результатах  какой-то одной конкретной сессии. Схема этого отношения выглядит следующим образом:

 

Сессия (№ зачетной книжки , Фамилия, Имя, Отчество, Предмет , Оценка);

 

Атрибуты «№ зачетной книжки»  и «Предмет» образуют составной (так как ключом объявлены два  атрибута) первичный ключ этого отношения. Действительно, по двум этим атрибутам  можно однозначно определить значения всех остальные атрибутов.

Однако, помимо ограничения  уникальности, связанной с этим ключом, на отношение непременно должно быть наложено то условие, что одна зачетная книжка выдается обязательно одному конкретному человеку и, следовательно, в этом отношении кортежи с  одинаковым номером зачетной книжки должны содержать одинаковые значения атрибутов «Фамилия», «Имя» и  «Отчество».

 

Если у нас имеется  следующий фрагмент какой-то определенной базы данных студентов учебного заведения после какой-то сессии, то в кортежах с номером зачетной книжки 100, атрибуты «Фамилия», «Имя» и «Отчество» совпадают, а атрибуты «Предмет» и «Оценка» – не совпадают (что и понятно, ведь в них речь идет о разных предметах и успеваемости по ним). Это значит, что атрибуты «Фамилия», «Имя» и «Отчество» функционально зависят  от атрибута «№ зачетной книжки», а атрибуты «Предмет» и «Оценка» функционально не зависят.

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

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

Определение : пусть X, Y – подсхемы схемы отношения S, определяющие над схемой S схему функциональной зависимости X  → Y  (читается «X стрелка Y»). Определим ограничения функциональной зависимости inv<X  → Y>  как утверждение о том, что в отношении со схемой S любые два кортежа, совпадающие в проекции на подсхему X, должны совпадать и в проекции на подсхему Y.

Запишем это же определение  в формулярном виде:

 

Inv<X  → Y>  r (S ) = t 1, t 2 ∈ r (t 1[X ] = t 2[X ] ⇒  t 1[Y ] = t 2 [Y ]), X , Y  ⊆ S;

 

Любопытно, что в этом определении  использовано понятие унарной операции проекции, с которым мы сталкивались раньше. Действительно, как еще, если не использовать эту операцию, показать равенство друг другу двух столбцов таблицы-отношения, а не строк? Поэтому мы и записали в терминах этой операции, что совпадение кортежей в проекции на какой-то атрибут или несколько атрибутов (подсхему X) непременно влечет за собой совпадение этих же столбцов-кортежей и на подсхеме Y в том случае, если Y функционально зависит от X.

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