
- •Содержание
- •Глава 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
Примеры создания таблиц
Рассмотрим несколько простых примеров создания таблиц при помощи команды CREATE TABLE. Почему бы не взять приводившийся ранее пример с городами и регионами?
Создание таблицы для хранения данных о регионах:
CREATE TABLE Regions (
KodR INTEGER NOT NULL,
Region VARCHAR(50) NOT NULL,
PRIMARY KEY (KodR)
)
С помощью этой команды мы создали таблицу со структурой, идентичной приведённой, в примере в самом начале, но пока не содержащую ни одной записи. Далее создадим таблицу, которая будет содержать названия городов.
CREATE TABLE Cities (
KodC INTEGER NOT NULL,
City VARCHAR(50) NOT NULL,
RegRel INTEGER,
PRIMARY KEY (KodC),
CONSTRAINT Reg_Cities_FK FOREIGN KEY (RegRel) REFERENCES Regions (KodR)
ON DELETE SET NULL
)
После выполнения этих двух команд в БД появятся следующие объекты: две таблицы («Cities» и «Regions»), два первичных ключа (названия для них обычно генерируются СУБД) и один внешний ключ («Reg_Cities_FK»).
Удаление таблиц
Данная группа так же представлена всего одним оператором DROP TABLE. Структура его проста:
DROP TABLE имя_таблицы
Также можно указать на необходимость дополнительной проверки на наличие ссылок на данную таблицу из других объектов БД, которое задаётся ключевыми словами RESTRICT (если в БД есть объекты, ссылающиеся на данную таблицу, то попытка удалить её вызовет ошибку) или CASCADE (даже если существуют ссылающиеся объекты, всё равно таблица будет удалена, но так же будут удалены все ссылающиеся на неё объекты БД). Все данные, содержащиеся в таблице на момент удаления, будут потеряны и восстановлению не подлежат.
Модификация структуры таблиц
В процессе работы с БД пользователю зачастую требуется изменить структуру существующих таблиц, чтобы приспособить их к изменившимся внешним условиям без потери уже существующей в таблице информации. Синтаксическая диаграмма команды представлена на Диаграмме 2.
Диаграмма 2.
Инструкция, задаваемая ключевыми словами ALTER TABLE, даёт возможность произвести над таблицей следующие операции:
добавить в таблицу определение столбца;
удалить столбец из таблицы;
изменить значение по умолчанию для какого-либо столбца;
добавить или удалить первичный ключ таблицы;
добавить или удалить внешний ключ таблицы;
добавить или удалить условие уникальности;
добавить или удалить условие на значение;
Соответственно для инструкций, добавляющих что бы то ни было в таблицу, сразу после названия таблицы в инструкции ALTER TABLE следует ключевое слово ADD, после которого, в зависимости от того, что вы хотите добавить к определению таблицы, следуют либо определение столбца (аналогичное определению в инструкции CREATE TABLE) или определение ограничения на столбец таблицы (также аналогичный соответствующему определению в инструкции CREATE TABLE).
Инструкция на удаление столбца задаётся ключевым словом DROP, после которого указывается имя столбца, который вы хотите удалить, и указание, как должна влиять команда на другие, возможно связанные с удаляемым столбцом объекты БД, задаваемое ключевыми словами RESTRICT и CASCADE – проверять перед удалением на наличие ссылающихся объектов и выдавать ошибку, если таковые найдутся, и удалять также и все связанные объекты соответственно.
Инструкция удаления ограничения на таблицу также задаётся ключевым словом DROP, после которого следует ключевое слово CONSTRAINT, название удаляемого ограничения и одно из ключевых слов CASCADE или RESTRICT.
Для изменения уже существующих в таблице определений столбцов (например для изменения значения по умолчанию) применяется ключевое слово ALTER, после которого следует название столбца и одна из четырёх возможных команд:
1) SET DEFAULT значение – задаёт новое значение по умолчанию, определяемое полем «значение»
2) DROP DEFAULT – удаляет значение по умолчанию из определения этого столбца.
3) SET NULL – устанавливает, что значения в столбце не может быть пустым.
4) SET NOT NULL – снимает ограничение на пустые значения.
Рассмотрим простой пример применения инструкции ALTER TABLE. Предположим, что в процессе использования структуры данных, определённой нами ранее в примере для инструкции CREATE TABLE, нам потребовалось ввести в таблицу Cities ещё одну колонку, определяющую телефонный код города. В таком случае инструкция ALTER TABLE будет иметь следующий вид:
ALTER TABLE Cities ADD (Phone_Kod INTEGER);
Предположим так же, что сочетание значений во введённой нами колонке и колонке, содержащей название города, обязано быть уникальным. Тогда следует добавить ещё и ограничение, определяющие это условие:
ALTER TABLE Cities ADD UNIQUE (Phone_Kod, City);
Стандарт SQL2 требует, чтобы инструкция ALTER TABLE применялась для единичного изменения таблицы. Например, для добавления столбца и определения ограничения нам потребовались две различные инструкции. В некоторых СУБД это ограничение ослаблено и допускается присутствие нескольких предложений в одной инструкции ALTER TABLE.
В SQL команды CREATE, DROP и ALTER образуют основу языка определения данных (DDL). Инструкции с этими командами используются во всех реляционных СУБД для управления таблицами. В большинстве существующих на сегодняшний момент СУБД эти команды также используются для образования дополнительных инструкций DDL, которые создают, удаляют и модифицируют другие объекты базы данных, имеющиеся в конкретной СУБД. Например, в Oracle для создания хранимых процедур используется инструкция CREATE PROCEDURE. В связи с тем, что стандарт SQL не способен включить в себя определения для абсолютно всех возможных видов объектов различных СУБД, был приняты некоторые соглашения относительно внедрения новых DDL инструкций в реализациях стандарта. Вот основные из них:
первой в инструкции должна стоять команда CREATE/DROP/ALTER;
второе слово должно определять тип объекта;
третье слово должно представлять собой имя объекта, подчиняющееся соглашениям об использовании имён в SQL.
Если не считать общие команды CREATE/DROP/ALTER, то эти инструкции являются нестандартными и зависят от конкретной СУБД. Тем не менее, они придают однообразие различным диалектам SQL. Если вы столкнётесь с новой реляционной СУБД и обнаружите, что в ней имеется такой объект, как BLOB (binary large object – большой двоичный объект), то вполне вероятно, что в этой СУБД имеются так же инструкции CREATE BLOB, DROP BLOB и ALTER BLOB.
Резюме
В данной лекции были рассмотрены основные вопросы, касающиеся определения структур данных в реляционных СУБД. Мы выяснили, что для создания, удаления и изменения любых объектов базы данных применяются всего три основных команды: CREATE, ALTER и DROP. Более подробно были рассмотрены вопросы, связанные с определением таких основных элементов реляционной БД как таблицы, столбцы и ограничения.