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

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

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

2. Ссылочная целостность и РСУБД

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

3. Ссылочная целостность и ООСУБД

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

Эти пары взаимно согласованных указателей называются в ObjectStore инверсными партнерами (inverse members). В ObjectStore поддерживается целостность инверсных партнеров; при изменении одного партнера ObjectStore прозрачным образом изменяет другого партнера. Аналогично, при удалении объекта ObjectStore автоматически обновляет всех инверсных партнеров, чтобы предотвратить появление «висящих» ссылок.

4. Ссылочная целостность и языки

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

Например, объект Занятость (Employment) ссылается на объекты Человек (Person) и Компания (Company). Невозможно иметь дело с изолированной Занятостью. Если удаляется Человек, то должны быть удалены и связанные с ним объекты Занятость, потому что иначе образуются «висящие» ссылки на объект. Нельзя создать объект Занятость без объектов Человек и Компания.

Как демонстриуется в [4], в языке программирования можно поддерживать ссылочную целостность. В GE R&D (General Electric Corporate Research and Development) Рэмбо (Rumbaugh) реализовал объектно-ориентиованный язык программирования DSM с семантической поддержкой зависимостей (называемых в статье отношениями) между объектами.

5. Ссылочная целостность и UML

При использовании UML за счет семантической поддержки ассоциаций также возникает ссылочная целостность. Ассоциация (association) – это описание группы соединений (link) с общей структурой и семантикой. Соединение – это физическая или концептуальная связь между объектами.

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

6. Используется ли ссылочная целостность?

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

На практике ссылочная целостность обеспечивается редко. Насколько нам известно, она не поддерживается в большинстве программ, поскольку в языках программирования отсутствует соответствующий механизм, что затрудняет поддержку. Однако проблема является более глубокой. В большинстве реализаций реляционных СУБД также отсутствует ссылочная целостность. Даже в тех случаях, когда в РСУБД поддерживается механизм ссылочной целостности, многие разработчики его не используют. Наши исследования в области обратной инженерии [2] показали, что 90% разработчиков реляционных баз данных не используют ссылочную целостность в своих приложениях.

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

7. Заключение

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

8. Литература

[1] Michael Blaha and William Premerlani. Object-Oriented Modeling and Design for Database Applications. Upper Saddle River, New Jersey: Prentice Hall, 1998.

[2] Michael Blaha. A retrospective on industrial database reverse engineering projects—part 2. Eighth Working Conference on Reverse Engineering, October 2001, Stuttgart, Germany, 147–153.

[3] Jim Melton and Alan R. Simon. Understanding the New SQL: A Complete Guide. San Francisco, California: Morgan Kaufmann, 1993.

[4] James Rumbaugh. Relations as semantic constructs in an object-oriented language. OOPSLA’87 as ACM SIGPLAN 22, 12 (Dec. 1987), 466–481.

Об авторе

* Не могу не отметить наивность автора, связанную с его отдаленностью от аспектов реализации СУБД. Насколько мне известно, испокон веков, во всех развитых РСУБД, начиная с проекта System R, при объявлении в таблице возможных и внешних ключей система автоматически создавала индексы (уникальные для возможных ключей). (прим. переводчика).

Источник

Запросы модификации данных

Введение в понятие «целостность данных»

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Уровень поддержания целостности данных в разных системах существенно варьируется.

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

К недостаткам хранения ограничений целостности на сервере можно отнести:

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

Источник

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

что такое ссылочная целостность. Смотреть фото что такое ссылочная целостность. Смотреть картинку что такое ссылочная целостность. Картинка про что такое ссылочная целостность. Фото что такое ссылочная целостность

что такое ссылочная целостность. Смотреть фото что такое ссылочная целостность. Смотреть картинку что такое ссылочная целостность. Картинка про что такое ссылочная целостность. Фото что такое ссылочная целостность

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

Содержание

Определение

Связи между данными, хранимыми в разных отношениях, в реляционной БД устанавливаются с помощью использования внешних ключей — для установления связи между кортежем из отношения A с определённым кортежем отношения B в предусмотренные для этого атрибуты кортежа отношения A записывается значение первичного ключа (а в общем случае значение потенциального ключа) целевого кортежа отношения B. Таким образом, всегда имеется возможность выполнить две операции:

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

Дана пара отношений A и B, связанных внешним ключом. Первичный ключ отношения B — атрибут B.key. Внешний ключ отношения A, ссылающийся на B — атрибут A.b. Ссылочная целостность для пары отношений A и B имеет место тогда, когда выполняется условие: для каждого кортежа отношения A существует соответствующий кортеж отношения B, то есть кортеж, у которого (B.key = A.b).

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

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

