
- •Введение. Структура предмета. Основные понятия
- •1.История развития баз данных
- •2. История развития субд
- •4.Основные понятия и определения
- •Контрольные вопросы
- •Раздел 1. Структура и технологии субд. Модели данных
- •Тема1.1 Архитектура и технико-экономические характеристики субд. Архитектура бд.
- •1. Основные функции субд
- •2. Обобщенная архитектура субд
- •3. Процесс прохождения пользовательского запроса
- •4. Архитектура бд
- •Контрольные вопросы
- •Тема 1.2 Модели данных. Основные понятия и классификация
- •1. Классификация моделей данных
- •3 Пример разработки простой er-модели
- •Контрольные вопросы
- •Тема 1.3 Иерархическая, сетевая и реляционная модели данных
- •1. Иерархическая модель данных
- •2. Сетевая модель данных
- •3. Реляционная модель данных
- •Базовые понятия реляционных баз данных
- •Контрольные вопросы
- •Тема 1.4 Физические модели данных
- •1. Файловые структуры, используемые для хранения информации в базах данных
- •2. Индексные файлы
- •3. Моделирование отношения 1:м с использованием однонаправленных указателей
- •Контрольные вопросы
- •Тема 1.5 Целостность бд. Нормальные формы
- •1. Основные понятия
- •Null-значения
- •Трехзначная логика (3vl)
- •Потенциальные ключи
- •2.Целостность сущностей
- •2 . Основные нормальные формы
- •Аномалии обновления
- •Определение функциональной зависимости
- •3Нф (Третья Нормальная Форма)
- •Алгоритм нормализации (приведение к 3нф)
- •Контрольные вопросы
- •Тема 1.6 Операции и основные понятия реляционной алгебры и реляционного исчисления
- •1. Реляционная алгебра
- •Замкнутость реляционной алгебры
- •Отношения, совместимые по типу
- •2. Теоретико-множественные операторы
- •3. Специальные реляционные операторы
- •Соединение
- •Общая операция соединения
- •Тэта-соединение
- •Экви-соединение
- •Естественное соединение. Определение 10. Пусть даны отношения и , имеющие одинаковые атрибуты (т.Е. Атрибуты с одинаковыми именами и определенные на одинаковых доменах).
- •Контрольные вопросы
- •Тема 1.7 Проектирование реляционной базы данных
- •1. Методология проектирования базы данных
- •2. Этапы проектирования базы данных
- •Контрольные вопросы
- •Раздел 2. Язык sql и его возможности
- •Тема 2.1 История языка sql. Создание и редактирование схемы бд
- •1. Развитие языка sql
- •Что такое пользователь?
- •Числовые константы
- •2 Создание базы данных и структуры таблицы
- •3. Модификация структуры таблицы и удаление таблицы
- •4. Индексы
- •5. Добавление новых данных
- •Однострочный оператор insert
- •Многострочный оператор insert
- •Утилиты пакетной загрузки
- •6. Удаление существующих данных
- •Оператор delete с вложенным запросом
- •7. Обновление существующих данных
- •Обновление всех строк
- •Контрольные вопросы
- •Тема 2.2 Организация запросов к базе данных.
- •1. Формирование запросов к одной таблице
- •2. Статистические функции
- •3. Группировка и агрегатные функции в запросах
- •4. Объединение таблиц
- •Объединения таблиц по равенству значений в столбцах и другие виды объединений
- •5. Объединение таблицы с собой
- •6. Теоретико-множественные операции с таблицами
- •7. Выполнение сложных запросов с вложенными подзапросами
- •Использование выражений в подзапросах
- •Контрольные вопросы
- •Тема 2.3 Виртуальные таблицы Цель: рассмотреть понятие «виртуальная таблица»; назначение виртуальных таблиц и область их использования
- •1. Команда create view
- •2. Групповые представления
- •3. Представления и объединения
- •4. Представления и подзапросы
- •5. Удаление и модификация представлений
- •Контрольные вопросы
- •1.Определение триггера и его назначение
- •2. Типы триггеров
- •Создание триггеров dml
- •Создание триггеров замещения
- •Создание системных триггеров
- •Другие аспекты использования триггеров
- •3. Хранимые процедуры
- •Хранимые функции
- •Контрольные вопросы
- •Тема 2.5 Защита информации в бд
- •1. Общие понятия привилегий
- •Стандартные привилегии
- •2. Предоставление привилегий с использованием представлений
- •3. Другие типы привилегий
- •Контрольные вопросы
- •Тема 2.6 Транзакции и управлении ими
- •1. Что такое транзакция
- •2 . Операторы commit и rollback
- •3. Журнал транзакций
- •5. Транзакции и работа в многопользовательском режиме
- •Проблема пропавшего обновления
- •Проблема промежуточных данных
- •Проблема несогласованных данных
- •Проблема строк-призраков
- •6. Параллельные транзакции
- •Уровни блокировки
- •Жесткая и нежесткая блокировки
- •Тупиковые ситуации
- •Усовершенствованные методы блокировки
- •Контрольные вопросы
- •Тема 2.7 Распределенные базы данных. Модели серверов
- •1.Распределенная обработка данных
- •2. Модели «клиент—сервер» в технологии баз данных
- •Двухуровневые модели
- •Модель сервера приложений
- •3. Модели серверов баз данных
Числовые константы
Целые и десятичные константы (известные также под названием точных числовых литералов) в операторах SQL представляются в виде обычных десятичных чисел. В числовых константах нельзя ставить символы разделения разрядов между цифрами.
В случае с данными, представляющими денежные величины, в большинстве реализаций SQL просто используются целые или десятичные константы, хотя в некоторых из них можно перед константой указывать символ денежной единицы:
$0.75 $5000.00 $ -567.89
Константы с плавающей запятой (известные также под названием приблизительных числовых литералов) определяются с помощью символа Е и имеют такой же формат, как и в большинстве языков программирования. Ниже приведены примеры констант с плавающей запятой:
1.5Е3-3.141.59Е1 2.5Е-7 0.783926Е21
Символ Е читается: "умножить на десять в степени", так что первая константа представляет число "1,5 умножить на десять в степени 3", или 1500.
Если необходимо включить в строковую константу одинарную кавычку, вместо нее следует написать две одинарные кавычки. Таким образом, константа 'I can' 't' представляет строку "I can't".
В реляционных СУБД календарные даты, время и интервалы времени представляются в виде строковых констант. Форматы этих констант в различных СУБД отличаются друг от друга.
Таблица 2.3 - Символьные константы SQL |
|
Константа |
Описание |
USER |
Имя пользователя, под которым вы подключились к базе данных (DB2, SQL/DS, Oracle, SQL, VAX SQL, SQLBase, также определена в стандарте ANSI/ISO) |
CURRENT DATE |
Текущая дата (DB2,SQL/t>S, SQLBase) |
CURRENT TIME |
Текущее время дня (DB2, SQL/DS, SQLBase) |
CURRENT TIMESTAMP |
Текущие дата и время (DВ2, SQL/DS) |
CURRENT ТIMEZONE |
Интервал времени, определяющий разницу между текущим часовым поясом и временем по Гринвичу (DB2, SQL/DS, SQLBase) |
SYSDATE |
Текущие дата и время (Oracle, SQLBase) |
ROWNUM |
Внутренний идентификатор строки (Oracle) |
ROWID |
Внутренний идентификатор строки (SQLBase) |
Выражения. Выражения в SQL используются для выполнения операций над значениями, считанными из базы данных или используемыми для поиска в базе данных. Например, в следующем запросе вычисляется процентное соотношение объема и плана продаж для каждого офиса:
SELECT CITY, TARGET, SALES, (SALES/TARGET) * 100 FROM OFFICES
В соответствии со стандартом ANSI/ISO в выражениях можно использовать четыре арифметические операции: сложение (X + Y), вычитание (X - Y), умножение (X * Y) и деление (X / Y). Для формирования сложных выражений можно использовать скобки, например:
(SALES * 1.05) - (TARGET * .95)
2 Создание базы данных и структуры таблицы
Чтобы создать базу данных пользователь должен иметь соответствующую привилегию, т.е. разрешение на создание. После того как он создаст БД он является ее владельцем и имеет все права на изменение, обновление и удаление объектов созданной им базы данных.
Синтаксис команды создания базы данных:
CREATE DATABASE <имя базы данных>.
Структура таблицы создается командой CREATE TABLE во всех диалектах языка SQL. Эта команда создает пустую таблицу – таблицу без строк. Команда CREATE TABLE в основном определяет имя таблицы в виде описания набора имен столбцов, обозначенных в определенном порядке. Она также определяет типы данных и размеры столбцов. Каждая таблица должна иметь, по крайней мере, один столбец.
Синтаксис команды CREATE TABLE
CREATE TABLE имя таблицы
(<имя столбца> <тип данных> <размер> <ограничения на столбец>,
<имя столбца> <тип данных> <размер>, …,
<имя столбца> <тип данных> <размер>, …,
<ограничения на таблицу> <имя столбца> [,<имя столбца>…])
Пропуски используются для разделения частей команды SQL, поэтому они не могут быть именем таблицы или другого объекта. Значение размера аргумента зависит от типа данных. Если его не указывать система сама будет назначать автоматически.
При создании таблиц различают следующие виды ограничений:
Ограничения на столбец – средство обеспечения целостности домена и целостности таблицы;
Ограничения на таблицу – средство обеспечения целостности ссылок БД.
Ограничение на столбец указывается после определения столбца; ограничение на таблицу – после определения последнего столбца таблицы.
Основные ограничения на столбец:
NOT NULL -ограничение запрета использования пустых (нулевых) значений. NULL – специальный символ, который означает, что поле пустое. Если NOT NULL размещено после типа данных, это является запретом на ввод нулевых значений в соответствующую колонку.
UNIQUE - ограничение уникальности значений, которые вводятся в таблицу. Это ограничение применяется к столбцам, для которых было объявлено NOT NULL.
PRIMARY KEY – ограничение обозначения первичного ключа – выполняется прибавлением этих ключевых слов после соответствующего столбца таблицы.
Первичные ключи не могут иметь нулевых значений.
При объединении группы столбцов важен порядок столбцов в выражении. Для таблицы может быть задан только один первичный ключ, который используется для работы с внешними ключами порожденных таблиц.
PRIMARY KEY рекомендуется использовать как уникальный идентификатор рядков таблицы; UNIQUE – как обозначение уникальности значений в одном столбце или в группе столбцов.
CHECK – ограничения на значение, что вводятся. Вслед за этим в круглых скобках указывается предикат (диапазон данных, что вводятся; константы; выражения).
DEFAULT – ограничения присвоения значений по умолчанию. Вслед за этим ключевым словом указывается значение, которое присваивается столбцу.
Основные ограничения на таблицу
Под ограничением на таблицу имеется виду объявление внешнего ключа порожденной таблицы и возможность обеспечить целостность ссылок БД. Каждое значение внешнего ключа должно быть подано в родительском ключе только один раз. Родительский ключ должен иметь ограничения PRIMARY KEY или UNIQUE для гарантии того, что значение в нем не представлено больше чем один раз.
FOREIGN KEY - ключевые слова, которые используются для объявления внешнего ключа. Слово REFERENCES указывает на имя порождающей таблицы, где этот ключ является первичным.
Ограничения на обновление таблицы (при выполнении команд DELETE, UPDATE), семантически связанной с другими таблицами, выполняется разрешением или запретом на изменение данных.
Согласно с ANSI для изменения или исключения значений родительского ключа, на который имеются ссылки, есть три основные возможности:
можно ограничить или запретить изменение родительского ключа, указавши: ограничено (restricted);
можно изменить родительский ключ и автоматически изменить внешний ключ, назначив его каскадное изменение (cascades);
можно изменить родительский ключ, и тем самым установить значение внешнего ключа в NULL автоматически (предусматривается, что NULL-значения разрешены во внешнем ключе); в этом случае говорят, что внешний ключ изменяется в NULL.
SET CONSTRAINTS - установить момент проверки ограничений
Пример
Фрагмент транзакционной базы данных. Данный фрагмент позволяет выполнять учет заказов на товар в коммерческой фирме. Задача учета базируется на том, что фирма производит заказы многим поставщикам на множество товаров, при этом один и тот же товар предлагается несколькими поставщиками, но каждый поставщик предлагает множество товаров. Цены на товар зависят от поставщика.
Для упрощения будем считать, что:
в БД хранятся данные о поставщиках, товары и заказы, которые оформляются на товары;
каждый заказ может включать один товар в некотором количестве, при определенной цене;
предусматривается, что названия фирм-поставщиков является уникальным, названия городов выбираются с определенного домена – списка ограниченного размера.
В примере будет использован самый простой набор типов данных со следующим назначением: символьные – C; числовые – N; дата – D.
Диаграмма «сущность-связь» представлена на рисунке 2.1
Реляционная модель имеет вид:
Поставщик (Код_пост, наименование фирмы, Город, Рейтинг, Телефон)
Товар (Код_тов, наименование товара, Параметр 1, Параметр 2, Параметр 3)
Заказ [поставщик, Товар] (№_заказа, Код_пост, Код_тов, Дата_зак, Цена единицы, количество).
В отношении «Заказ» атрибут «№_заказа» является первичным ключом, атрибуты «Код_пост» и «Код_тов» - внешними ключами.
В терминах СУБД реляционная модель имеет вид:
SUPPL (S_ID, S_NAME, S_CITY, S_RATING, S_TEL)
GOOD (G_ID, G_NAME, PAR_1, PAR_2, PAR_3)
ORDERS (O_ID, S_ID, G_ID, DAT, PRICE, QN_TY).
Рисунок 2.1 – Модель «сущность-связь»
Теперь при помощи языка SQL создадим перечисленные таблицы.
CREATE TABLE SUPLL
(S_ID C(3) NOT NULL PRIMARY KEY,
S_NAME C(20) NOT NULL UNIQUE,
S_CITY C(20) NOT NULL
CHECK (S_CITY IN («Харьков», «Киев», «Лондон», «Москва», «Полтава»)),
S_RATIHG N(2) NOT NULL,
S_TEL C(10) NOT NULL);
CREATE TABLE GOOD
(G_ID C(5) NOT NULL PRIMARY KEY,
G_NAME C(20) NOT NULL,
PAR_1 C(10) NOT NULL,
PAR_2 C(10) NOT NULL,
PAR_3 C(10) NOT NULL);
CREATE TABLE ORDERS
(O_ID N(3) NOT NULL PRIMARY KEY
S_ID C(3) NOT NULL,
G_ID C(5) NOT NULL,
PRICE N(10.2) NOT NULL,
QN_TY N(5) NOT NULL,
DAT Date DEFAULT CURRENT DATE,
FOREIGN KEY (S_ID) REFERENCES SUPPL,
FOREIGN KEY (G_ID) REFERENCES GOOD,
UPDATE OF GOOD CASCADES,
DELETEOF GOOD CASCADES,
UPDATE OF SUPPLCASCADES,
DELETE OF SUPPL CASCADES);
Синтаксис приведенных команд необходимо уточнять при работе в конкретной СУБД, иногда типы данных необходимо писать полностью без сокращений.
Команда создания таблицы ORDERS обеспечивает целостность ссылок следующим образом: при удалении из таблицы SUPPL какого-либо поставщика в таблице ORDERS будут удалены все записи, связанные с этим поставщиком. При удалении с таблицы GOOD какого-либо товара, в таблице ORDERS будут удалены все записи, связанные с этим товаром. При восстановлении кода поставщика или товара в таблицах SUPPL или GOOD, соответственно, будут восстановлены эти коды в таблице ORDERS.
Необходимо помнить, что объединять при помощи арифметических операторов столбцов, что принадлежат разным типам данных, нельзя. Необходимо привести все данные, что соединяются, к одному типу специальными функциями преобразования типов данных. В разных СУБД эти функции разные.