База данных

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

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

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

Файлы: 1 файл

1.docx

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

Флажок допустимости Null-значений (Null | not Null) запрещает (not Null) или, наоборот, разрешает (Null) появление Null-значений среди значений атрибутов.

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

 

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

Курс

integer

check  (1 <= Курс and Курс <= 5);

Not Null;

 

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

Значения по умолчанию (default  (значение по умолчанию )) используются при вставке кортежа в отношения, если в операторе вставки значения атрибутов явно не заданы.

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

Теперь рассмотрим определение виртуального атрибута  в операторе создания базового отношения.

Как мы уже говорили ранее, задание виртуального атрибута заключается  в задании формул его вычисления через другие базовые атрибуты. Рассмотрим пример объявления виртуального атрибута «Стоимость Руб.» в виде формулы, зависящей от базовых атрибутов  «Вес Кг» и «Цена Руб. за Кг».

 

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

Вес Кг

тип значений базового атрибута Вес  Кг

check  (ограничение значения атрибута Вес Кг )

not Null

default  (значение по умолчанию )

Цена Руб. за Кг

тип значений базового атрибута Цена Руб. за Кг

check  (ограничение значения атрибута Цена Руб. за Кг )

not Null

default  (значение по умолчанию )

Стоимость Руб.

as  (Вес Кг * Цена Руб. за Кг)

 

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

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

Рассмотрим пример, иллюстрирующий механизм работы с ограничениями  кортежей:

 

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

min Вес Кг

тип значений базового атрибута min Вес  Кг

check  (ограничение значения атрибута min Вес Кг )

not Null

default  (значение по умолчанию )

max Вес Кг

тип значений базового атрибута max Вес Кг

check  (ограничение значения атрибута max Вес Кг )

not Null

default  (значение по умолчанию )

check  (0 < min Вес Кг and  min Вес Кг < max Вес Кг);

 

Таким образом, применение ограничения  к кортежу сводится к подстановке  значений кортежа вместо имен атрибутов.

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

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

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

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

 

Drop table  имя базового отношения ;

 

3. Ограничение  целостности по состоянию

 

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

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

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

Что это означает? Это означает, что ограничения целостности  зависят:

1) на уровне атрибута  – от значений атрибута;

2) на уровне кортежа  – от значений кортежа, т.  е. от значений нескольких атрибутов;

3) на уровне отношений  – от отношения, т. е. от  нескольких кортежей;

4) на уровне базы данных  – от нескольких отношений.

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

Итак, поддержка ограничений  целостности может быть двух видов:

1) процедурной , т. е. созданной при помощи написания программного кода;

2) декларативной , т. е. созданной путем объявлений тех или иных ограничений для каждого из названных выше вложенных понятий.

Декларативная поддержка  ограничений целостности реализуется  в контексте оператора Create создания базового отношения. Поговорим об этом подробнее. Начнем рассмотрение совокупности ограничений снизу нашей иерархической  лестницы реляционных объектов данных, т. е. с понятия атрибута.

Ограничение уровня атрибута  включает в себя:

1) ограничения типа значений  атрибута.

Например, условие целочисленности  значений, т. е. условие integer для атрибута «Курс» из одного из рассмотренного ранее  базового отношения;

2) ограничение значений  атрибута, записываемое как условие,  зависящее от имени атрибута.

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

 

check  (1 <= Курс and Курс <= 5);

 

3) ограничение уровня атрибутов  включает в себя ограничения  Null-значений, определяемые уже знакомым нам флажком допустимости (Null) или, наоборот, недопустимости (not Null) Null-значений.

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

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

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

 

check  (0 < min Вес Кг and  min Вес Кг < max Вес Кг);

 

И, наконец, последнее значимое в контексте ограничения целостности  по состоянию понятие – это  понятие уровня отношений. Как мы уже говорили раньше, ограничение уровня отношения  включает в себя ограничение значений первичного (primary key ) и кандидатного (candidate key ) ключей.

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

4. Ограничения  ссылочной целостности

 

Итак, ограничение уровня баз данных включает ограничение  ссылочной целостности внешних  ключей (foreign key ). Коротко мы уже упоминали об этом, когда говорили об ограничениях ссылочной целостности при создании базового отношения и внешних ключах. Теперь настало время поговорить об этом понятии более подробно.

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

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

Кортежи дочернего отношения, нарушающие это условие, называются висящими .

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

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

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

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

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

Проиллюстрируем применение этого правила следующим примером.

Пусть даны два отношения:

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

 

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

 

Мы видим, что кортежи  дочернего отношения (2, …) и (2, …) ссылаются  на кортеж (…, 2) родительского отношения, а кортеж (3, …) дочернего отношения  ссылается на кортеж (…, 3) родительского  отношения. Кортеж (100, …) дочернего  отношения является висящим, он недопустим.

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

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

 

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 Restrict

on delete Restrict

 

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

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

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

 

и

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

 

Допустим, мы в таблице, задающей отношение «Родительское отношение» обновим некоторые кортежи, а  именно заменим кортеж (…, 2) на кортеж (…, 20), т. е. получим новое отношение:

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

 

И пусть при этом в операторе  создания нашего базового отношения  «Дочернее отношение» при объявлении внешних ключей мы использовали правило  поддержания ссылочной целостности Cascade , т. е. оператор создания наших базовых отношений выглядит следующим образом:

 

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 Cascade

on delete Cascade

 

Тогда что же произойдет с  отношением дочерним при обновлении родительского отношения указанным  выше образом? Оно примет следующий  вид:

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

 

Таким образом, действительно, правило Cascade  обеспечивает каскадное обновление всех кортежей дочернего отношения в ответ на обновления отношения родительского.

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