Пример

что такое ссылочная целостность. Смотреть фото что такое ссылочная целостность. Смотреть картинку что такое ссылочная целостность. Картинка про что такое ссылочная целостность. Фото что такое ссылочная целостность

Так, в примере реляционная БД, состоящая из таблиц Address и Street, обеспечивает хранение адресов. При этом основная таблица, — Address, — содержит непосредственно номер дома и квартиры, а вместо имени улицы в поле Street имеет внешний ключ, ссылающийся на таблицу Street — справочник улиц. Очевидно, что полноценный адрес должен быть представлен двумя связанными записями в обеих названных таблицах, что технически выражается в условии: для любой записи таблицы Address в таблице Street должна существовать соответствующая запись, то есть запись со (Street.Key = Address.Street). Чтобы получить список полных адресов из таблиц такой структуры, когда в них соблюдается ссылочная целостность, достаточно применить к данным таблицам SQL-запрос:

В данном примере, однако, ссылочная целостность нарушена. Две записи таблицы Address (Key = 887 и Key = 994) имеют в поле Street так называемые «висящие» ссылки — значения, которым не соответствуют записи в таблице Street (эти ссылки показаны красным цветом). Из-за этого результат вышеприведённого запроса не будет содержать этих двух записей — для них условие запроса не выполнится. И ещё одна запись не будет выбрана вышеприведённым запросом — запись таблицы Address с (Key = 85). Это вариант намеренного (и, в некоторых случаях, легального) нарушения ссылочной целостности — в поле внешнего ключа записан NULL (показано голубым цветом). Чтобы получить список всех адресов, даже тех, у которых не указана улица, необходимо использовать открытое соединение, в одном из вариантов синтаксиса записываемое так:

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

Поддержание ссылочной целостности в БД

Причины нарушений

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

Пустые внешние ключи

Возможна ситуация, когда внешний ключ вместо ссылки на существующую запись в таблице БД содержит «отсутствующее значение» NULL. Такое положение можно трактовать как отсутствие какой-то части объекта. Хотя с точки зрения чистой теории это недопустимо, на практике иногда бывает удобно разрешить использование пустых внешних ключей. Чтобы корректно работать с группами связанных таблиц, допускающих пустые внешние ключи, используется специфическая операция языка SQL — открытое соединение (другое название — «внешнее соединение», англ. outer join).

Ссылочная целостность на триггерах

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

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

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

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

Ссылочная целостность на внешних ключах

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

Источник

Как ссылочная целостность обеспечивает согласованность базы данных

что такое ссылочная целостность. Смотреть фото что такое ссылочная целостность. Смотреть картинку что такое ссылочная целостность. Картинка про что такое ссылочная целостность. Фото что такое ссылочная целостность

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

Основной ключ

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

Иностранный ключ

Пример правил ссылочной целостности

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

Вы, вероятно, не хотите каскадно удалять сотрудников, когда менеджеры уходят. Большая часть работы с базами данных на самом деле не удаляет записи, а деактивирует их. Например, таблицы персонала часто имеют флаг «активный», чтобы указать текущую занятость. Когда менеджер уходит, его или ее «активный флаг» устанавливается в ноль — запись не удаляется. Затем, когда назначается новый менеджер, записи сотрудников обновляются, чтобы отразить новое значение внешнего ключа нового менеджера.

Преимущества ограничений ссылочной целостности

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

Источник

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

Ссылочная целостность (англ. referential integrity) — корректность значений внешних ключей реляционной базы данных.

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

Определение

Связи между данными, хранимыми в разных отношениях, в реляционной БД устанавливаются с помощью использования внешних ключей — для установления связи между кортежем из отношения A с определённым кортежем отношения B в предусмотренные для этого атрибуты кортежа отношения A записывается значение первичного ключа (а в общем случае значение потенциального ключа) целевого кортежа отношения B. Таким образом, всегда имеется возможность выполнить две операции:

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

Дана пара отношений A и B, связанных внешним ключом. Первичный ключ отношения B — атрибут B.key. Внешний ключ отношения A, ссылающийся на B — атрибут A.b. Ссылочная целостность для пары отношений A и B имеет место тогда, когда выполняется условие: для каждого кортежа отношения A существует соответствующий кортеж отношения B, то есть кортеж, у которого (B.key = A.b).

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

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

Поддержание ссылочной целостности в БД

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *