Все шпаргалки / Базы данных / 

Внешние ключи

Различные объекты предметной области, информация о которых хранится в базе данных, всегда взаимосвязаны друг с другом. Например, накладная на поставку товара содержит список товаров с количествами и ценами, сотрудник предпри-ятия имеет детей, числится в подразделении и т.д. Термины "содержит", "имеет", "числится" отражают взаимосвязи между понятиями "накладная" и "список товаров", "сотрудник" и "дети", "сотрудник" и "подразделение". Такие взаимосвязи отражаются в реляционных базах данных при помощи внешних ключей, связывающих несколько отношенийНомер поставщика Наименование поставщикаТаблица 6 Отношение "Поставщики" Номер детали Наименование деталиТаблица 7 Отношение "Детали" Номер поставщи-ка Номер детали Поставляемое количествоТаблица 8 Отношение "Поставки" В отношении "Поставки" атрибуты "Номер поставщика" и "Номер детали" являются ссылками на ключевые атрибуты отношений "Поставщики" и "Детали", и, следовательно, являются внешними ключами. Заметим, что данные отношения свободны от недостатков, описанных выше, когда все данные предлагалось хранить в одном отношении. Действительно, при изменении наименования поставщика или детали, это изменение происходит только в одном месте. Если поставщик прекратил поставки всех деталей, то удаляются соответствую-щие кортежи в отношении "Поставки", данные же о самом поставщике остаются без изменений. Дадим точное определение. Определение 2. Пусть дано отношениеR. Подмножество атрибутов FK отношения R будем называть внешним ключом, если: 1. Существует отношение S(R и Sне обязательно различны) с потенциальным ключом K. 2. Каждое значение FK в отношении R всегда совпадает со значением K для некоторого кортежа из S, либо является null-значением. Отношение S называется родительским отношением, отношение R называется дочерним отношением. Замечание. Внешний ключ, также как и потенциальный, может быть простым и составным. Замечание. Внешний ключ должен быть определен на тех же доменах, что и соответствующий первичный ключ родительско-го отношения. Замечание. Внешний ключ, как правило, не обладает свойством уникальности. Так и должно быть, т.к. в дочернем отношении может быть несколько кортежей, ссылающихся на один и тот же кортеж родительского отношения. Это, собственно, и дает тип отношения "один-ко-многим". Замечание. Если внешний ключ все-таки обладает свойством уникальности, то связь между отношениями имеет тип "один-к-одному". Чаще всего такие отношения объединяются в одно отношение, хотя это и не обязательно. Замечание. Хотя каждое значение внешнего ключа обязано совпадать со значениями потенциального ключа в некотором кортеже родительского отношения, то обратное, вообще говоря, неверно. Например, могут существовать поставщики, не поставляющие никаких деталей. Замечание. Для внешнего ключа не требуется, чтобы он был компонентом некоторого потенциального ключа (как получилось в примере с поставщиками и деталями). Замечание. Null-значения для атрибутов внешнего ключа допустимы только в том случае, когда атрибуты внешнего ключа не входят в состав никакого потенциального ключа