Обеспечение целостности баз данных. Базы данных

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

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

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

Во-первых, это поддержка структурной целостности, которая трактуется как то, что реляционная СУБД должна допускать работу только с однородными структурами данных типа «реляционное отношение». При этом понятие «реляционного отношения» должно удовлетворять всем ограничениям, накладываемым на него в классической теории реляционной БД. Отсутствие дубликатов кортежей (строки отношений), соответственно, обязательное наличие первичного ключа (один или несколько столбцов (атрибутов), которые однозначно идентифицируют каждую запись в таблице, т.е. позволяют четко отличить одну запись от другой), отсутствие понятия упорядоченности кортежей.

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

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

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

В-третьих, это поддержка ссылочной целостности (Declarative Referential Integrity, DRI), означает обеспечение одного из заданных принципов взаимосвязи между экземплярами кортежей взаимосвязанных отношений:

· кортежи подчиненного отношения уничтожаются при удалении кортежа основного отношения, связанного с ним;

· кортежи основного отношения модифицируются при удалении кортежа основного отношения, связанного с ним, при этом на месте ключа родительского отношения ставится неопределенное Null значение.

Ссылочная целостность обеспечивает поддержку непротиворечивого состояния БД в процессе модификации данных при выполнении операций добавления или удаления.

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

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

Семантическая поддержка может быть обеспечена двумя путями:

· декларативный, выполняемый средствами языка SQL;

· процедурный, выполняемый посредством триггеров и хранимых процедур.

Декларативный путь связан с наличием механизмов в рамках СУБД, обеспечивающих проверку и выполнение ряда декларативно заданных правил-ограничений, называемых чаще всего «бизнес-правилами» (Business Rules) или декларативными ограничениями целостности.

Выделяются следующие виды декларативных ограничений целостности:

· ограничения целостности атрибута: значение по умолчанию, задание обязательности или необязательности значений (Null), задание условий на значения атрибутов. Задание значения по умолчанию означает, что каждый раз при вводе новой строки в отношение, при отсутствии данных в указанном столбце этому атрибуту присваивается именно значение по умолчанию;

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

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

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

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

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

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

Во-первых, это поддержка структурной целостности, которая трактуется как то, что реляционная СУБД должна допускать работу только с однородными структурами данных типа «реляционное отношение». При этом понятие «реляционного отношения» должно удовлетворять всем ограничениям, накладываемым на него в классической теории реляционной БД. Отсутствие дубликатов кортежей (строки отношений), соответственно, обязательное наличие первичного ключа (один или несколько столбцов (атрибутов), которые однозначно идентифицируют каждую запись в таблице, т.е. позволяют четко отличить одну запись от другой), отсутствие понятия упорядоченности кортежей.

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

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

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

В-третьих, это поддержка ссылочной целостности (Declarative Referential Integrity, DRI), означает обеспечение одного из заданных принципов взаимосвязи между экземплярами кортежей взаимосвязанных отношений:

    кортежи подчиненного отношения уничтожаются при удалении кортежа основного отношения, связанного с ним;

    кортежи основного отношения модифицируются при удалении кортежа основного отношения, связанного с ним, при этом на месте ключа родительского отношения ставится неопределенное Null значение.

Ссылочная целостность обеспечивает поддержку непротиворечивого состояния БД в процессе модификации данных при выполнении операций добавления или удаления.

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

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

Семантическая поддержка может быть обеспечена двумя путями:

    декларативный, выполняемый средствами языка SQL;

    процедурный, выполняемый посредством триггеров и хранимых процедур.

Декларативный путь связан с наличием механизмов в рамках СУБД, обеспечивающих проверку и выполнение ряда декларативно заданных правил-ограничений, называемых чаще всего «бизнес-правилами» (Business Rules) или декларативными ограничениями целостности.

Выделяются следующие виды декларативных ограничений целостности:

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

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

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

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

Целостность данных в Access

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

    связанное поле главной таблицы является ключевым полем или имеет уникальный индекс;

    связанные поля имеют один тип данных;

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

Для соблюдения этих правил в Access отслеживаются и блокируются следующие действия:

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

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

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

Выполнение операторов модификации данных в таблицах базы данных INSERT , DELETE и UPDATE может привести к нарушению целостности данных и их корректности, т.е. к потере их достоверности и непротиворечивости.

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

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

  • обязательные данные;
  • ограничения для доменов полей;
  • корпоративные ограничения;
  • целостность сущностей;
  • ссылочная целостность .

Обязательные данные

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

Ограничения для доменов полей

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

Корпоративные ограничения целостности

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

Целостность сущностей

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

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

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

Ссылочная целостность

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

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

Существует три разновидности связи между таблицами базы данных:

  • "один-ко-многим";
  • "один-к-одному";
  • "многие-ко-многим".

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

