- •Оглавление
- •1. Основные понятия информационных систем
- •1.1. История возникновения информационных систем
- •1.2. Современное понятие информационной системы
- •2. Автоматизированные информационные системы
- •2.1. Преимущества автоматизированных информационных систем
- •2.2. Классификация аис
- •2.2.1. Классификация по типу хранимых данных.
- •2.2.2. Классификация по характеру обработки данных.
- •2.2.3. Классификация по степени интеграции данных и автоматизации управления.
- •2.2.4. Классификация по степени распределенности.
- •2.2.5 Классификация аис по другим признакам
- •3. Банки данных
- •3.1. Понятие банка данных
- •3.2. Преимущества банков данных
- •3.3. Предпосылки широкого использования банков данных
- •3.4. Общие требования к банкам данных
- •3.5. Компоненты банка данных
- •3.5.1. Информационная компонента
- •3.5.2. Программные средства банков данных
- •3.5.3. Языковые средства БнД
- •3.5.4. Технические средства банков данных
- •3.5.5. Организационно-методические средства.
- •4. Виды банков данных
- •4.1. Банки документов
- •4.2. Банки знаний
- •4.3. Экспертные системы
- •4.4. Хранилища данных
- •5. Системы управления базами данных (субд)
- •5.1. Назначение и состав субд
- •5.2. Классификация субд
- •5.3. Архитектура субд
- •5.4. Функции субд
- •5.5. Основные распространенные субд
- •6. Основы проектирования баз данных
- •6.1. Основные понятия в теории баз данных
- •6.2. Связи между сущностями
- •6.3. Этапы проектирования базы данных
- •6.3.1. Инфологическое моделирование
- •6.3.2. Даталогическое моделирование
- •6.3.3. Физическое моделирование
- •7. Модели данных
- •7.1. Иерархическая модель данных
- •7.2. Сетевая модель данных
- •7.3. Понятие реляционной модели данных
- •7.3. Постреляционная модель данных
- •7.4. Объектно-ориентированная модель данных
- •7.5. Объектно-реляционная модель данных
- •8. Реляционная модель данных
- •8.1. Понятие «отношения» в реляционной модели данных
- •8.2. Свойства отношений
- •8.3. Требования к реляционным базам данных
- •8.4. Основные математические понятия
- •9. Нормализация баз данных
- •9.1. Первая нормальная форма
- •9.2. Вторая нормальная форма
- •9.3. Третья нормальная форма
- •9.4. Нормальная форма Бойса – Кодда
- •9.5. Многозначные зависимости
- •9.6. Четвертая нормальная форма
- •9.7. Пятая нормальная форма
- •9.8. Принципы выбора нормальной формы для проектируемой базы данных
- •10. Введение в язык запросов sql
- •10.1. Назначение языка sql
- •10.2. Достоинства языка sql
- •10.3. Состав языка sql
- •10.4. Трехзначная логика
- •10.5. Основные типы данных языка sql
- •11. Sql. Некоторые Операторы языка определения данных
- •11.1. Оператор create table
- •11.2. Оператор alter table
- •11.3. Оператор drop table
- •12. Sql. Операторы изменения данных
- •12.1. Оператор insert into
- •12.2. Оператор update
- •12.3. Оператор delete from
- •13. Sql. Выбор информации из базы данных
- •13.1. Общее описание оператора select
- •13.1.1. Назначение оператора select
- •13.1.2. Синтаксическая диаграмма оператора select
- •13.2. Обязательные предложения оператора select
- •13.2.1. Предложение select.
- •13.2.2. Предложение from.
- •13.2.3. Примеры простейших запросов на выборку.
- •13.3. Отбор строк (предложение where)
- •13.3.1. Сравнение
- •13.3.2. Проверка на принадлежность диапазону значений (between)
- •13.3.3. Проверка на членство во множестве (in)
- •13.3.4. Проверка на соответствие шаблону (like)
- •13.3.5. Отслеживание отсутствия значений (null)
- •13.3.6. Составные условия отбора строк
- •13.4. Сортировка результатов запроса (предложение order by)
- •13.5 Примерный порядок выполнения простых однотабличных запросов
- •13.6. Многотабличные запросы
- •13.6.1. Полные имена столбцов.
- •13.6.2. Псевдонимы таблиц.
- •13.6.3. Особенности многотабличных запросов.
- •13.6.4. Примеры многотабличных запросов.
- •13.6.5. Соединение таблиц в предложении from.
- •13.6.6. Примерный порядок выполнения многотабличных запросов
- •13.7. Итоговые запросы на чтение
- •13.7.1. Агрегатные функции.
- •13.7.2. Группировка строк (предложение group by)
- •13.7.3. Отбор групп строк (предложение having)
- •13.7.4. Примерный порядок выполнения итоговых запросов
- •13.8. Вложенные запросы на чтение (подзапросы)
- •13.8.1. Использование вложенных запросов
- •13.8.2. Сравнение с результатом вложенного запроса
- •13.8.3. Проверка на принадлежность результатам вложенного запроса
- •13.8.4. Проверка на существование (exists)
- •13.8.5. Многократное сравнение (any, all)
- •13.9. Объединение результатов нескольких запросов
8.2. Свойства отношений
Свойства отношений непосредственно следуют из приведенного выше определения отношения. В этих свойствах в основном и состоят различия между отношениями и таблицами.
В отношении нет одинаковых кортежей. Действительно, тело отношения есть множество кортежей и, как всякое множество, не может содержать неразличимые элементы. Таблицы в отличие от отношений могут содержать одинаковые строки.
Кортежи не упорядочены (сверху вниз). Действительно, несмотря на то, что мы изобразили отношение «Сотрудники» в виде таблицы, нельзя сказать, что сотрудник Иванов «предшествует» сотруднику Петрову. Причина та же – тело отношения есть множество, а множество не упорядочено. Это вторая причина, по которой нельзя отождествить отношения и таблицы – строки в таблицах упорядочены. Одно и то же отношение может быть изображено разными таблицами, в которых строки идут в различном порядке.
Атрибуты не упорядочены (слева направо). Т.к. каждый атрибут имеет уникальное имя в пределах отношения, то порядок атрибутов не имеет значения. Это также третья причина, по которой нельзя отождествить отношения и таблицы – столбцы в таблице упорядочены. Одно и то же отношение может быть изображено разными таблицами, в которых столбцы идут в различном порядке.
Все значения атрибутов атомарны. Это следует из того, что лежащие в их основе атрибуты имеют атомарные значения. Это четвертое отличие отношений от таблиц – в ячейки таблиц можно поместить что угодно – массивы, структуры, и даже другие таблицы.
Из свойств отношения следует, что не каждая таблица может задавать отношение. Для того, чтобы некоторая таблица задавала отношение, необходимо, чтобы таблица имела простую структуру (содержала бы только строки и столбцы, причем, в каждой строке было бы одинаковое количество полей), в таблице не должно быть одинаковых строк, любой столбец таблицы должен содержать данные только одного типа, все используемые типы данных должны быть простыми.
Каждое отношение можно считать классом эквивалентности таблиц, для которых выполняются следующие условия:
- таблицы имеют одинаковое количество столбцов;
- таблицы содержат столбцы с одинаковыми наименованиями;
- столбцы с одинаковыми наименованиями содержат данные из одних и тех же доменов;
- таблицы имеют одинаковые строки с учетом того, что порядок столбцов может различаться.
Все такие таблицы есть различные изображения одного и того же отношения.
8.3. Требования к реляционным базам данных
1) каждая таблица должна иметь уникальное имя;
2) столбцы одной таблицы должны иметь уникальные имена, поэтому порядок следования столбцов в таблице не имеет значения;
3) каждая строка таблицы должна быть уникальной, т.е. в одной таблице не может быть двух одинаковых строк;
4) в каждой ячейке таблицы может быть только одно значение;
5) в идеале каждое данное должно храниться в базе в единственном экземпляре, т.е. не должно быть избыточности и дублирования данных. На практике избыточность данных должна быть сведена к разумному минимуму;
6) в базе не должны содержаться противоречивые данные, что достигается на практике обеспечением целостности данных.
Первые два требования достаточно просты для понимания. Стоит отметить, что в разных таблицах столбцы могут иметь одинаковые названия.
Выполнение третьего требования предполагает наличие в каждой таблице минимум одного возможного ключа. Значение возможного ключа в каждой строке таблицы уникально. Возможный ключ может быть простым или составным. Простой возможный ключ – это столбец таблицы, значение в котором уникально в каждой строке. Составной возможный ключ – это несколько столбцов таблицы, совокупность значений в которых уникально в каждой строке. В общем случае в таблице может быть несколько возможных ключей.
Из всех возможных ключей необходимо выбрать один (желательно, наиболее компактный и неинформативный) и сделать его первичным ключом.
Таким образом, первичный ключ – это один из возможных ключей, который используется для идентификации каждой строки в таблице (другими словами, первичный ключ – ссылка на строку в таблице, по значению первичного ключа однозначно можно найти максимум одну строку в таблице).
Для каждой таблицы обязательно наличие первичного ключа.
Предпочтительно использование простых первичных ключей, а не составных. Из нескольких простых возможных ключей следует выбирать целочисленные, а не текстовые (целое число занимает в общем случае гораздо меньше места в памяти ЭВМ, чем текст). Кроме того, в качестве первичного ключа лучше использовать столбец, значение которого никогда не изменится в будущем. В большинстве случаев в таблицу добавляют целочисленный столбец ID и назначают его первичным ключом. Реляционные СУБД самостоятельно отслеживают данные, вводимые пользователем в столбцы, назначенные первичным ключом, и не позволяют оставить эти данные незаполненными (шестое требование, обязательность данных) или повторить одно и то же значение в нескольких строках.
Четвертое требование означает, что в ячейке таблицы не может располагаться список или множество значений.
Если в реальности для какого-либо объекта в некотором столбце возможно несколько значений, то эти несколько значений следует разместить в разных строках; в этом случае все остальные столбцы придется продублировать информацией из первой строки.
После этого необходимо избавиться от избыточности данных (см. комментарии к пятому требованию).
Пятое требование. Для уменьшения избыточности данных необходимо выявить столбцы, в которых одно и то же значение повторяется (может повторяться) несколько раз. Если такой столбец найден, сначала следует принять решение: стоит ли избавляться от избыточности в этом столбце (привести пример со столбцом «Год рождения». Если такое решение принято, то этот столбец следует сделать отдельной сущностью, т.е.:
- создать отдельную таблицу;
- перенести этот столбец и другие столбцы, которые (функционально или транзитивно) зависят от данного столбца, в новую таблицу;
- обеспечить наличие в новой таблице целочисленного столбца «ID» (т.е. если еще не было – добавить) в качестве первичного ключа;
-в исходную таблицу добавить столбец, в котором будут храниться значения «ID» из новой таблицы (такой столбец называется внешним ключом, желательно, чтобы его название заканчивалось на «_ID»).
В общем случае внешний ключ – это столбец (или комбинация столбцов), каждое значение в котором может быть равно только одному из значений первичного ключа другой (связанной) таблицы.
Если столбец является внешним ключом, то это означает, что две таблицы связаны, и СУБД будет самостоятельно следить за целостностью информации во внешнем ключе. Это обеспечивает выполнение шестого требования в части ссылочной целостности.
Примечание. Подобным же образом можно обосновать необходимость использования трех таблиц для реализации связи «многие-ко-многим» в реляционной модели данных.
Шестое требование. Термин «целостность данных» относится к правильности и полноте информации, содержащейся в базе данных. При изменении содержимого базы данных (добавление, обновление, удаление) может произойти нарушение целостности содержащихся в ней данных. Например:
для номера телефона не указано имя контакта;
при добавлении нового имени контакту ему присвоен уже имеющийся у другого имени контакта идентификационный номер;
для контакта указана несуществующая мелодия.
Одной из важнейших задач реляционной СУБД является поддержка целостности данных на максимально возможном уровне.
Для сохранения непротиворечивости и правильности хранимых данных в реляционных СУБД устанавливается одно или несколько условий целостности данных. Эти условия определяют, какие значения могут быть записаны в базу данных в результате добавления или обновления данных. Рассмотрим некоторые основные типы условий целостности данных.
Обязательность данных. Некоторые столбцы в базе данных должны обязательно содержать значения в каждой строке, т.е. это столбцы, обязательные для заполнения.
Целостность таблицы. В каждой таблице должен быть первичный ключ. Первичный ключ обязателен для заполнения.
Ссылочная целостность. Для корректной связи между таблицами используются внешние ключи. Внешний ключ может принимать только значения, имеющиеся в первичном ключе другой (связанной) таблицы.
Если в СУБД установлены вышеперечисленные условия целостности данных, то СУБД сама следит за их выполнением.