- •Содержание
- •Введение
- •1. Основные понятия
- •1.1 Терминология, базовые принципы
- •1.1.1 Понятие базы данных, субд и информационной системы
- •1.1.2 База данных и субд
- •1.1.3 Принципы построения информационных систем
- •1.2.2 Архитектура «файл-сервер»
- •1.2 Архитектуры информационных систем
- •1.2.1 Понятие архитектуры информационной системы
- •1.2.3. Архитектура «клиент-сервер»
- •1.2.4 Многозвенные архитектуры
- •1.2.5. Информационные системы на основе web-архитектуры
- •1.2.6 Информационные системы, функционирующие в терминальном режиме
- •1.3 Модели данных
- •1.3.1 Сравнительная характеристика моделей данных
- •1. Иерархическая модель данных
- •2. Сетевая модель данных
- •3. Реляционная модель данных
- •4. Постреляционная модель данных
- •5. Объектно-ориентированная модель данных
- •1.3.2 Неформальное введение в реляционную модель
- •1. Таблицы и связи
- •2. Первичные, альтернативные и внешние ключи
- •3. Null-значения
- •4. Метаданные. Схема базы данных
- •5. Правила ссылочной целостности
- •2. Реляционная модель
- •2.1 Реляционная модель. Структурная и целостная части
- •2.1.1 Структурная часть
- •2.1.2 Атрибуты и домены. Схема отношения
- •2.1.3 Кортежи. Отношение
- •2.1.4 Потенциальные ключи. Первичный ключ
- •2.1.5 Внешние ключи
- •2.1.6 Целостная часть реляционной модели
- •2.2 Манипуляционная часть реляционной модели
- •2.2.1 Реляционная алгебра
- •2.2.2 Реляционное исчисление
- •3. Проектирование базы данных
- •3.1 Семантический анализ предметной области
- •3.1.1 Трехуровневая модель ansi/sparc
- •3.1.2 Диаграммы «сущность - связь»
- •3.1.3 Case-технологии и case-системы
- •3.1.4 Методология idef1
- •3.2 Нормализация базы данных
- •3.2.1 Определение функциональной зависимости
- •3.2.2 Математические свойства фз, теоремы
- •3.2.3 Процедура нормализации. Декомпозиция отношений
- •3.2.4 Нормальные формы
- •3.3 Денормализация. Хранилища данных
- •3.3.1 Недостатки нормализованной базы данных
- •3.3.2 Oltp и olap-системы. Data Mining
- •3.3.3 Хранилища данных
- •4. Язык sql
- •4.1 Язык ddl. Основные объекты базы данных
- •4.1.1 Общий вид команд ddl
- •4.1.2 Основные объекты бд
- •4.2 Команды ddl для работы с таблицами
- •4.2.1 Создание таблицы
- •Типы даты и времени
- •4.2.2 Удаление таблиц и изменение их структуры
- •4.2.3 Пример создания базы данных
- •4.2.4 Создание таблиц на основе других таблиц
- •4.3 Команды манипулирования данными
- •4.3.1 Команда insert
- •Insert into имя_таблицы [(список_имен_столбцов)]
- •Values (список значений)
- •Insert into имя таблицы [(список столбцов)]
- •4.3.2 Команда delete
- •4.3.3 Команда update
- •4.4 Команда выборки данных (select)
- •4.4.1 Запросы на выборку по одной таблице
- •4.4.2 Соединение таблиц в запросах
- •Декартово произведение
- •Внутреннее (естественное) соединение таблиц
- •4. Самосоединения
- •4.4.3 Вложенные запросы
- •4.4.4 Комбинированные запросы
- •4.5 Представления (view)
- •4.5.1 Понятие представления
- •4.5.2 Создание и удаление представлений
- •4.5.3 Обновление представлений
- •4.5.4 Стандартные представления словаря данных Oracle
- •4.6 Хранимый код. Триггеры
- •4.6.1 Процедурные расширения языка sql
- •1. Оператор присваивания
- •2. Условный оператор
- •3. Операторы цикла
- •4.6.2 Использование команд sql в хранимом коде
- •4.6.3 Хранимые процедуры и функции
- •4.6.4 Триггеры
- •1. Триггер на вставку нового студента
- •2. Триггеры на удаление студента
- •3. Триггер на изменение оценки
- •5. Управление доступом к данным
- •5.1 Система безопасности субд
- •Разграничение доступа пользователей.
- •5.1.1 Разграничение доступа пользователей
- •Identified by пароль
- •5.1.2 Привилегии и роли
- •5.1.3 Аудит действий пользователей
- •5.2 Поддержка транзакций
- •5.2.1 Свойства транзакции
- •5.2.2 Поддержка транзакций в языке sql
- •5.2.3 Механизмы субд для поддержки транзакций
- •5.3 Настройка производительности. Индексы
- •5.3.1 Понятие индекса
- •5.3.2 Обзор индексов Oracle
- •Заключение
- •Библиографический список
4.2 Команды ddl для работы с таблицами
4.2.1 Создание таблицы
При создании таблицы задается ее уникальное имя и структура, т.е. первоначально создается пустая таблица, которая затем наполняется данными и при помощи команд DML. При определении структуры таблицы задаются не только имена и типы каждого столбца, но и ряд ограничений на вводимые данные, которые будут жестко контролироваться СУБД при заполнении таблиц и редактировании данных. Тем самым пользователи СУБД имеют возможность ограничить множество значений для встроенных типов данных СУБД, добавив дополнительные условия проверки. Таким образом в СУБД реализуется понятие домена как множества допустимых значений столбца.
Следует заметить, что в стандарте SQL 2003 добавлена команда CREATE TYPE, которая позволяет определять пользовательские типы данных, однако для большинства стандартных областей применений баз данных хватает и встроенных типов с дополнительными ограничениями.
Общий вид команды для создания таблицы:
CREATE TABLE имя_таблицы
(список_определений_столбцов [,список ограничений_на_таблицу]
)
Элементы списка всегда разделяются запятыми (в дальнейшем это будет считаться само собой разумеющимся и особо оговариваться не будет).
Определение каждого столбца в списке имеет вид:
имя_столбца тип_столбца [DEFAULT значение_по_умолчанию] [ограничения_на_столбец]
Обязательными элементами описания столбца являются имя столбца и тип данных в столбце.
Имя столбца должно быть уникальным в пределах таблицы.
Стандартом SQL предусматривается набор основных типов данных. Внутреннее представление и ограничения на размер типов стандартом не устанавливаются, они по-разному реализуются в разных СУБД. Не все СУБД в полном объеме реализуют стандартные типы данных, кроме того, различные СУБД могут иметь собственные типы данных. Ниже мы приводим стандартные типы данных SQL 2003 и основные типы данных, поддерживаемые СУБД Oracle.
При определении столбца для него может быть задано значение по умолчанию (DEFAULT). Если при занесении данных в строку таблицы не указывается значение для этого столбца, в столбец заносится значение по умолчанию. Если значение по умолчанию для какого-либо столбца при создании таблицы не задается, в случае отсутствия данных элемент этого столбца получает значение NULL.
Типы данных
Числовые типы
Стандарт предусматривает следующие числовые типы.
SMALLINT, INTEGER (INT) и BIGINT (последний появился только в SQL 2003) - целые двоичные числа со знаком, хотя стандарт не оговаривает размеры, в большинстве случаев это 2, 4 и 8 байт соответственно.
NUMERIC(p,s) или NUMBER(p,s) или DECIMAL(p,s) - типы-синонимы для десятичных чисел с фиксированной точкой. Число p задает общее количество десятичных разрядов в числе, s - число разрядов после точки.
FLOAT(p), REAL, DOUBLE PRECISION - двоичные числа с плавающей точкой. Разрядность типов REAL и DOUBLE PRECISION зависит от реализации.
В Oracle, в отличие от большинства других СУБД, внутреннее представление всех числовых данных одинаково – все числа хранятся в двоично-десятичном представлении (т.е. для каждой десятичной цифры числа хранится ее четырехбитное двоичное представление). Поэтому в Oracle имеется единственный числовой тип
NUMBER[(p[,s])]
Oracle, однако, принимает и все стандартные числовые типы и автоматически переводит их во внутреннее представление NUMBER. Например, стандартный тип INTEGER она автоматически приводит к типу NUMBER(38) – число без десятичной точки из 38 десятичных разрядов (один из них – знак числа) и отводит под него 38 байт, что в большинстве случаев избыточно. В целях рационального использования дискового пространства при работе с Oracle разумно пользоваться типом NUMBER. Например, для целых чисел (соответствующих типу INTEGER) разумным типом будет NUMBER(10).
Вообще, для любой СУБД необходимо сначала внимательно изучить документацию по поддерживаемым типам и способам их внутреннего представления, а затем приступать к созданию таблиц. Знание внутреннего представления данных поможет не только сэкономить пространство на диске, но и повысить производительность СУБД за счет ускорения операций обмена между внешней и оперативной памятью.
Константы числовых типов записываются так же, как и десятичные константы в большинстве языков программирования. Для действительных констант возможна нотация как с десятичной точкой, так и в E-форме.
Символьные типы
CHAR[ACTER] [(размер)] строка фиксированной длины (по умолчанию размер типа – 1 байт), максимальный размер в Oracle 2000 байт, но во многих СУБД размер этого типа ограничивается 256 байтами.
VARCHAR(размер) (в Oracle дополнительно поддерживается тип VARCHAR2, идентичный VARCHAR, но гарантированно неизменный вне зависимости от возможного изменения типа VARCHAR в стандарте) — строка переменной длины, в Oracle его размер не более 4000 байт.
Данные типов CHAR и VARCHAR хранятся по разному. Под CHAR всегда отводится столько байт, сколько указано в размере, а под данные типа VARCHAR память на диске выделяется в соответствии с реальными размерами текста (все завершающие текст пробелы автоматически удаляются) плюс четыре байта для хранения этого размера. Пустая строка занимает 4 байта и содержит размер 0. В связи с этим для хранения таких данных, как наименования каких-либо объектов, предпочтительнее тип VARCHAR. Если предполагается, что столбец может содержать много NULL-значений (например, столбец «Примечания» или «Пояснения»), то тип VARCHAR также выигрывает перед типом CHAR.
Стандартом также поддерживаются типы NCHAR (NATIONAL CHARACTER) и NVARCHAR, которые были введены для поддержки символов национальных алфавитов. Оба типа реализованы в Oracle и используются в том случае, если для кодирования символов используется Unicode.
Константы символьного типа берутся в апострофы. Апостроф внутри символьной константы кодируется двумя апострофами.