Связь "один-ко-многим" наиболее распространена для реляционных баз данных. Она позволяет моделировать также иерархические структуры данных.

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

Отношение "многие-ко-многим" имеет место в следующих случаях:

  • одной записи в родительской таблице дочерней таблице ;
  • одной записи в дочерней таблице соответствует более одной записи в родительской таблице .

Считается, что всякая связь "многие-ко-многим" может быть заменена на связь "один-ко-многим" (одну или несколько).

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

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

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

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

  1. Вставка новой строки в дочернюю таблицу . Для обеспечения ссылочной целостности необходимо убедиться, что значение внешнего ключа новой строки дочерней таблицы первичного ключа одной из строк родительской таблицы .
  2. Удаление строки из дочерней таблицы . Никаких нарушений ссылочной целостности не происходит.
  3. Обновление внешнего ключа в строке дочерней таблицы . Этот случай подобен описанной выше первой ситуации. Для сохранения ссылочной целостности необходимо убедиться, что значение внешнего ключа в обновленной строке дочерней таблицы равно пустому значению либо некоторому конкретному значению, присутствующему в поле первичного ключа одной из строк родительской таблицы .
  4. Вставка строки в родительскую таблицу . Такая вставка не может вызвать нарушения ссылочной целостности . Добавленная строка просто становится родительским объектом, не имеющим дочерних объектов.
  5. Удаление строки из родительской таблицы . Ссылочная целостность окажется нарушенной, если в дочерней таблице будут существовать строки, ссылающиеся на удаленную строку родительской таблицы . В этом случае может использоваться одна из следующих стратегий:
    • NO ACTION . Удаление строки из родительской таблицы запрещается, если в дочерней таблице существует хотя бы одна ссылающаяся на нее строка.
    • CASCADE . При удалении строки из родительской таблицы автоматически удаляются все ссылающиеся на нее строки дочерней таблицы . Если любая из удаляемых строк дочерней таблицы выступает в качестве родительской стороны в какой-либо другой связи, то операция удаления применяется ко всем строкам дочерней таблицы этой связи и т.д. Другими словами, удаление строки родительской таблицы автоматически распространяется на любые дочерние таблицы .
    • SET NULL . При удалении строки из родительской таблицы во всех ссылающихся на нее строках дочернего отношения в поле внешнего ключа , соответствующего первичному ключу удаленной строки, записывается пустое значение. Следовательно, удаление строк из родительской таблицы вызовет занесение пустого значения в соответствующее поле дочерней таблицы . Эта стратегия может использоваться, только когда в поле внешнего ключа дочерней таблицы разрешается помещать пустые значения.
    • SET DEFAULT . При удалении строки из родительской таблицы в поле внешнего ключа всех ссылающихся на нее строк дочерней таблицы автоматически помещается значение, указанное для этого поля как значение по умолчанию. Таким образом, удаление строки из родительской таблицы вызывает помещение принимаемого по умолчанию значения в поле внешнего ключа всех строк

Концептуальные и физические ER-модели

Разработанный выше пример ER-диаграммы является примером концептуальной диаграммы. Это означает, что диаграмма не учитывает особенности конкретной СУБД. По данной концептуальной диаграмме можно построить физическую диаграмму, которая уже будут учитываться такие особенности СУБД, как допустимые типы и наименования полей и таблиц, ограничения целостности и т.п.

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

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

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

Це́лостность ба́зы да́нных (database integrity) - соответствие имеющейся в базе данных информации её внутренней логике, структуре и всем явно заданным правилам. Каждое правило, налагающее некоторое ограничение на возможное состояние базы данных, называется ограничением целостности (integrity constraint). Примеры правил: вес детали должен быть положительным; количество знаков в телефонном номере не должно превышать 25; возраст родителей не может быть меньше возраста их ребёнка и т.д.

Задача аналитика и проектировщика базы данных - возможно более полно выявить все имеющиеся ограничения целостности и задать их в базе данных.



Целостность БД не гарантирует достоверности содержащейся в ней информации, но обеспечивает по крайней мере правдоподобность этой информации, отвергая заведомо невероятные, невозможные значения. Таким образом, не следует путать целостность БД с достоверностью БД. Достоверность (или истинность) есть соответствие фактов, хранящихся в базе данных, реальному миру. Очевидно, что для определения достоверности БД требуется обладание полными знаниями как о содержимом БД, так и о реальном мире. Для определения целостности БД требуется лишь обладание знаниями о содержимом БД и о заданных для неё правилах. Поэтому СУБД может (и должна) контролировать целостность БД, но принципиально не в состоянии контролировать достоверность БД. Контроль достоверности БД может быть возложен только на человека, да и то в ограниченных масштабах, поскольку в ряде случаев люди тоже не обладают полнотой знаний о реальном мире.

