Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Пример базы данных, в которой не реализована ссылочная целостность . В этом примере artist_idв таблице альбома есть значение внешнего ключа ( ), которое ссылается на несуществующего исполнителя - другими словами, есть значение внешнего ключа без соответствующего значения первичного ключа в указанной таблице. То , что произошло здесь в том , что там был художник назвал « Aerosmith », с artist_idиз 4, который был удален из таблицы художника. Однако в альбоме « Eat the Rich » упоминается именно этот исполнитель. При принудительной ссылочной целостности это было бы невозможно.

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

Для сохранения ссылочной целостности в реляционной базе данных любой столбец в базовой таблице , объявленный внешним ключом, может содержать только значения NULL или значения из первичного ключа родительской таблицы или ключа-кандидата . [2] Другими словами, когда используется значение внешнего ключа, оно должно ссылаться на действительный существующий первичный ключ в родительской таблице. Например, удаление записи, содержащей значение, на которое ссылается внешний ключ в другой таблице, нарушит ссылочную целостность. Некоторые системы управления реляционными базами данных(RDBMS) может обеспечить ссылочную целостность, обычно либо путем удаления строк внешнего ключа, а также для поддержания целостности, либо путем возврата ошибки и отказа от удаления. Какой метод используется, может определяться ограничением ссылочной целостности, определенным в словаре данных .

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

Формализация [ править ]

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

Логическая импликация между зависимостями включения может быть аксиоматизирована с помощью правил вывода [3] : 193 и может быть определена с помощью алгоритма PSPACE . Можно показать, что задача PSPACE-полна , сводя ее к задаче приемки для линейно ограниченного автомата . [3] : 196 Однако, логическое следствие между зависимостями, которые могут быть зависимостями включения или функциональными зависимостями , неразрешимо сокращением от слова проблема для моноидов . [3] : 199

Декларативная ссылочная целостность [ править ]

Декларативная ссылочная целостность (DRI) - это один из методов в языке программирования баз данных SQL для обеспечения целостности данных.

Значение в SQL [ править ]

Таблица (называемая ссылочной таблицей) может ссылаться на столбец (или группу столбцов) в другой таблице (ссылочная таблица) с помощью внешнего ключа . Столбцы, на которые указывает ссылка, в таблице, на которую указывает ссылка, должны иметь уникальное ограничение, такое как первичный ключ . Также возможны ссылки на себя (хотя они не полностью реализованы в MS SQL Server [4] ). При вставке новой строки в ссылочную таблицу система управления реляционными базами данных (RDBMS) проверяет, существует ли введенное значение ключа в ссылочной таблице. В противном случае вставка невозможна. Также можно указать действия DRI на ОБНОВЛЕНИЕ и УДАЛЕНИЕ, например CASCADE (пересылает изменение / удаление в ссылочной таблице в ссылочные таблицы), NO ACTION (если указана конкретная строка, изменение ключа не разрешено) или SET NULL / SET DEFAULT (измененный / удаленный ключ в таблица, на которую указывает ссылка, приводит к установке значений ссылки на NULL или значение DEFAULT, если оно указано).

ANSI / ISO / IEC 9075-1: 2003, Информационные технологии - Языки баз данных - SQL - Часть 1: Framework (SQL / Framework) ANSI / ISO / IEC 9075-2: 2003, Информационные технологии - Языки баз данных - SQL - Часть 2: Фонд (SQL / Foundation)

Конкретное значение продукта [ править ]

В Microsoft SQL Server термин DRI также применяется к назначению разрешений пользователям на объект базы данных. Предоставление DRI-разрешения пользователю базы данных позволяет им добавлять ограничения внешнего ключа в таблицу. [5]

См. Также [ править ]

  • Разыменование нулевого указателя
  • Висячий указатель
  • Домен / ключ нормальная форма
  • Целостность сущности
  • Функциональная зависимость
  • Ограничение распространения
  • Суррогатный ключ
  • Медленно меняющееся измерение

Ссылки [ править ]

  1. ^ Чапл, Майк. «Ссылочная целостность» . About.com . Проверено 20 марта 2011 . Определение : ссылочная целостность - это концепция базы данных, которая обеспечивает согласованность отношений между таблицами. Когда одна таблица имеет внешний ключ для другой таблицы, концепция ссылочной целостности гласит, что вы не можете добавлять запись в таблицу, содержащую внешний ключ, если в связанной таблице нет соответствующей записи.
  2. ^ Coronel et al. (2013). Системы баз данных 10-е изд. Cengage Learning, ISBN 978-1-111-96960-8 
  3. ^ a b c Абитебул, Серж ; Халл, Ричард Б.; Виану, Виктор (1994). «9. Зависимость от включения». Основы баз данных . Эддисон-Уэсли. С. 192–199.
  4. ^ Служба поддержки Microsoft (11 февраля 2007 г.). «Сообщение об ошибке 1785 возникает, когда вы создаете ограничение FOREIGN KEY, которое может вызвать несколько каскадных путей» . microsoft.com . Проверено 24 января 2009 .
  5. ^ Chigrik Александр (2003-08-13). «Управление разрешениями пользователей на SQL Server» . Журнал базы данных . Проверено 17 декабря 2006 .

Внешние ссылки [ править ]

  • DRI против триггеров (в архиве )