Ограничения целостности бд. Обеспечение целостности баз данных. Концептуальные и физические ER-модели

Целостность – система правил, используемая для связи записей в связной таблице
Поддержка целостности – предотвращение некорректного ввода данных в таблицах
Ограничения определяют св-ва объектов предметную область и их взаимосвязь
Целостность
1По отношению 2По ссылкам
3Определяемая пользователем
По отношению - Ограничения только на допустимые значения отдельного отношения
Средством, позволяющим однозначно идентифицировать кортежи отношения, являются потенциальные ключи отношения.
Потенциальный ключ отношения - это набор атрибутов отношения, обладающий свойствами уникальности и неизбыточности. Доступ к конкретному кортежу можно получить, лишь зная значение потенциального ключа для этого кортежа.
Потенциальный ключ, состоящий из одного атрибута, называется простым. Потенциальный ключ, состоящий из нескольких атрибутов, называется составным.
Отношения связываются друг с другом при помощи внешних ключей.
Внешний ключ отношения - это набор атрибутов отношения, содержащий ссылки на потенциальный ключ другого (или того же самого) отношения. Отношение, содержащее потенциаль-ный ключ, на который ссылается некоторый внешний ключ, называется родительским отношением. Отношение, содержащее внешний ключ, называется дочерним отношени-ем.
Внешний ключ не обязан обладать свойством уникальности. Поэтому, одному кортежу родительского отношения может соответствовать несколько кортежей дочернего отношения. Такой тип связи между отношениями называется "один-ко-многим".
Связи типа "много-ко-многим" реализуются использованием нескольких отношений типа "один-ко-многим".
В любой реляционной базе данных должны выполняться два ограничения:
1Целостность сущностей
2Целостность внешних ключей
Правило целостности сущностей состоит в том, что атрибуты, входящие в состав некоторого потенциального ключа не могут принимать null-значений.
Правило целостности внешних ключей состоит в том, что внешние ключи не должны ссылаться на отсутствующие в родительском отношении кортежи, т.е. внешние ключи должны быть корректны.
Ссылочную целостность могут нарушить операции, изменяю-щие состояние базы данных. Такими операциями являются операции вставки, обновления и удаления кортежей.
Для поддержания ссылочной целостности обычно используют-ся основные стратегии:
1RESTRICT (ОГРАНИЧИТЬ) - не разрешать выполнение операции, приводящей к нарушению ссылочной целостности.
2CASCADE (КАСКАДИРОВАТЬ) - разрешить выполнение требуемой операции, но внести каскадные изменения в другие отношения так, чтобы не допустить нарушения ссылочной целостности.
3SET NULL (УСТАНОВИТЬ В NULL) - все некорректные значения внешних ключей изменять на null-значения.
4SET DEFAULT (УСТАНОВИТЬ ПО УМОЛЧАНИЮ) - все некорректные значения внешних ключей изменять на некоторое значение, принятое по умолчанию.
Классификация ограничений целостности по способам реализации
Каждая система обладает своими средствами поддержки ограничений целостности. Различают два способа реализации:
1Декларативная поддержка ограничений целостности.
2Процедурная поддержка ограничений целостности.
Декларативная поддержка ограничений целостности заключается в определении ограничений средствами языка определения данных. Обычно средства декларативной поддержки целостности определяют ограничения на значения доменов и атрибутов, целостность сущностей и ссылочную целостность.
Процедурная поддержка ограничений целостности заключается в использовании триггеров и хранимых процедур.

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


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


  • Нарушение ссылочной целостности Операции, могущие нарушить ссылочную целостность Ссылочная целостность может нарушиться в результате операций...


  • Целостность сущностей Т.к. потенциальные ключи фактически служат идентификатора-ми объектов предметной области (т.е. предназначены для различения объектов)...


  • Другим важным свойством информации является ее целостность (integrty). Информация целостна, если она в любой момент времени правильно (адекватно)...


  • 1. по аспекту информационной безопасности (доступность, целостность , конфиденциальность), против которого угрозы направлены в первую очередь


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

Выполнение операторов модификации данных в таблицах базы данных 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. принадлежность набору значений (пол "М" или "Ж").

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Термин «целостность» используется для описания точности и корректности (или непротиворечивости) данных, хранящихся в базе данных.

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

Ограничения целостности могут быть любой степени сложности. В ряде случаев дополнительные разные ограничения называют бизнес-правилами. Когда речь идет об элементарных ограничениях, то здесь используется ключевое слово CHECK (контроль правильности ввода данных, соответствия этих данных другим…), их называют элементарными, они чаще всего бывают жестко вписаны. Расширенные правила могут включать вопросы целостности между отдельными таблицами, например, «нет детей без родителей». А бизнес-правила могут касаться конкретных сфер применения баз данных (например, у бухгалтерской базы данных свои, у другой другие …). При этом сами ограничения могут быть установлены на сервере, на клиенте или на промежуточных программных средствах (middleware).

А) Рассмотрим вариант «на сервере », т.е. ограничения размещают в виде кода на сервере. В этом случае данные самостоятельно защищаются от вмешательства и случайного стирания, и все клиенты автоматически подчиняются этим ограничениям. Это приводит к тому, что сами клиентские приложения могут быть более простыми, поскольку в них уже не надо закладывать ограничений. Во-вторых, выполнение ограничений на сервере быстрее, т.к. их не надо высылать на сервер, а надо только прислать ошибку. Однако есть определенные проблемы, связанные с тем, что язык SQL не так хорош, по сравнению с универсальными языками, и там не так просто хитрые ограничения сделать. По своей сути ограничения хранятся в системных таблицах базы данных, у них обычно имеются либо автоматически создаваемые, либо создаваемые пользователем имена (последний вариант лучше, т.к. если автоматически, то идут номера, в которых трудно найти нужное ограничение). В InterBase автоматически они называются integer _№. К недостаткам также можно отнести невозможность клиентского приложения реагировать на некоторые ошибочные ситуации (Например, проблемы с сетью).

Б) При размещении ограничений на клиенте, ввиду универсальных языков с богатыми библиотеками и возможностями, можно создавать очень сложные и гибкие ограничения. Можно встраивать ограничения в визуальные компоненты, создавать новые классы, содержащие эти ограничения и т.д. Но это приводит к тому, что такого рода ограничения надо распространять на разные клиентские приложения, выполняющие разную роль, во-вторых, это требует более мощных клиентских станций, что нарушает философию клиент-серверных систем (когда сервер должен быть мощным, а клиент – простеньким), и в таких случаях трудно просмотреть все ограничения, поскольку они разбросаны по разным станциям. К недостаткам такого рода удобных и гибких возможностей можно отнести то, что в разных языках такого рода ограничения выполняются по-разному, и стандартов на создание таких ограничений нет, поэтому многое зависит от знаний и умений программиста, использующего данный язык программирования. Чем больше квалификация, тем хитрее ограничение он может написать. С базами данных проще, там язык более или менее стандартный, поэтому понять суть ограничения может любой, кто знает этот язык.

В) Размещение ограничений на уровне промежуточных средств. К промежуточным средствам относятся такие системы как ODBC, GDBC, различные API, которые предоставляют унифицированный доступ к базам данных (OLE DB…). Здесь тоже есть определенные плюсы и минусы. Минусы прежде всего связаны с тем, что, несмотря на то, что таких API стало много, тем не менее достаточно сильно развитых средств создания ограничений мало, во-вторых, все эти API обычно привязаны к операционной системе (базы данных как правило делают так, чтоб они и там, и там могли работать, а вот эти промежуточные средства – обычно принадлежность либо UNIX, либо Windows, либо еще чего-нибудь).

Типы (виды) условий целостности данных:

1. обязательность данных – как только вы войдете в набор данных того или иного поля, пока не введете какие-либо данные, вас система из средства набора не выпустит (NOT NULL).
2. проверка на правильность (validity checking)– проверка диапазона значений (правильность введения даты, размера чисел)
3. целостность (entity integrity) – соответствие внешнего ключа и primary key
4. ссылочная целостность (referent integrity) – как правило, проверяют в двух местах: на клиенте, на сервере.
5. непротиворечивость (business правила) – деловые правила, зависит от конкретных СУБД.

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

В 1986 году фирма «say base» ввело понятие «триггера», что позволило включить (перенести) написание деловых правил на сервер и, следовательно, уменьшить объем прикладных программ.

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



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: