- •Определение модели данных. Представление статических и динамических свойств реального мира. Понятие базы данных
- •Базовые структурные компоненты моделей данных: домены и атрибуты; отношение сущности, схема отношения; отношение связи, характеристика связи.
- •Понятие ограничений целостности. Общая характеристика ограничений целостности. Типы ограничений целостности.
- •Модель данных сущность-связь п. Чена: информация о сущностях и связях, структура информации. Диаграмма сущность-связь.
- •Реляционная модель данных: базовые объекты, фундаментальные свойства отношений. Представление сущностей и связей.
- •Подмножество sql для определения данных: предложение create table, правила записи. Примеры.
- •Реляционная алгебра как манипуляционная часть реляционной модели данных: общая характеристика, основные элементы, теоретико-множественные и специальные операции.
- •Реляционное исчисление с переменными-кортежами: основные определения, понятие атомов, правильно построенная формула.
- •Подмножество sql для манипулирования данными: предложения insert, delete, update. Правила написания запросов: предложение select.
- •Проектирование баз данных с использованием теории нормализации: возникающие проблемы, понятие нормальной формы, 1нф, 2нф, 3нф, нфбк, 4нф.
Реляционное исчисление с переменными-кортежами: основные определения, понятие атомов, правильно построенная формула.
В основе реляционной модели данных (РМД) лежат некоторые разделы математической теории отношений и математической логики. Манипуляционную часть РМД составляют спецификационные операторы, естественные для РМД и базирующиеся на концепциях теории множеств. Языки запросов в РМД разбиваются на два класса:
алгебраические языки (реляционная алгебра), позволяющие выражать запросы с помощью специальных операторов, применяемых к отношениям;
языки исчисления предикатов (реляционное исчисление), в которых запросы описывают требуемое множество кортежей путем спецификации предиката, которому должны удовлетворять эти кортежи.
Из приведенного определения следует:
языки реляционной алгебры показывают, как получить результат;
языки реляционного исчисления показывают, что должно быть получено.
Языки реляционного исчисления делятся на два класса: с переменными–кортежами и с переменными на доменах – в зависимости от того, что является примитивными объектами исчисления: кортежи или элементы доменов, являющиеся значениями некоторых атрибутов.
Реляционное исчисление лежит в основе декларативного подхода к формулировке запроса к БД, суть которого заключается в следующем: запросу к БД соответствует формула некоторой формально-логической теории, которая описывает свойства желаемого результата.
Ответом на запрос служит множество объектов из области интерпретации (которой является БД), на котором истинна формула, соответствующая запросу.
В качестве такой формально-логической теории используется теория исчисления предикатов первого порядка, в которой формула задается в виде предиката.
Даны некоторые попарно не пересекающиеся произвольные множества D1, D2, …, Dn, Di Dj = 0 для любых i j, и переменные x1, x2, …, xn, принимающие значения из соответствующих множеств: xi Di для любых i. Тогда предикатом (или предикатной функцией) называется функция P(x1, x2, …, xn), принимающая одно из двух значений – 1 или 0 (истина или ложь). Переменные x1, x2, …, xn называются предикатными переменными. Множества D1, D2, …, Dn образуют область интерпретации предиката.
В записи предиката, наряду с логическими операциями , , , смысл и использование которых традиционны, используются специальные операции – кванторы: всеобщности и существования . Смысл использования кванторов следующий: x (f(x)) означает, что для всех значений x из области интерпретации формула f(x) имеет значение "истина"; x (f(x)) означает, что существует по крайней мере одно значение x из области интерпретации, для которого формула f(x) имеет значение "истина".
Для реляционного исчисления с переменными-кортежами областями определения переменных являются отношения БД, т.е. допустимым значением каждой переменной является кортеж некоторого отношения; Правильно построенные формулы служат для выражения условий, накладываемых на переменные (кортежи или на доменах).
Переменные-кортежи должны удовлетворять определенной схеме отношения R. Правильно построенная формула (wff – well formulated formula) определяет результаты отбора: выбираются те кортежи, для которых wff дает значение 1.
Обозначим правильно построенную формулу (предикат, значения которого 0 или 1) через (t). Рассмотрим правила построения (t).
I. Основой формулы являются атомы, которые могут иметь значения 0 или 1.
Существует три типа атомов формулы (t).
Пусть r(R) – некоторая реализация отношения, удовлетворяющая схеме R; t – некоторая переменная-кортеж, удовлетворяющая схеме R. Тогда r(t) – атом; означает, что t есть кортеж в реализации отношении r (т.е. формула истинна, если t r).
Пусть r(R) – некоторая реализация отношения, удовлетворяющая схеме R; u и v – переменные-кортежи из отношения r(R) (т.е. u r, v r); – арифметическая операция сравнения (, , , , , ); A, B – атрибуты схемы отношения R, сравнимые по операции ; тогда u[A] v[B] – атом.
Пусть u – переменная-кортеж из отношения r(R) (т.е. u r); – арифметическая операция сравнения (, , , , , ); A, B – атрибуты схемы отношения R, сравнимые по операции ; c – константа из домена, на котором определен атрибут B; u[A]c (или cu[A]) – атом.
Запись u[A] означает «значение переменной-кортежа u по атрибуту A».
II. Формула реляционного исчисления (t), а также свободные и связанные вхождения переменных определяются по следующим рекурсивным правилам:
Каждый атом есть формула. Все вхождения переменных-кортежей, упомянутых в атоме, являются свободными. Например, формула r(t) утверждает, что переменная-кортеж t является кортежем отношения r(R).
Если x(R) – переменная-кортеж из отношения r со схемой R; (x) – формула, в которой переменная x имеет свободное вхождение; тогда x(R) ((x)). Данная формула утверждает, что существует хотя бы один кортеж x в отношении r(R), такой, что при подстановке его в формулу (x) вместо всех свободных вхождений x получим значение "истина". Например, формула x(R) (r(x)) утверждает, что отношение r не пусто (то есть, существует хотя бы один кортеж x, принадлежащий r).
Если x(R) – переменная-кортеж из отношения r со схемой R; (x) – формула, в которой переменная x имеет свободное вхождение; тогда x(R) ((x)). Данная формула утверждает, что для всех кортежей x из отношения r(R) при подстановке их в формулу (x) вместо всех свободных вхождений x получим значение "истина". Например, формула x(R) (x[A] ) утверждает, что для всех кортежей значение атрибута A является обязательным.
Если (x) и (x) – формулы, тогда (x), (x) (x), (x) (x) – тоже формулы. Вхождения переменной x в эти формулы остаются свободными или связанными – такими, какими были в (x) или (x) соответственно.
Если (x) – формула, то ((x)) – тоже формула; вхождение переменной x остается свободным или связанным – таким, каким оно было в (x).
Ничто иное не является формулой.
При вычислении формул используется порядок старшинства операций, определяемый правилами построения формулы:
атомы, в которых могут быть использованы арифметические операции сравнения;
кванторы;
отрицание ()
операция "И" ()
операция "ИЛИ" ()
Скобки используются для изменения порядка вычисления формулы.
Выражение реляционного исчисления с переменными-кортежами имеет вид: {t(R) | (t)}, где t – переменная-кортеж, удовлетворяющая схеме отношения R; единственная переменная, имеющая свободное вхождение в формулу (t); (t) – правильно построенная формула. Интерпретация выражения реляционного исчисления: множество кортежей t, удовлетворяющих схеме отношения R, таких, для которых правильно построенная формула (t) истинна.
Пример:
Пусть есть отношение R(ИМЯ, СТИПЕНДИЯ); атрибут СТИПЕНДИЯ определен на домене D = {«да», «нет»}. Тогда выражение
{ t(ИМЯ) | x(R) (r(x) x[СТИПЕНДИЯ] = «да» x[ИМЯ] = t[ИМЯ]}
позволит получить из отношения имена всех студентов, получающих стипендию.
Выражение вида {t | r(t) } в общем случае определяет бесконечное отношение, что недопустимо. Поэтому в реляционном исчислении ограничиваются рассмотрением так называемых безопасных выражений вида {t | (t) }, которые гарантированно дают ограниченное множество кортежей. В таких выражениях значения атрибутов кортежей t являются элементами некоторого ограниченного универсального множества – DOM().DOM() – унарное отношение, элементами которого являются символы, которые либо явно появляются в , либо служат компонентами какого-либо кортежа в некотором отношении R, упоминаемом в .
«Выражение {t | ( t)} реляционного исчисления с переменными-кортежами назовем безопасным, если выполняются следующие условия:
Всякий раз, когда t удовлетворяет (t), каждый компонент t есть элемент DOM().
Для любого подвыражения вида (u) ((u)) каждый компонент u принадлежит DOM(), если u удовлетворяет .
Если для любого подвыражения вида (u) ((u)) каждый компонент u не принадлежит DOM(), то u удовлетворяет .
Условия 2 и 3 позволяют устанавливать истинность квалифицированной формулы (u) ((u)) или (u) ((u)), рассматривая только u, составленные из принадлежащих DOM() символов. Например, любая формула ( u) (R(u) …) удовлетворяет условию 2, а любая формула (u) (R(u) …) – условию 3.»
Эквивалентность выражений реляционной алгебры и реляционного исчисления с переменными-кортежами (теорема): Если E – выражение реляционной алгебры, то эквивалентное ему безопасное выражение реляционного исчисления с переменными-кортежами.
Выражение реляционной алгебры |
Выражение реляционного исчисления с переменными-кортежами |
Объединение: r1 r2, r1(R), r2(R) |
{x(R) | r1(x) r2(x) } |
Разность: r1 – r2 , r1(R), r2(R) |
{x(R) | r1(x) r2(x) } |
Пересечение: r1 r2, r1(R), r2(R) |
{x(R) | r1(x) r2(x) } |
Декартово произведение: r1 r2, r1(R1), r2(R2) |
{x(R1R2) | u(R1) v(R2) (r1(u) r2(v) x[R1] = u{r1] x[R2] = v[R2]) } |
Проекция: L(r), r(R), L R |
{t(L) | u(R) (r(u) u[L] = t[L] } |
Выбор: F(r), r(R) |
{ t(R) | r(t) F’ ) } |
Естественное соединение: r1 r2, r1(AB), r2(BC) |
{ t(ABC) | u(AB) v(BC) ( r1(u) r2(v) u[B] = v[B] t[AB] = u[AB] t[C] = v[C]) } |
Деление: r1 r2, r1(AB), r2(B) |
{ t(A) | x(B) (r2(x) y(AB) (r1(y) y[B] = x[B] y[A] = t[A] } |