- •Вопросы и ответы для экзамена по курсу «Базы данных»
- •Определения данных, информации, субд, бд
- •Реляционная модель данных. Базовые понятия и определения
- •Тип данных
- •Типы данных, домен
- •Кортежи, пустые значения
- •Ключи, назначение, виды
- •Внешние ключи, связанные отношения Связанные отношения
- •Условия целостности
- •Типы связей, примеры
- •Сущности, их свойства. Связи между сущностями.
- •Нормализация – основные понятия
- •Нормализация – первая нормальная форма, алгоритм приведения, пример
- •Нормализация – вторая нормальная форма, алгоритм приведения, пример
- •Нормализация – третья нормальная форма, алгоритм приведения, пример
- •Реляционная алгебра – основные определения
- •Операции реляционной алгебры.
- •Основные операторы языка sql.
Тип данных
Понятие тип данных в реляционной модели данных полностью эквивалентно соответствующему понятию в алгоритмических языках. Набор поддерживаемых типов данных определяется СУБД и может сильно различаться в разных системах. Однако практически все СУБД поддерживают следующие типы данных:
целочисленные;
вещественные;
строковые;
специализированные типы данных для денежных величин;
специальные типы данных для временных величин (дата и/или время);
типы двоичных объектов (данный тип не имеет аналога в языках программирования; обычно для его обозначения используется аббревиатура BLOB — Binary Large Object).
В рассматриваемом примере используются три типа данных — строковый (столбцы «Имя» и «Специальность»), временной тип (столбец «Дата_рождения») и целочисленный тип («Курс» и «№_студенческого_билета»).
Домен
Наименьшая единица данных реляционной модели — это отдельное атомарное (неразложимое) для данной модели значение данных. Доменом называется множество атомарных значений одного и того же типа. Иными словами, домен представляет собой допустимое потенциальное множество значений данного типа.
В нашем примере можно для каждого столбца таблицы определить домен:
домены «Имена» и «Специальности» для столбцов «Имя» и «Специальность» соответственно будут базироваться на строковом типе данных — в число их значений могут входить только те строки, которые могут изображать имя и название специальности (в частности, такие строки не должны начинаться с мягкого знака);
домен «Даты_рождения» для столбца «Дата_рождения» определяется на базовом временном типе данных — данный домен содержит только допустимый диапазон дат рождения студентов;
домены «Номера_курсов» и «Номера_студенческих_билетов» базируются на целочисленном типе — в число его значений могут входить только те целые числа, которые могут обозначать номер курса университета (обычно от 1 до 6) и номер студенческого билета (обязательно положительное число).
Понятие домена более специфично для баз данных, хотя и имеет некоторые аналогии с диапазонными типами и множествами, имеющимися в ряде языков программирования.
В самом общем виде домен определяется заданием некоторого базового типа данных, к которому относятся элементы домена, и произвольного логического выражения, применяемого к элементу типа данных. Если вычисление этого логического выражения дает результат «истина», то элемент данных является элементом домена.
Следует отметить также семантическую нагрузку понятия домена: данные считаются сравнимыми только в том случае, когда они относятся к одному домену. Если же значения двух атрибутов берутся из различных доменов, то их сравнение, вероятно, лишено смысла.
В нашем примере значения доменов «Номера_курсов» и «Номера_студенческих_билетов» основаны на одном типе данных — целочисленном, но не являются сравнимыми.
Понятие домена используется далеко не во всех СУБД. В качестве примера реляционных баз данных, использующих домены, можно привести Oracle и InterBase.
Атрибуты, схема отношения, схема базы данных
Столбцы отношения называют атрибутами, им присваиваются имена, по которым к ним затем производится обращение.
Список имен атрибутов отношения с указанием имен доменов (или типов, если домены не поддерживаются) называется схемой отношения.
Схема нашего отношения СТУДЕНТ запишется так:
СТУДЕНТ {№_студенческого_билета Номера_студенческих_билетов
Имя Имена.
Дата_рождения Даты_рождения.
Курс Номера_курсов.
Специальность Специальности}
Степень отношения — это число его атрибутов. Отношение степени один называют унарным, степени два — бинарным, степени три — тернарным,…, а степени n — арным.
Степень отношения СТУДЕНТЫ равна пяти, то есть оно является 5-арным. Схемой базы данных называется множество именованных схем отношений.
Кортеж
Кортеж, соответствующий данной схеме отношения, представляет собой множество пар {имя атрибута, значение}, которое содержит одно вхождение каждого имени атрибута, принадлежащего схеме отношения. «Значение» является допустимым значением домена данного атрибута (или типа данных, если понятие домена не поддерживается). Тем самым степень кортежа, то есть число элементов в нем, совпадает со степенью соответствующей схемы отношения. Иными словами, кортеж — это набор именованных значений заданного типа.
Таким образом, отношение, по сути, является множеством кортежей, соответствующим одной схеме отношения.
Кардинальным числом или мощностью отношения называется число его кортежей. Мощность отношения СТУДЕНТЫ равна 6. В отличие от степени отношения кардинальное число отношения изменяется во времени.
Пустые значения
В некоторых случаях какой-либо атрибут отношения может быть неприменим. Например, в рассматриваемом в качестве примера отношении СТУДЕНТЫ может также храниться информация о потенциальных абитуриентах, посещающих подготовительные курсы вуза.
В этом случае неприменимыми оказываются атрибуты «№_студенческого_билета» и «Курс» (так как абитуриенты еще не поступили в вуз и, следовательно, не имеют студенческого билета и не могут быть отнесены к какому-либо курсу). Кроме того, иногда при вводе информации в строку реляционной таблицы некоторые данные могут быть неизвестны и выясняться позже. (Для нашего примера — при поступлении на подготовительные курсы абитуриент еще не определился окончательно, на какую специальность он будет поступать.)
В обоих указанных случаях в поля, соответствующие неприменимым или неизвестным атрибутам, ничего не заносится, и строка записывается в базу данных с пустыми значениями этих атрибутов.
Следует понимать, что пустое значение — это не ноль и не пустая строка, а неизвестное значение атрибута, которое не определено в данный момент времени и в принципе может быть определено позднее.
Для обозначения пустых значений полей используется слово NULL.
Ключи отношения
Поскольку отношение с математической точки зрения является множеством, а множества по определению не содержат совпадающих элементов, то никакие два кортежа отношения не могут быть дубликатами друг друга в любой произвольно заданный момент времени. Таким образом, в отношении всегда должен присутствовать некоторый атрибут (или набор атрибутов), однозначно определяющий каждый кортеж отношения и обеспечивающий уникальность строк таблицы. Такой атрибут (или набор атрибутов) называется первичным ключом отношения.
Более строго определить понятие первичного ключа можно следующим образом:
если R — отношение с атрибутами A1 A2..., An, то множество атрибутов
К = Ai„ Аj ...,Ak) отношения R является первичным ключом этого отношения тогда и только тогда, когда удовлетворяются два независимых от времени условия:
уникальность: в произвольный момент времени никакие два различных кортежа отношения R не имеют одного и того же значения для Аi Аj ..., Аk.
минимальность: ни один из атрибутов Аi Аj ..., Аk не может быть исключен из К без нарушения уникальности.
Для каждого отношения свойством уникальности обладает, по крайней мере, полный набор его атрибутов. Однако требуется обеспечить и условие минимальности. Поэтому, как правило, в отношении всегда имеется один атрибут, обладающий свойством уникальности и являющийся первичным ключом.
В зависимости от количества атрибутов, входящих в ключ, различают простые и сложные (или составные) ключи.
Простой ключ — ключ, содержащий только один атрибут. В общем случае операции объединения выполняются быстрее в том случае, когда в качестве ключа используется самый короткий и самый простой из возможных типов данных. С этой точки зрения наилучшим образом подходит целочисленный тип, который имеет аппаратную поддержку для выполнения над ним логических операций.
Сложный или составной ключ — состоит из нескольких атрибутов.
