- •Глава 1. Базы данных и системы управления 9
- •Глава 2. Организация доступа к данным 45
- •Глава 3. Реляционная алгебра 60
- •Глава 4. Основы sql 67
- •Глава 5. Проектирование реляционных баз данных 89
- •Глава 6. Взаимодействие sql с приложениями 116
- •Глава 7. Некоторые проблемы администрирования баз данных 154
- •Базы данных и системы управления
- •Файловые системы
- •Концепция баз данных
- •Основные функции субд
- •Непосредственное управление данными во внешней памяти
- •Управление буферами оперативной памяти
- •Управление транзакциями
- •Журнализация
- •Поддержка языков баз данных
- •Трехуровневая модель архитектуры систем баз данных
- •Модели данных
- •Характеристика связей
- •Компьютерно-ориентированные модели данных
- •Реляционный подход
- •Ключи и целостность реляционных данных
- •Моделирование концептуальной схемы базы данных
- •Организация доступа к данным
- •Страницы и файлы
- •Индексирование
- •Структуры типа б-дерева
- •Хеширование
- •Методы сжатия
- •Метод дифференциального сжатия
- •Иерархические методы сжатия
- •Кодирование по методу Хаффмена
- •Реляционная алгебра
- •Традиционные реляционные операции
- •Специальные реляционные операции
- •Дополнительные реляционные операции
- •Примеры использования реляционной алгебры для выражения словесных запросов в виде формул
- •Основы sql
- •Типы данных
- •Строковые типы данных
- •Битовые типы данных
- •Точные числовые типы данных
- •Вещественные числовые типы данных
- •Календарные типы данных
- •Значения null
- •Создание и обслуживание таблиц
- •Запрос на выборку
- •Статистические функции
- •Создание соединений
- •Вложенные запросы
- •Запрос на объединение
- •Запросы, выполняющие реляционные операции вычитания, пересечения и деления
- •Запросы на изменение
- •Перекрестные запросы
- •Проектирование реляционных баз данных
- •Нормализация отношений
- •Функциональные зависимости
- •Н ормальные формы, обоснованные функциональными зависимостями
- •Нормальная форма Бойса–Кодда
- •Нормальные формы, обоснованные более сложными зависимостями
- •Процедура нормализации и проектирования
- •Пример проектирования базы данных
- •Назначение и предметная область
- •Проектирование базы данных
- •Взаимодействие sql с приложениями
- •Встраивание sql-операторов в программный код
- •Тип курсора
- •Триггеры
- •Хранимые процедуры
- •Стандартные интерфейсы для доступа к данным
- •Информационное окружение веб-сервера
- •Стандарт odbc
- •Уровни соответствия
- •Уровень соответствия odbc
- •Задание имени источника данных odbc
- •Расширяемый язык разметки xml
- •Xml как язык разметки
- •Материализация хмl-документов с помощью xslt
- •Создание хмl-документов на основе информации из базы данных
- •Некоторые проблемы администрирования баз данных
- •Оптимизация запросов
- •Параллельная обработка данных
- •Потеря обновления
- •Зависимость от незафиксированных обновлений
- •Несогласованный анализ
- •Блокировки транзакций
- •Согласованность и уровень изоляции транзакций
- •Распределенные системы баз данных
- •Фрагментация
- •Репликация
- •Распространение обновлений
- •Управление каталогом
- •Распределенная обработка запросов
- •Типы распределенных систем баз данных
- •Нераспределенные мультибазовые субд
- •Клиент-серверные системы
- •Системы с общими ресурсами
- •Технические аспекты администрирования базы данных
- •Восстановление базы данных
- •Безопасность баз данных
- •Шифрование данных
- •Производительность баз данных
- •Администрирование данных
- •Литература
Вещественные числовые типы данных
Вещественные или числа с плавающей точкой применяются для хранения приближенных числовых значений.
FLOAT (точность) – представляет произвольное рациональное приближение действительного числа с плавающей точкой. Значение точности представляется не в количестве значащих десятичных цифр, а в количестве битов. Точность не должна быть меньше 1. Максимальная точность зависит от СУБД. Для преобразования десятеричной точности в бинарную надо умножить десятеричную точность на 3.32193. Например, 7 знаков точности дают 24 бита.
REAL – совпадает с FLOAT, но точность вводить не надо, ее автоматически определяет СУБД. Числа типа REAL называют числами одинарной точности с плавающей точкой.
DOUBLE PRECISION – вдвое превышает точность REAL – числа двойной точности с плавающей точкой.
В СУБД Access – single, double.
Календарные типы данных
Используется для отображения даты и времени суток.
DATE – имеет формат YYYY-MM-DD.
TIME – имеет формат HH:MM:SS. Можно добавить аргумент “точность” для долей секунд.
TIMESTAMP – имеет формат YYYY-MM-DD_ HH:MM:SS.
B СУБД ACCESS: date/time.
Интервальные типы данных обозначают расстояние между датами или двумя отметками времени суток. Access не поддерживает.
Значения null
Отображает отсутствующие или неизвестные данные.
В SQL ключевое слово NULL определяет значение Null.
Это не 0, не пустая строка (′ ′) и не строка пробелов. NULL не принадлежит ни к какому типу данных и его можно записать в любой столбец, кроме тех, для которых задано ограничение NOT NULL.
Значения NULL можно найти и идентифицировать предложением IS NULL.
Значения NULL не равны друг другу. Поэтому нельзя определить, соответствует ли какое-нибудь значение NULL другому значению в базе данных. Тем не менее, предложение DISTINCT воспринимает все NULL одинаково для удаления повторяющихся строк.
При сортировке значения NULL будут либо больше, либо меньше любых значений, в зависимости от СУБД.
Значения NULL размножаются в процессе вычислений.
Итоговые функции игнорируют NULL в процессе вычислений.
При группировке предложением GROUP BY все значения NULL будут помещены в одну группу.
Итак, SQL – это декларативный функционально полный язык баз данных, с помощью которого можно создавать базы данных, манипулировать данными и обеспечивать их целостность и безопасность. На основании этого, операторы SQL можно классифицировать на три основных типа:
Операторы определения данных – определяют содержимое реляционной базы данных в виде таблиц и представлений;
Операторы манипулирования данных – используются для извлечения, вставки, обновления и удаления данных, содержащихся в таблицах и представлениях
Операторы управления данными – ограничивают доступ к данным.
Создание и обслуживание таблиц
Базовые отношения создаются оператором CREATE TABLE. Следует указать: название таблицы, название столбцов, тип данных для столбцов. Рекомендуется описание каждого столбца начинать с новой строки (не обязательно). Ограничения на элементы столбца:
NOT NULL – не разрешает присваивать значения NULL;
DEFAULT – задает значения по умолчанию;
PRIMARY KEY – задает первичный ключ для таблицы;
FOREIGN KEY – задает внешний ключ;
UNIQUE – не позволяет вводить в столбец повторяющиеся значения;
CHECK – ограничивает с помощью логических выражений значения, которые могут добавляться в столбец.
Пример:
CREATE TABLE Проекты (Пр№ CHAR(3) NOT NULL PRIMARY KEY, Имя_Пр CHAR(15) UNUQUE, Гор CHAR(20));
Внешний ключ создается ключевыми словами FOREIGN KEY или REFERENCES в строке описания столбца в команде CREATE TABLE:
CREATE TABLE Поставки (П№ CHAR(3) NOT NULL REFERENCE Поставщики, Пр№ CHAR(5) NOT NULL REFERENCE Проекты, Д№ CHAR(3) NOT NULL REFERENCE Детали, Кол INTEGER DEFAULT ′???′, PRIMARY KEY (П№ , Пр№, Д№));
Для ограничителей полезно вводить имена. Это поможет ориентироваться в комментариях, которые генерируются программой, и упростит редактирование команд:
[CONSTRAINT имя_ограничения] REFERENCES имя_табл (имя_столбца).
Сохранение целостности данных по ссылкам организуется при помощи операторов RESTRICT, CASCADE и SET NULL:
CREATE TABLE Поставки (П№ CHAR(3) REFERENCE Поставщики ON UPDATE CASCADE ON DELETE SET NULL, Пр№ CHAR(5) NOT NULL REFERENCE Проекты RESTRICT, Д№ CHAR(3) NOT NULL REFERENCE Детали, Кол INTEGER DEFAULT ′???′, PRIMARY KEY (П№ , Пр№, Д№));
Сейчас при изменении П№ в таблице Поставщики будет изменен и П№ в таблице Поставки, а при его удалении в таблицу Поставки будет внесено значение NULL. Оператор RESTRICT устанавливает, что в таблице Проекты, на которую ссылается внешний ключ, нельзя изменять значение первичного ключа, если в ссылающейся таблице Поставки существует строка с этим значением.
Для обеспечения целостности атрибута предназначен оператор CHECK:
CREATE TABLE Детали (Д№ CHAR(3) NOT NULL PRIMARY KEY, Имя_Д CHAR(15) UNUQUE, Цвет CHAR(10) CHECK (Цвет='Черный' OR Цвет ='Красный' OR Цвет ='Желтый' OR Цвет ='???'), Вес INTEGER, Гор CHAR(20));
Ограничения на данные можно организовать и созданием доменов:
CREATE DOMAIN Color CHAR(10) CHECK (Color='Черный' OR Color='Красный' OR Color='Желтый' OR Color='???');
Тогда ограничение на поле «Цвет» вводится следующим образом:
CREATE TABLE Детали (Д№ CHAR(3)..., Цвет Сolor, …);
Внести изменение в структуру таблицы можно оператором ALTER с указанием характера изменения – ADD, MODIFY или DELETE:
ALTER TABLE Детали ADD [Дата изготовления] DATE;
Для удаления объектов базы данных используется оператор DROP:
DROP TABLE Детали;
Доступ к данным в многопользовательской системе регулируется с помощью операторов GRANT и REVOKE. Указываются вид полномочий (SELECT, UPDATE, ALL), таблица или представление, по отношению к которым создается полномочие, и имя пользователя:
GRANT UPDATE ON Поставки TO USER1;
Полномочия для всех пользователей устанавливаются через специального пользователя PUBLIC:
GRANT SELECT ON Поставки TO PUBLIC;
Для повышения безопасности полезно открывать доступ к представлениям, а не базовым отношениям.
Оператор REVOKE аннулирует полномочия:
REVOKE UPDATE ON Поставки FROM USER1;
Если аннулировать полномочия через ...FROM PUBLIC, то полномочий лишаются все пользователи.