
- •Содержание
- •Список сокращений
- •Введение
- •Основные понятия теории баз данных
- •Понятие системы баз данных
- •Базы данных и их назначение
- •Данные и модели данных
- •Типы систем баз данных
- •Архитектура системы баз данных
- •Уровни архитектуры
- •Система управления базами данных
- •Система управления передачей данных
- •Архитектура «клиент-сервер»
- •Утилиты
- •Распределенная обработка
- •Семантическое моделирование
- •Общий подход
- •Модель «сущность/связь»
- •Введение в реляционные базы данных
- •Реляционная модель
- •Отношения и переменные-отношения
- •Оптимизация
- •Каталог
- •Базовые переменные отношения и представления
- •Транзакции
- •Введение в язык sql
- •Обзор языка sql
- •Каталог в sql
- •Представления
- •Транзакции в sql
- •Взаимодействие приложений и субд
- •Домены, отношения и базовые переменные-отношения
- •Значения отношений
- •Средства sql
- •Реляционная алгебра
- •Введение в реляционную алгебру
- •Реляционная замкнутость
- •Синтаксис
- •Семантика
- •Примеры
- •Назначение реляционной алгебры
- •Реляционное исчисление
- •Введение в реляционное исчисление
- •Исчисление кортежей
- •Примеры для исчисления кортежей
- •Средства языка sql
- •Целостность данных
- •Введение в целостность данных
- •Ограничения типа
- •Ограничения атрибута
- •Ограничения переменной-отношения
- •Ограничения баз данных
- •«Золотое правило»
- •Ограничения состояния и ограничения перехода
- •Средства языка sql
- •Функциональные зависимости
- •Введение
- •Основные определения
- •Тривиальные и нетривиальные зависимости
- •Замыкание множества зависимостей
- •Замыкание множества атрибутов
- •Неприводимые множества зависимостей
- •Нормализация: формы 1нф, 2нф, 3нф и нфбк
- •Введение
- •Декомпозиция без потерь и функциональные зависимости
- •Первая, вторая и третья нормальные формы
- •Нормальная форма Бойса-Кодда
- •Нормализация: более высокие нормальные формы
- •Многозначные зависимости и четвертая нормальная форма
- •Зависимости соединения и пятая нормальная форма
- •Общая схема процедуры нормализации
- •Вопросы для самопроверки
- •Дополнительная литература
Обзор языка sql
В языке имеются операции как для определения данных, так и манипулирования ими. Сначала познакомимся с операциями определения данных. На рис. 5.1 показано, как с помощью средств языка SQL определяется база данных поставщиков и деталей.
Как можно видеть, определение включает один оператор CREATE TABLE для каждой базовой таблицы. Каждый оператор CREATE TABLE задает имя создаваемой таблицы, имена и типы столбцов этой таблицы, а также первичный ключ таблицы и любые внешние ключи, присутствующие в ней, и некоторую другую информацию.
CREATE TABLE S (SN CHAR(5), SNAME CHAR(20), STATUS NUMERIC(5), CITY CHAR(15), PRIMARY KEY ( SN ) ); CREATE TABLE P (PN CHAR(6), PNAME CHAR(20), COLOR CHAR(6), WEIGHT NUMERIC(5,1), CITY CHAR(15), PRIMARY KEY ( PN ) ); CREATE TABLE SP (SN CHAR(5), PN CHAR(6), QTY NUMERIC(9), PRIMARY KEY (SN, PN), FOREIGN KEY (SN ) REFERENCES S, FOREIGN KEY (PN ) REFERENCES P); |
Рис. 5.1. Определение БД поставщиков и деталей средствами языка SQL
Для определения столбцов можно использовать следующие встроенные типы:
CHARACTER ( n ) INTEGER DATE INTERVAL
BIT (n) SMALLINT TIME
NUMERIC (r, q) FLOAT ( p ) TIMESTAMP DECIMAL(p,q)
Допускается определять собственные типы для так называемых доменов, что будет рассмотрено позже.
Определив базу данных, можно начинать выполнять в ней различные операции, задаваемые с помощью операторов манипулирования данными языка SQL: SELECT, INSERT, UPDATE и DELETE. В частности, можно выполнять с данными реляционные операции выборки, проекции и соединения, причем во всех этих случаях следует использовать один и тот же оператор манипулирования данными языка SQL: SELECT.
Выборка:
SELECT SN, PN, QTY
FROM SP
WHERE QTY < 150
Проекция:
SELECT SN, CITY
FROM S
Соединение:
SELECT S.SN, SNAME, STATUS, CITY, PN, QTY
FROM S, SP
WHERE S.SN = SP.SN
Замечание: В данном случае показан пример указания уточненных имен (S.SN, SP.SN), которые допустимы всегда, а неуточненные имена допустимы, только если при этом не возникает неоднозначности.
В языке SQL допустима сокращенная форма предложения SELECT, как показано в следующем примере:
SELECT * -- или SELECT S.* (т.е. символ * может быть уточнен)
FROM S
Результат выполнения последнего запроса – вся таблица S, т.е. * - сокращение для списка всех имен столбцов. Комментарий в конце строки отделяется ‘--’.
Перейдем к операциям обновления. Операции INSERT, UPDATE и DELETE обрабатывают данные на уровне множеств. Рассмотрим несколько примеров обновления на уровне множеств для базы данных поставщиков и деталей:
INSERT
INTO TMP -- Предполагается, что в TMP два столбца PN, WEIGHT
SELECT PN, WEIGHT
FROM P
WHERE COLOR = ‘Красный’
Данный оператор вставляет в таблицу TMP номера деталей и соответствующие веса всех деталей с цветом ‘Красный’.
UPDATE S
SET STATUS = STATUS * 2
WHERE CITY = ‘Москва’
Приведенный выше оператор UPDATE удваивает статус всех поставщиков в ‘Москве’.
Приведенный ниже оператор удаляет из таблицы SP все строки с информацией о детали с номером ‘P2’.
DELETE
FROM SP
WHERE PN = ‘P2’