Ссылочная целостность — это свойство данных, утверждающее, что все ссылки на них действительны. В контексте реляционных баз данных она требует, чтобы если значение одного атрибута (столбца) отношения ( таблицы) ссылалось на значение другого атрибута (в том же или другом отношении), то ссылочное значение должно существовать. [1]
Для поддержания ссылочной целостности в реляционной базе данных любой столбец в базовой таблице , объявленный внешним ключом, может содержать только либо пустые значения, либо значения из первичного ключа родительской таблицы или потенциального ключа . [2] Другими словами, когда используется значение внешнего ключа, оно должно ссылаться на действительный существующий первичный ключ в родительской таблице. Например, удаление записи, содержащей значение, на которое ссылается внешний ключ в другой таблице, нарушит ссылочную целостность. Некоторые системы управления реляционными базами данных (СУБД) могут обеспечивать ссылочную целостность, обычно либо удаляя строки внешнего ключа для поддержания целостности, либо возвращая ошибку и не выполняя удаление. Какой метод используется, может определяться ограничением ссылочной целостности, определенным в словаре данных .
Прилагательное «ссылочный» описывает действие, которое выполняет внешний ключ , «ссылаясь» на связанный столбец в другой таблице. Проще говоря, «ссылочная целостность» гарантирует, что цель, на которую «ссылается», будет найдена. Отсутствие ссылочной целостности в базе данных может привести к тому, что реляционные базы данных будут возвращать неполные данные, обычно без указания на ошибку.
Зависимость включения по двум (возможно, идентичным) предикатам и из схемы записывается как , где , являются различными атрибутами (именами столбцов) и . Это подразумевает, что кортежи значений, появляющиеся в столбцах для фактов , должны также появляться как кортеж значений в столбцах для некоторого факта .
Такое ограничение является особой формой зависимости, порождающей кортежи (TGD), где в обеих сторонах правила есть только один реляционный атом. [3] В логике первого порядка это можно выразить как , где — вектор (размер которого ) переменных, общих для и , и ни одна переменная не появляется несколько раз ни в теле TGD, ни в его заголовке.
Логическая импликация между зависимостями включения может быть аксиоматизирована правилами вывода [4] : 193 и может быть решена алгоритмом PSPACE . Можно показать, что проблема является PSPACE-полной путем сведения из проблемы принятия для линейного ограниченного автомата . [4] : 196 Однако логическая импликация между зависимостями, которые могут быть зависимостями включения или функциональными зависимостями , неразрешима путем сведения из проблемы слов для моноидов . [4] : 199
Декларативная ссылочная целостность (DRI) — один из методов в языке программирования баз данных SQL , обеспечивающий целостность данных.
Таблица (называемая ссылающейся таблицей) может ссылаться на столбец (или группу столбцов) в другой таблице (ссылаемой таблице) с помощью внешнего ключа . Ссылаемые столбцы в ссылаемой таблице должны находиться под уникальным ограничением, таким как первичный ключ . Также возможны ссылки на себя (хотя не полностью реализованы в MS SQL Server [5] ). При вставке новой строки в ссылающуюся таблицу система управления реляционными базами данных (СУБД) проверяет, существует ли введенное значение ключа в ссылаемой таблице. Если нет, вставка невозможна. Также можно указать действия DRI для UPDATE и DELETE , такие как CASCADE (перенаправляет изменение/удаление в ссылаемой таблице в ссылающиеся таблицы), NO ACTION (если ссылается конкретная строка, изменение ключа не допускается) или SET NULL / SET DEFAULT (изменение/удаление ключа в ссылаемой таблице приводит к установке ссылающихся значений в NULL или в значение DEFAULT, если оно указано). [6]
В Microsoft SQL Server термин DRI также применяется к назначению разрешений пользователям на объект базы данных . Предоставление разрешения DRI пользователю базы данных позволяет ему добавлять ограничения внешнего ключа на таблицу. [7]
Определение : Ссылочная целостность — это концепция базы данных, которая гарантирует, что отношения между таблицами остаются согласованными. Когда одна таблица имеет внешний ключ к другой таблице, концепция ссылочной целостности гласит, что вы не можете добавить запись в таблицу, содержащую внешний ключ, если в связанной таблице нет соответствующей записи.