Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Кудравцев Создание баз данных 2010

.pdf
Скачиваний:
83
Добавлен:
16.08.2013
Размер:
2.65 Mб
Скачать

тической специфике предметной области в реляционных системах очень ограничены.

На устранение именно этих недостатков в основном и направлены исследования по созданию объектно-ориентированных баз данных.

Базовые понятия реляционной модели данных

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

Основными понятиями реляционной модели данных являются:

тип данных;

домен;

атрибут;

кортеж;

ключ.

Рассмотрим смысл этих понятий на примере отношения (табл. 2.1) СТУДЕНТ, содержащего информацию о студентах некоторого вуза.

Таблица 2.1 Отношение СТУДЕНТ реляционной базы данных

№_студ_билета

Имя

Дата рождения

Курс

Специальность

23980282

Алексеев Д.А.

12.03.1992

2

Биология

22991380

Яковлев Н.В.

25.12.1989

4

Физика

22657879

Михайлов В.В.

29.02.1989

5

Математика

24356783

Афанасьев А.В.

19.08.1993

1

Иностранный яз.

24350283

Кузнецов В.И.

03.10.1992

1

Физика

23125681

Кузнецов В.И.

26.03.1991

3

История

41

Тип данных

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

целочисленные;

вещественные;

строковые;

специализированные типы данных для денежных величин;

специальные типы данных для величин типа дата и/(или) время;

типы двоичных объектов (данный тип не имеет аналога в языках программирования; обычно для его обозначения используется аббревиатура BLOB — Binary Large OBject).

Врассматриваемом примере используются три типа данных — строковый (столбцы «Имя» и «Специальность»), тип дата (столбец «Дата_рождения») и целочисленный тип («Курс» и «№_студ_билета»).

Домен

Наименьшая единица данных реляционной модели — это отдельное атомарное (неразложимое) для данной модели значение данных.

Доменом называется множество атомарных значений одного и того же типа.

В нашем примере можно для каждого столбца таблицы определить домены: «Имена», «Специальности», «Даты_рождения», «Номера_курсов» и «Номера_студ_билетов».

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

Атрибуты, схема отношения, схема базы данных

Столбцы отношения называют атрибутами, им присваиваются имена, по которым к ним затем производится обращение.

42

Список имен атрибутов отношения с указанием имен доменов (или типов, если домены не поддерживаются) называется схемой отношения.

Степень отношения — это число его атрибутов. Отношение степени один называют унарным, степени два — бинарным, степени три — тернарным, …, а степени n — арным.

Схемой базы данных называется множество именованных схем отношений.

Кортеж

Кортеж, соответствующий данной схеме отношения, представляет собой множество пар {имя атрибута, значение}, которое содержит одно вхождение каждого имени атрибута, принадлежащего схеме отношения. «Значение» является допустимым значением домена данного атрибута (или типа данных, если понятие домена не поддерживается). Тем самым степень кортежа, т.е. число элементов в нем, совпадает со степенью соответствующей схемы отношения. Иными словами, кортеж — это набор именованных значений заданного типа.

Схему отношения иногда называют также заголовком отношения, а отношение как набор кортежей — телом отношения.

Кардинальным числом или мощностью отношения называется число его кортежей. Мощность отношения СТУДЕНТ равна 6. В отличие от степени отношения кардинальное число отношения изменяется во времени.

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

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

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

Для обозначения пустых значений полей используется слово

NULL.

43

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

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

Более строго определить понятие первичного ключа можно следующим образом: если R — отношение с атрибутами A1 A2..., An, то множество атрибутов К = (Ai, Аj, ..., Ak) отношения R является первичным ключом этого отношения тогда и только тогда, когда удовлетворяются два независимых от времени условия:

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

минимальность: ни один из атрибутов Аi Аj ..., Аk не может

быть исключен из К без нарушения уникальности.

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

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

Сложный (или составной) ключ состоит из нескольких атрибутов.

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

44

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

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

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

Врассматриваемом нами примере в качестве первичного ключа отношения СТУДЕНТ можно рассматривать атрибут №_студ_билета. Причем данный ключ будет естественным, так как несет вполне определенную информацию.

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

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

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

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

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

45

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

Таким образом, с точки зрения быстродействия системы естественные ключи часто оказываются неоптимальными.

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

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

