Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИТТ. LabRab 3.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.29 Mб
Скачать

Пустые значения

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

Например: предположим, что в рассматриваемом в качестве примера отношении СТУДЕНТЫ может также храниться информация об абитуриентах, посещающих подготовительные курсы вуза. В этом случае, неопределёнными оказываются атрибуты «№_студенческого_билета», «Курс» (так как абитуриенты ещё не поступили в вуз и, следовательно, не имеют студенческого билета и не могут быть отнесены к какому-либо курсу), а также «Специальность» (так как, посещая подготовительные курсы, абитуриент ещё точно не может знать на какую специальность он поступит.)

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

Следует понимать, что пустое значениеэто не нуль и не пустая строка, а неизвестное значе-ние атрибута, которое не определено в данный момент времени и, в принципе, может быть опреде-лено позднее.

Для обозначения пустых значений полей (в узком смысле) таблиц БД используется специальное слово NULL.

Ключи отношения

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

Более строго определить понятие первичного ключа можно следующим образом:

если R - отношение с атрибутами А1, А2,..., Аn, то множество атрибутов К= (Аi, Aj, ..., Ak) отношения R является первичным ключом этого отношения тогда и только тогда, когда удовлетворяются два независимых от времени условия:

уникальность: в произвольный момент времени никакие два различных кортежа отношения R не имеют одного и того же набора значений для атрибутов Аi, Aj, ..., Ak;

минимальность: ни один из атрибутов Аi, Aj, ..., Ak не может быть исключен из К без нарушения условия уникальности.

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

Кроме первичного ключа (присутствие которого обязательно) отношение может иметь и другие ключи (см. ниже).

В зависимости от количества атрибутов, входящих в ключ, различают простые и сложные (или составные) и частичные ключи:

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

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

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

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

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

Естественный ключключ, в который включены значимые атрибуты и который, таким образом, содержит значимую информацию.

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

В рассматриваемом нами примере в качестве первичного ключа отношения СТУДЕНТЫ можно рассматривать атрибут №_СТУДЕНЧЕСКОГО_БИЛЕТА. Причем данный ключ будет естественным, так как он несёт вполне определенную информацию.

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

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

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

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

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

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

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

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

 UNIQUE — ограничение уникальности (значения вторичных ключей при данном ограничении не могут дублироваться);

 NOT NULL — при данном ограничении ни один из атрибутов, входящих в состав вторичного

ключа, не может принимать значение NULL.

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

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