Итак, БД может быть целостной, но не достоверной. Возможно и обратное: БД может быть достоверной, но не целостной. Последнее имеет место, если правила (ограничения целостности) заданы неверно.

Целостность (от англ. integrity – нетронутость, неприкосновенность, сохранность, целостность) – понимается как правильность данных в любой момент времени. Но эта цель может быть достигнута лишь в определенных пределах: СУБД не может контролировать правильность каждого отдельного значения, вводимого в базу данных (хотя каждое значение можно проверить на правдоподобность). Например, нельзя обнаружить, что вводимое значение 5 (представляющее номер дня недели) в действительности должно быть равно 3. С другой стороны, значение 9 явно будет ошибочным и СУБД должна его отвергнуть. Однако для этого ей следует сообщить, что номера дней недели должны принадлежать набору (1,2,3,4,5,6,7).

Поддержание целостности базы данных может рассматриваться как защита данных от неверных изменений или разрушений (не путать с незаконными изменениями и разрушениями, являющимися проблемой безопасности). Современные СУБД имеют ряд средств для обеспечения поддержания целостности (так же, как и средств обеспечения поддержания безопасности).

Выделяют три группы правил целостности:

- Целостность по сущностям. Не допускается, чтобы какой-либо атрибут, участвующий в первичном ключе, принимал неопределенное значение. (Например: Каждый сотрудник имеет уникальный табельный номер)

- Целостность по ссылкам . Значение внешнего ключа должно либо: быть равным значению первичного ключа цели; быть полностью неопределенным, т.е. каждое значение атрибута, участвующего во внешнем ключе должно быть неопределенным. (Например: Сотрудник обязан числиться в одном отделе)

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

1. уникальность тех или иных атрибутов,

2. диапазон значений (экзаменационная оценка от 2 до 5),

3. принадлежность набору значений (пол "М" или "Ж").

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

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

Виды ограничений

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

банк база данный case технология

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

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

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

  • 1. Поддержка структурной целостности. Это означает, что любая реляционная БД строится только над структурами данных, удовлетворяющих свойствам реляционных отношений.
  • 2. Поддержка языковой целостности. Любая реляционная СУБД должна иметь возможность описывать данные и манипулировать ими в формате не ниже стандарта SQL. Это означает, что доступ к информации БД может быть выполнен только при помощи операторов SQL.
  • 3. Поддержка ссылочной целостности. Этот принцип гласит, что при изменении данных во взаимосвязанных отношениях могжет произойти только одно из следующих действий:
    • - кортежи подчиненного отношения должны уничтожаться при удалении кортежа основного отношения, связанного с ними;
    • - кортежи основного отношения можно удалять только при отсутствии связанных с ними кортежей подчиненного отношения;
    • - кортежи подчиненного отношения при удалении кортежа основного отношения, связанного с ними, не удалаются, но модифицируются таким образом, что на месте ключа родительского отношения устанавливается значение NULL.

Ссылочная целостность поддерживает БД в непротиворечивом состоянии при модификации данных в процессе добавления или удаления.

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

Ограничения семантической целостности могут задаваться либо декларативным (при описании БД), либо процедурным (в программах обработки данных) путями. Имеются следующие виды декларативных ограничений целостности:

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

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

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

Тип значения определяет допустимые для данного атрибута символы (числа, буквы, логические переменные и т.д.), а формат устанавливает более жесткие ограничения на возможные значения (например, формат “дата”).

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

Признак определенного значения (обязательность заполнения) не допускает пустого значения атрибута.

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

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

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

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

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

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

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

  • 5. Ограничения целостности алгоритмических зависимостей. Если в БД имеются производные данные, которые получаются в результате каких-то операций, выполненных над другими данными (исходные данные), то изменение производных данных либо должно быть следствием изменения исходных данных, либо вообще запрещено.
  • 6. Запрет на обновления. Этот запрет может относиться к любому объекту - атрибуту, строке или таблице. Так, во многих СУБД этот запрет распространяется на значения первичных ключей.

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

По режиму проверки корректности БД проверка на ограничение целостности может выполняться в момент осуществления операций над данными (оперативный режим) или независимо в заданный момент времени (аудит БД).

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

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

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

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

Ряд ограничений целостности следует непосредственно из описания предметной области в рамках ER-модели.

  • 1. Ограничение на уникальность. Ключи таблиц являются уникальными идентификаторами.
  • 2. Между первичными ключами (уникальными идентификаторами) и другими атрибутами имеются функциональные зависимости.
  • 3. При наличии связи между сущностями могут присутствовать ограничения по связи. Тип связи и класс ее принадлежности определяет ограничение целостности на связь между сущностями.
  • 4. Для статических свойств сущности можно устанавливать запрет на обновление, Если свойством является некоторое условие, то значения атрибута может быть неопределенными.

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