
- •1. Введение в бд
- •2. Теоретические основы бд
- •2.1 Базы данных
- •2.2. Архитектуры обработки информации
- •Ошибка! Ошибка связи.
- •Ошибка! Ошибка связи.
- •2.3 Модели баз данных
- •2.3.1 Иерархическая модель данных
- •Ошибка! Ошибка связи.
- •Ошибка! Ошибка связи.
- •2.3.2 Сетевая модель данных
- •Ошибка! Ошибка связи.
- •2.3.3 Реляционная модель данных
- •3. Реляционный подход к организации бд
- •3.1 Базовые понятия реляционных баз данных
- •Ошибка! Ошибка связи.
- •3.2 Фундаментальные свойства отношений
- •3.3 Взаимосвязь отношений
- •4. Реляционная алгебра
- •4.1 Обзор реляционной алгебры
- •Замкнутость реляционной алгебры
- •Отношения, совместимые по типу
- •4.2 Теоретико-множественные операторы
- •4.3 Специальные реляционные операторы
- •4.4 Зависимые реляционные операторы
- •4.5 Примитивные реляционные операторы
- •4.6 Запросы, невыразимые средствами реляционной алгебры
- •4.7 Кросс-таблицы
- •5. Проектирование бд
- •5.1. Цели и этапы проектирования
- •5.2 Уровни моделирования (проектирования) бд
- •5.3 Критерии оценки качества логической модели данных
- •5.4 Нормализация и ее необходимость
- •5.5 Теория нормализации
- •5.6 Элементы модели "сущность-связь"
- •Основные понятия er-диаграмм
- •Ошибка! Ошибка связи.
- •6. Элементы языка sql
- •6.1 Типы данных
- •6.2 Операторы dml (определения объектов базы данных)
- •6.2.1 Операторы работы с таблицами
- •6.3 Операторы dml (операторы манипулирования данными)
- •6.3.1 Примеры использования операторов манипулирования данными
- •Insert - вставка строк в таблицу
- •6.3.2 Update - обновление строк в таблице
- •6.3.3 Delete - удаление строк в таблице
- •6.3.4 Выбор данных из таблицы select
- •6.3.4.1 Общий синтаксис команды select
- •6.3.4.2 Примеры работы с использованием оператора select
- •Использование агрегатных функций в запросах
- •Использование агрегатных функций с группировками
- •Использование подзапросов
- •Использование объединения, пересечения и разности
- •6.3.4.3 Порядок выполнения оператора select
- •6.3.4.4 Реализация реляционной алгебры средствами оператора select (Реляционная полнота sql)
- •6.4 Объекты и концепции базы данных
- •6.4.1 Таблицы (Tables)
- •6.4.2 Столбцы (Columns)
- •6.4.3 Типы данных (Data types)
- •Тип данных blob
- •6.4.4 Домены (Domains)
- •6.4.5 Справочные ограничения целостности (Referential integrity constraints)
- •6.4.6 Индексы (Indexes)
- •6.4.7 Представления (Views)
- •6.4.8. Хранимые процедуры (Stored procedures)
- •6.4.9 Триггеры (Triggers)
- •6.4.10 Генераторы (Generators)
- •6.4.11 Защита (Security)
- •6.5 Операторы sql для работы с объектами бд
- •6.5.1 Представления
- •6.5.2 Хранимые процедуры
- •6.5.3 Генераторы
- •6.5.4 Триггеры
- •6.5.5 Индексы
- •6.6 Инструкции sql
- •7. Физическая организация и работа субд
- •7.1 Хранение данных
- •Ошибка! Ошибка связи.
Ошибка! Ошибка связи.
Рис. 7.
Тип данных - адекватно понятию типа данных в языках программирования.
В нашем примере мы имеем дело с данными трех типов: строки символов, целые числа и «деньги».
Понятие домена более специфично для баз данных, хотя и имеет некоторые аналогии с подтипами в некоторых языках программирования. В самом общем виде домен определяется заданием некоторого базового типа данных, к которому относятся элементы домена, и произвольного логического выражения, применяемого к элементу типа данных. Если вычисление этого логического выражения дает результат "истина", то элемент данных является элементом домена. Наиболее правильной интуитивной трактовкой понятия домена является понимание домена как допустимого потенциального множества значений данного типа. Если вычисление логического выражения относительно элемента данных дает результат "истина", то элемент является принадлежит домену.
Например, домен "ФИО" в нашем примере определен на базовом типе строк символов, но в число его значений могут входить только те строки, которые могут изображать имя (в частности, такие строки не могут начинаться с мягкого знака).
Отношения – это именованное множество пар {имя атрибута, имя домена (или типа, если понятие домена не поддерживается)}.
Обычным житейским представлением отношения является таблица, заголовком которой является схема отношения, а строками - кортежи отношения-экземпляра; в этом случае имена атрибутов именуют столбцы этой таблицы. Поэтому иногда говорят "столбец таблицы", имея в виду "атрибут отношения". Когда мы перейдем к рассмотрению практических вопросов организации реляционных баз данных и средств управления, мы будем использовать эту житейскую терминологию. Этой терминологии придерживаются в большинстве коммерческих реляционных СУБД.
Степень или "арность" схемы отношения - мощность этого множества.
Степень отношения СТУДЕНТЫ равна четырем, то есть оно является 4-арным. Если все атрибуты одного отношения определены на разных доменах, осмысленно использовать для именования атрибутов имена соответствующих доменов (не забывая, конечно, о том, что это является всего лишь удобным способом именования и не устраняет различия между понятиями домена и атрибута).
Кортеж, соответствующий данной схеме отношения, - это множество пар {имя атрибута, значение}, которое содержит одно вхождение каждого имени атрибута, принадлежащего схеме отношения.
Тем самым, степень или "арность" кортежа, т.е. число элементов в нем, совпадает с "арностью" соответствующей схемы отношения. Попросту говоря, кортеж - это набор именованных значений заданного типа.
3.2 Фундаментальные свойства отношений
1. В отношении нет одинаковых кортежей
Это следует из того факта, что тело отношения это математическое множество (множество кортежей). Множества же по определению не содержат повторяющихся элементов.
2. Кортежи не упорядочены сверху вниз
Это следует из того свойства, что тело отношения – это математическое множество. Простые множества являются неупорядоченными. Поэтому если в каком-либо отношении кортежи расположить в другом порядке, отношение все равно останется тем же самым. Следовательно, относительно отношения нельзя сказать, что существует понятие, скажем второго или 4пятого кортежей.
3. Атрибуты не упорядочены слева направо
Поэтому с точки зрения реляционной теории отношение, в котором атрибуты представлены в таком порядке: студ_билет, студ_ФИО, студ_Возраст, студ_стип и отношение, у которого атрибуты представлены в порядке студ_билет, студ_стип, студ_Возраст, студ_ФИО, будут одним и тем же отношением. Т.о. не существует первого, второго, четвертого атрибута. Атрибут всегда определяется по имени, а не по расположению. Это как раз и помогает избежать путаницы при написании программ.
4. Все значения атрибутов отношения атомарные
Применительно к отображению отношений в виде таблиц это свойство говорит о том, что в каждой позиции на пересечении столбца и строки расположено только одно значение, а не несколько. Таблицы, удовлетворяющие этому условию, находятся в так называемой первой нормальной форме.
Замечание!
Но в реальной жизни бывают ситуации, когда значение атрибута не может быть представлена атомарно. Например, часто в исторических записях дата рождения иногда указывается «Не известна», или например в графе адрес прописки – «БОМЖ». Как же тогда решить проблему отсутствия информации? Кодд предложил использовать в этом случае специальные значения, которые называются NULL. Т.е. если в кортеже, в какой либо позиции атрибута встречается значение NULL, то считается, что значение атрибута отсутствует.
5. Первичные ключи
Любое отношение должно иметь один или несколько атрибутов, значения которых однозначно идентифицируют его кортеж. Такой атрибут (или комбинация атрибутов) называется первичным ключом. Для нашего примера это атрибут «пор_номер». При этом остальные атрибуты будут считаться альтернативными ключами.
Первичные ключи должны удовлетворять требованиям:
а) уникальность, т.е. в каждый момент времени никакие два кортежа отношения не должны иметь одинаковых комбинаций значений, входящих в ключ атрибутов.
Например, если в таблице поле «студ_билет» определено как в первичный ключ, то в этом отношении не должно быть два одинаковых кортежа. Если же в качестве кортежа были выбраны 2 атрибута, то комбинации значений этих атрибутов для данной таблицы также должны быть уникальны.
б) неизбыточность т.е. ни один из входящих в ключ атрибутов не м.б. исключен из ключа без нарушения правила уникальности.
Замечание (!) На практике выполнение первого требования обязательно. Для второго допустимо нарушение.
Правило целостности объектов (следует из требования а) и из соображений реального мира. Нельзя идентифицировать объект по значению NULL )
В первичном ключе не м.б. отношений со значением NULL!!!
В реляционной модели первичные ключи выполняют функцию уникальной идентификации (т.е. служат для предоставления необходимых признаков по идентификации объектов). И если каким-либо значением первичного ключа окажется значение NULL, то можно будет сказать, что существует реальный объект, который не имеет опознавательных признаков, что в действительности бессмысленно.