
- •Содержание
- •Глава 1. Основные понятия 6
- •Глава 2. Модели данных 19
- •Глава 3. Функциональные зависимости 46
- •Глава 4. Нормализация 54
- •Глава 5. Методология концептуального проектирования 69
- •Глава 6. Методология логического проектирования баз данных реляционного типа 75
- •Глава 7. Методология физического проектирования реляционных бд 93
- •Глава 8. Язык структурированных запросов sql. 107
- •Предисловие
- •Глава 1. Основные понятия
- •1.1. Информационные системы с базами данных.
- •1.2. Функции и возможности субд
- •1.3. Программные компоненты субд
- •1.4. Архитектура среды базы данных
- •1.5. Реляционные объекты данных: терминология
- •1.6. Формальные определения
- •1.6.1. Домены
- •1.6.2. Отношения
- •1.7. Целостность реляционных данных
- •1.7.1. Потенциальные ключи
- •1. Свойством уникальности.
- •2. Свойством не избыточности.
- •1.7.2. Первичные и альтернативные ключи
- •1.7.3. Внешние ключи
- •1.7.4. Ссылочная целостность
- •1.7.5. Правила внешних ключей
- •Глава 2. Модели данных
- •2.1. Элементы er-модели
- •2.1.1. Множество сущностей
- •2.1.2. Атрибуты
- •2.1.3. Связи
- •2.1.4. Рекурсивная связь
- •2.1.5. Атрибуты связей
- •2.2. Структурные ограничения
- •2.2.1. Связь "один-к-одному"
- •2.2.2. Связь "один-ко-многим"
- •2.2.3. Связь "многие-ко-многим"
- •2.2.4. Степень участия
- •2.2.5. Многосторонние связи
- •2.2.6. Слабые множества сущностей
- •2.3. Проблемы er-моделирования (Материал данного параграфа не обязателен для изучения)
- •2.3.1. Ловушки разветвления
- •2.3.2. Ловушка разрыва
- •2.4. Ееr-модель
- •2.4.1. Суперклассы и подклассы типов сущностей
- •2.4.2. Наследование атрибутов
- •2.4.3. Специализация
- •2.4.4. Генерализация
- •2.4.5. Ограничения, накладываемые на процедуры специализации и генерализации
- •2.4.6. Категоризация
- •2.5. Реляционные модели
- •2.5.1. От er-диаграмм к реляционным схемам
- •2.5.2. От er-связей к к отношениям
- •2.5.3. Объединение отношения
- •2.5.4. Преобразование слабых множеств сущностей
- •Глава 3. Функциональные зависимости
- •3.1.Основные определения
- •3.2. Тривиальные и нетривиальные зависимости
- •3.3. Замыкание множества зависимостей
- •3.4. Правила вывода Армстронга
- •3.5. Неприводимое множество зависимостей
- •Примеры
- •Глава 4. Нормализация
- •4.1. Декомпозиция без потерь
- •4.2. Первая, вторая и третья нормальные формы.
- •Вторая нормальная форма (2нф).
- •Третья нормальная форма ( 3нф ).
- •Нормальная форма Бойса-Кодда
- •4.3. Многозначные зависимости
- •4.4. Четвертая нормальная форма (4нф)
- •4.5. Пятая нормальная форма (5нф)
- •4.6. Итоговая схема процедуры нормализации
- •4.7. Альтернативный набор определений нфбк, 4нф и 5нф
- •4.8. Выделим цели процесса нормализации
- •4.9. Другие нормальные формы
- •Глава 5. Методология концептуального проектирования
- •5.1. Источники представления пользователей о предметной области
- •5.2. Определение типов сущностей
- •5.3. Определение типов связей
- •5.4. Определение атрибутов
- •5.5. Определение доменов атрибутов
- •5.6. Определение потенциальных и первичных ключей
- •5.7. Генерализация и специализация типов сущностей
- •5.8. Создание диаграммы "сущность-связь"
- •5.9. Обсуждение локальных концептуальных моделей данных с конечными пользователями
- •Глава 6. Методология логического проектирования баз данных реляционного типа
- •6.1. Преобразование локальной концептуальной модели данных в локальную логическую модель
- •6.1.1. Удаление связей типа m:n
- •6.1.2. Удаление сложных связей
- •6.1.3. Удаление рекурсивных связей
- •6.1.4. Удаление связей с атрибутами
- •6.1.5. Удаление множественных атрибутов
- •6.1.6. Перепроверка связей типа 1:1
- •6.1.7. Удаление избыточных связей
- •6.2. Наборы отношений локальных логических моделей данных
- •6.2.1. Сильные типы сущностей
- •6.2.2. Слабые типы сущностей
- •6.2.3. Бинарные связи типа "один-к-одному" (1:1)
- •6.2.4. Бинарные связи типа "один-ко-многим" (1:м)
- •6.2.5. Связи типа "суперкласс/подкласс"
- •6.2.6. Документирование созданных отношений и атрибутов внешних ключей
- •6.3. Проверка модели с помощью правил нормализации
- •6.4. Проверка модели в отношении транзакций
- •6.5. Создание диаграмм "сущность-связь"
- •6.7.1. Слияние локальных логических моделей данных в единую глобальную модель данных
- •6.7.1.1. Анализ имен сущностей и их первичных ключей
- •6.7.1.2. Анализ имен связей
- •2. Слияние эквивалентных сущностей с различными первичными ключами
- •3. Слияние сущностей с различными именами, имеющих одинаковые или различные первичные ключи
- •7.1.1. Oписание на языке sql стандарта iso 1992 (sql2)
- •Листинг 1. Операторы языка sql, предназначенные для создания таблицы
- •7.1.2. Реализация с использованием триггеров
- •Пример 1
- •7.1.3. Реализация с использованием уникальных индексов
- •Пример 2
- •7.2. Реализация бизнес-правил предприятия в среде целевой субд
- •7.3. Организация эффективного хранения данных
- •7.3.1. Анализ транзакций.
- •7.3.2. Выбор файловой структуры.
- •Последовательные файлы
- •Хешированные файлы
- •Индексно-последовательные файлы
- •Двоичные деревья
- •7.3.3. Определение вторичных индексов.
- •7.3.4. Анализ необходимости введения контролируемой избыточности.
- •7.3.5. Определение требований к дисковой памяти.
- •Последовательные файлы
- •Хешированные файлы
- •7.4. Разработка механизмов защиты
- •7.4.1. Разработка пользовательских представлений (видов).
- •7.4.2. Определение прав доступа.
- •7.5. Организация мониторинга и настройка функционирования системы
- •Глава 8. Язык структурированных запросов sql.
- •Операторы ddl
- •Типы данных
- •Создание файла бд
- •Создание (определение) таблиц
- •Определение столбцов
- •Примеры создания таблиц
- •Удаление таблиц
- •Модификация структуры таблиц
- •Операторы, изменяющие информацию в бд
- •Добавление новых данных.
- •Удаление существующих данных.
- •Обновление существующих данных.
- •Запрос информации из бд
- •Инструкция select
- •Предложение select.
- •Предложение from.
- •Запросы
- •Порядок выполнения многотабличных запросов
- •Виды объединений
- •Предложение where.
- •Условия отбора
- •Составные или сложные условия отбора
- •Предложение group by.
- •Предложение having.
- •Предложение order by.
- •Применение оператора select в инструкции insert
Операторы ddl
В данной лекции мы рассмотрим основные типы данных определённых стандартом SQL, а также операторы группы DDL, необходимые для создания базы данных с точки зрения разработчика. Здесь намеренно не рассматриваются вопросы администрирования БД, разграничения прав доступа и настройки быстродействия. Отчасти это обусловлено вводным характером этой лекции, отчасти тем, что эти разделы SQL наиболее подвержены влияниям со стороны разработчиков различных СУБД, и, как следствие, сильно отличаются в различных исполнениях.
В процессе создания БД обычно используются следующие виды операторов:
1) Создание файла БД.
2) Создание (определение) таблиц.
3) Удаление таблиц.
4) Модификация структуры таблиц.
Типы данных
Стандартом SQL2 определены следующие основные типы данных:
Различия в поддержке типов данных в разных СУБД существенно препятствуют переносимости приложений, в которых используется SQL, и лишает смысла более подробное рассмотрение операций с различными типами данных в отрыве от конкретной реализации.
Создание файла бд
В СУБД, установленных в сети и предназначенных для использования большим количеством пользователей, за создание новых баз данных отвечает только администратор(ы). Если вы работаете с базой данных на персональном компьютере, то, скорее всего, являетесь пользователем, разработчиком и администратором в одном лице. В стандарте SQL1 содержится спецификация, описывающая язык задания структуры файла БД, но не указывается способ создания этого файла. Это объясняется тем, что в процессе эволюции различных СУБД их разработчики выработали различные подходы к этому вопросу. И тем не менее, на практике, для создания и удаления баз данных используется пара инструкций CREATE DATABASE/DROP DATABASE.
Создание (определение) таблиц
Данный блок представлен по существу одним оператором: CREATE TABLE.
Синтаксическая диаграмма (рис. 1) иллюстрирует все возможные варианты формирования строки. Она может показаться несколько громоздкой, поскольку требуется указать много элементов и параметров для них. Более того, некоторые параметры в одних СУБД присутствуют, а в других нет. На практике же создать таблицу относительно несложно. После выполнения инструкции в БД появляется новая таблица с именем заданным в поле «имя_таблицы» (см. Диаграмму 1.).
Диаграмма 1.
Определение столбцов
Определение столбцов таблицы задаётся выражением «определение_столбца», которое в свою очередь состоит из:
«имя_столбца», которое используется для обращения к его содержимому и должно быть уникальным в рамках определения данной таблицы.
«тип_данных», допустимый стандартом SQL1 или SQL2 тип данных, который может храниться в этом столбце.
«значение» Не обязательно его указывать. Значение по умолчанию, задаваемое после ключевого слова DEFAULT, необязательное, которое присваивается столбцу если в инструкции INSERT не указано значение для него.
Ключевое слово NOT NULL указывающее, что значение в данном должно быть обязательно определено.
Стандарт SQL2 позволяет указывать в определении столбца несколько дополнительных элементов, с помощью которых можно ограничить значения данных в столбце, а также установить, что столбец должен содержать уникальные значения либо являться первичным или внешним ключом. На диаграмме это представлено как поле «определение_ограничения_таблицы» и задаётся ключевым словом CONSTRAINT, после которого указывается название внешнего ключа (требуется для того, что бы с ним можно было потом манипулировать: удалять или изображать в сообщениях об ошибках).
Далее следуют следующие возможные варианты ограничений:
-- «определение_первичного_ключа»:
задаётся при помощи ключевых слов PRIMARY KEY и следующего за ними перечисления столбцов, составляющих первичный ключ, в круглых скобках через запятую.
-- «определение_внешнего_ключа»:
задаётся при помощи ключевых слов FOREIGN KEY и следующего за ними перечисления столбцов данной таблицы, составляющих внешний ключ, в круглых скобках через запятую и указания на таблицу, первичный ключ которой(или его часть) используется для связи при помощи ключевого слова REFERENCES и следующего за ним имени таблицы. При необходимости можно указать, какие именно столбцы первичного ключа связываемой таблицы будут использоваться. Типы данных взаимоувязываемых колонок должны совпадать.
Возможно также:
- указание частичного или полного совпадения значений колонок в увязываемых таблицах (имеет смысл исключительно если применяется составной внешний ключ, т.е. включающий более чем одну колонку).
- определение поведения данной таблицы в случаях удаления или изменение значений колонок с соответствующим первичным ключом в связанной таблице соответственно ON DELETE (при удалении) или ON UPDATE (изменении): либо CASCADE (удалять все записи с таким внешним ключом из данной таблицы), либо SET NULL (устанавливать в неопределённое значение), либо SET DEFAULT (устанавливать в значение по умолчанию), либо NO ACTION (никаких действий).
-- «условие_уникальности»
Задаётся ключевым словом UNIQUE и перечислением набора из одной и более колонок, сочетание которых должно оставаться в таблице уникальным, в круглых скобках, через запятую.
-- «условие_на_значение»
Задаётся ключевым словом CHECK и булевским выражением, задающим ограничения на значения в строке таблицы. Например, предположим, что в таблице есть такие колонки: DATE_BEG и DATE_END, -- отображающие дату начала и дату окончания какого-то процесса во времени. Логично, что дата начала не должна быть больше даты окончания, поэтому можно запретить вставку в нашу таблицу таких строк , где это условие нарушено. Выражение ограничения будет выглядеть в таком случае: CHECK ( DATE_BEG < DATE_END).
Возможность нарушить ограничение в процессе изменения данных (т.е. если в процессе изменения существующих в таблице строк данное ограничение будет нарушено, ошибки не возникнет до выполнения команды COMMIT), задаётся ключевыми словами DEFERRABLE (можно нарушить, до выполнения команды COMMIT) или NOT DEFERRABLE (нельзя). Также отдельно можно указать для вновь вставляемых строк возможность или невозможность нарушения этого ограничения изначально до команды COMMIT, которые задаются соответственно ключевыми словами INITIALLY DEFERRED (можно вставить строку, нарушив это ограничение, но только до команды COMMIT) и INITIALLY IMMEDIATE (нельзя вставить строку, нарушающую это ограничение).