Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Составляющие реляционной модели



Модель реляционных баз данных использует следующие основные понятия:

¨ тип данных;

¨ показатель;

¨ таблица;

¨ поле;

¨ запись;

¨ первичный ключ;

¨ база данных;

¨ соединение таблиц;

¨ целостность;

¨ схема данных.

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

Понятие «Показатель» определяется заданием некоторого базового типа данных, к которому относятся значения показателя, и содержательного условия, позволяющего отличать корректные значения показателя от некорректных. Например, показатель "Группа" в нашем примере может быть определен как целочисленный, но в число его значений могут входить только те номера, которые соответствуют реальным группам. Текстовой показатель «Отделение» имеет всего несколько возможных значений «Экономика», «Менеджмент», «Магистратура». Понятие показателя поддерживается не во всех СУБД.

Структура таблицы (используется также термин «отношение») задается множеством полей. Поле (в некоторых источниках употребляются термины «атрибут» или «реквизит») можно описать парой < имя поля, имя показателя >. Хотя кажется, что достаточно задать только имя поля, но задание также имени показателя позволяет сравнивать столбцы разных таблиц.

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

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

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

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

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

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

Реляционные операции над таблицами.

Результатом произвольной операции над таблицами является новая таблица. Элементарные операции либо унарные (операндом является одна таблица), либо бинарные (операндом являются две таблицы). Элементарная операция принадлежит к одному из видов:

¨ Объединение;

¨ Пересечение;

¨ Разность;

¨ Прямое произведение;

¨ Проекция;

¨ Отбор;

¨ Соединение;

¨ Вычислимое поле;

¨ Группировка;

¨ Сортировка.

Операции объединения, пересечения, разности и произведения аналогичны теоретико-множественным операциям.

В классической теории множеств объединение, пересечение и разность возможны для любых множеств. В реляционном исчислении операнды этих операций (то есть таблицы) должны быть совместимы: в заголовках обеих таблиц содержится один и тот же набор полей. Если две таблицы совместимы, то при обычном выполнении над ними операций объединения, пересечения и взятия разности результатом операции является таблица с корректно определенным заголовком, совпадающим с заголовком каждой из таблиц-операндов. Объединение (UNION) двух таблиц содержит записи первой и второй таблицы, исключая повторения. Пересечение (INTERSECT) двух таблиц содержит общие идентичные записи обеих таблиц. Разность (DIFFERENCE) двух таблиц содержит записи первой таблицы, не встречающиеся во второй таблице.

Заметим, что включение в состав операций реляционного исчисления трех операций объединения, пересечения и взятия разности является избыточным, так как пересечение выражается через объединение и разность. Тем не менее в логические модели СУБД часто включаются все три операции (исходя из интуитивных потребностей потенциального пользователя реляционых БД, далекого от математики). Однако, например, в СУБД Access есть только операция объединения (команда UNION).

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

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

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

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

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

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

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

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

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

Проекция (PROJECT) применяется к одной таблице и оставляет в ней только заданные столбцы, исключая все остальные. В запросе на выборку языка SQL этому соответствует список отобранных полей непосредственно после ключевого слоя SELECT. В конструкторе Access столбцы, участвующие в проекции, выделяются флажком «Вывод на экран» в нижнем окне конструктора.

Отбор (WHERE) также применяется к одной таблице и позволяет фильтровать записи таблицы. Отбор определяется условием (фильтром), содержащим реквизиты записей таблицы. Если условие выполняется, то запись оставляется, если не выполняется – то отбрасывается. Фильтром может служить любое логическое выражение, составленное из простых условий с использованием логических связок AND, OR и NOT и скобок. Простым условием служит сравнение значений полей или констант.

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

В конструкторе Access простое условие соединения задается стрелкой между соответствующими полями таблиц в верхней части конструктора. В языке SQL соединение задается конструкцией JOIN в предложении FROM.

Пример. Пусть даны две таблицы R и S, а соединение производится по совпадению полей C и F:

Тогда прямое произведение этих таблиц T = R * S представляет собой таблицу из шести строк:

A B C F G H
1 2 3 3 X y
1 2 3 6 Z w
4 5 6 3 X y
4 5 6 6 Z W
7 8 9 3 X Y
7 8 9 6 Z W

После выборки строк таблицы T с одинаковым значением полей C и F получим таблицу Q с двумя строками:

A B C F G H
1 2 3 3 X Y
4 5 6 6 Z W

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

Если между двумя таблицами существует связь типа «один-к-одному», то это означает, что одна запись в одной таблице может быть связана не более чем с одной записью в другой таблице. Примером могут служить паспортные данные и данные в налоговых органах на одного и того же человека. Общий показатель в этом случае – номер паспорта.

Если между двумя таблицами существует связь типа «один-ко-многим», то это означает, что одна запись в одной таблице может быть связана более чем с одной записью в другой таблице. Примером связи таблиц «один-ко-многим» является отношение между списком групп и списком студентов. Общий показатель в этом случае – номер группы.

При связи типа «многие-ко-многим» каждая запись в одной таблице может быть связана с несколькими записями в другой таблице и наоборот. Примером связи таблиц «многие-ко-многим» является отношение между авторами и названиями учебников. Каждый автор может издать несколько учебников, а у одного учебника может быть несколько авторов.

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

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

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





Дата публикования: 2014-11-04; Прочитано: 568 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.011 с)...