Однако за это приходится платить избыточностью данных в таблицах.

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

Связанные отношения

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

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

Для рассмотрения связанных отношений воспользуемся рассмотренным ранее примером — отношением СТУДЕНТ. Данное отношение может быть связано с отношением ЭКЗАМЕН, в котором содержатся сведения об успеваемости студентов по разным предметам.

Фрагмент такого отношения может иметь вид, приведенный в табл. 2.2.

46

Таблица 2.2 Фрагмент отношения ЭКЗАМЕН, связанного с отношением

СТУДЕНТ

№ студ_билета

Предмет

Оценка

 

 

 

23980282

Высшая математика

4

23980282

Общая физика

5

22991380

Философия

NULL

22991380

Общая физика

5

22657879

Высшая математика

3

24356783

Философия

NULL

Атрибут «№_студ_билета» таблицы ЭКЗАМЕН содержит идентификатор студента (в данном примере в качестве такого идентификатора используется номер студенческого билета).

Если нужно узнать имя студента, соответствующее строкам в таблице ЭКЗАМЕН, то следует поискать это же значение идентификатора студента в поле «№_студенческого_6илета» таблицы СТУДЕНТ и в найденной строке прочесть значение поля «Имя».

Таким образом, связь между таблицами СТУДЕНТ и ЭКЗАМЕН устанавливается по атрибуту «№_студ_билета».

При рассмотрении связанных таблиц важное значение имеет понятие внешнего ключа.

Внешние ключи отношения

В базах данных одни и те же имена атрибутов часто используются в разных отношениях. В рассматриваемом примере атрибут «№_студ_билета» присутствует как в отношении СТУДЕНТ, так и в отношении УСПЕВАЕМОСТЬ. В этом примере атрибут «№_студ_билета» иллюстрирует понятие внешнего ключа (foreign key).

Внешний ключ — это атрибут (или множество атрибутов) одного отношения, являющийся ключом другого (или того же самого) отношения.

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

47

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

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

Атрибуты внешнего ключа не обязательно должны иметь те же имена, что и атрибуты ключа, которым они соответствуют. Например, в нашем примере можно было дать атрибуту «№_студ_билета» таблицы УСПЕВАЕМОСТЬ другое имя, например «Студ_билет»,

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

Условия целостности данных

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

Важнейшими ограничениями целостности данных являются:

категорийная целостность;

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

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

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

48

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

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

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

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

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

Если корректность значений внешних ключей не контролируется СУБД, то может нарушиться ссылочная целостность данных.

Это можно пояснить на рассматриваемом примере следующим образом.

Если удалить из таблицы СТУДЕНТ строку (например, при отчислении студента), имеющую хотя бы одну связанную с ней строку в таблице УСПЕВАЕМОСТЬ, то это приведет к тому, что в таблице УСПЕВАЕМОСТЬ останутся записи об успеваемости студента, который уже отчислен.

Такая же ситуация будет наблюдаться и в том случае, если внешнему ключу таблицы УСПЕВАЕМОСТЬ ошибочно будет присвоено значение, отсутствующее в значениях ключа связанной таблицы.

Ограничения категорийной и ссылочной целостности должны поддерживаться СУБД.

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

Что же касается ссылочной целостности, то здесь обеспечение целостности выглядит несколько сложнее.

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

49

А вот при удалении кортежа из отношения, на которое ведет ссылка, возможно использовать один из трех подходов, каждый из которых поддерживает целостность по ссылкам:

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

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

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

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

Конечно, для принятия такого решения необходимо анализировать требования конкретной прикладной области.

Практически все современных СУБД обеспечивает ссылочную целостность данных.

Типы связей между таблицами

При установлении связи между двумя таблицами одна из них будет являться главной (master), а вторая — подчиненной (detail).

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

1)один к одному — каждой записи одной таблицы соответствует только одна запись другой таблицы;

2)один ко многим — одной записи главной таблицы могут соответствовать несколько записей подчиненной таблицы;

3)многие ко многим — одна запись главной таблицы связана с несколькими записями подчиненной таблицы, а одна запись подчиненной таблицы связана с несколькими записями глав-

ной таблицы.

Различие между типами связей «один ко многим» и «многие к одному» зависит от того, какая из таблиц выбирается в качестве

50