- •Содержание
- •Введение
- •1. Основные понятия
- •1.1 Терминология, базовые принципы
- •1.1.1 Понятие базы данных, субд и информационной системы
- •1.1.2 База данных и субд
- •1.1.3 Принципы построения информационных систем
- •1.2 Архитектуры информационных систем
- •1.2.1 Понятие архитектуры информационной системы
- •1.2.2 Архитектура «файл-сервер»
- •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.4 Создание таблиц на основе других таблиц
Можно создать новую таблицу как результат запроса на выборку из одной или более существующих таблиц при помощи команды:
CREATE TABLE имя_таблицы AS запрос_на_выборку
Например, можно создать новую таблицу, являющуюся копией таблицы students:
CREATE TABLE copy_students AS
SELECT * FROM students
Новая таблица будет иметь такие же имена и типы столбцов, как и таблица students, содержать точную копию всех данных этой таблицы, но не будет иметь ее ограничений.
4.3 Команды манипулирования данными
Команды CREATE TABLE … и ALTER TABLE …никак не влияют на наполнение таблиц данными. Для этих целей используется язык DML (Data Manipulation Language), который позволяет полностью контролировать процессы наполнения таблиц и измения данных.
Основные команды манипулирования данными:
INSERT – добавить данные
DELETE – удалить данные изменяют состояние базы данных
UPDATE – изменить данные
SELECT – выбрать данные без изменения состояния базы данных
Для фиксации изменений, произведенных командами UPDATE, DELETE, INSERT, необходимо выполнить команду фиксации транзакции COMMIT; можно отменить их действие командой ROLLBACK (откат). Подробнее о транзакциях будет рассказано в следующем разделе.
Следует отметить, что при выполнении команд UPDATE, DELETE, INSERT СУБД автоматически проверяет все ограничения, которые были указаны при создании таблиц. Эти проверки, безусловно, существенно замедляют выполнение данных команд. Дополнительное время и другие ресурсы затрачиваются на обеспечение возможности отмены команды (отката). Однако все эти затраты окупаются гарантией того, что правила целостности данных, заложенные в команды DDL, ни при каких обстоятельствах не могут быть нарушены.
4.3.1 Команда insert
Вариант 1 – вставка одной строки
Команда имеет вид:
Insert into имя_таблицы [(список_имен_столбцов)]
Values (список значений)
Если в команде список имен столбцов опущен, то будут последовательно заполнены все столбцы в том порядке, в котором они были указаны в команде CREATE TABLE.
Например:
INSERT INTO subjects VALUES (5, ‘Базы данных’)
INSERT INTO students (cod_st, name_st, born) VALUES (3, ‘Петров’,’12.03.1990’)
Во второй команде столбец phone (телефон) таблицы students можно оставить незаполненным, т.к. на него не наложено ограничение NOT NULL.
Рассмотрим, при каких ситуациях данные команды могут привести к ошибке. В случае вставки нового предмета таких ситуаций две – уже есть предмет либо с кодом 5, либо с названием Базы данных (оба столбца предполагают проверку уникальности). Во втором случае на уникальность будет проверен только один столбец cod_st.
Команда
INSERT INTO subjects(cod_st, cod_sub, mark) VALUES (3, 5, 1)
в нашей демонстрационной базе данных не имеет никаких шансов выполниться, поскольку на столбец mark наложено ограничение
CHECK (mark BETWEEN 2 AND 5)
Исправим оценку:
INSERT INTO subjects(cod_st, cod_sub, mark) VALUES (3, 5, 4)
Мы уже знаем, что предмет с кодом 5 существует, как и студент с кодом 3, значит, ограничения внешнего ключа не нарушены. Однако может случиться последняя из возможных исключительных ситуаций – нарушение уникальности составного первичного ключа таблицы mark (студент с кодом 3 уже имеет оценку по предмету с кодом 5). В случае, если уникальность не нарушена, новая строка благополучно добавится в таблицу marks.
Вариант 2 – вставка множества строк на основе запроса по другим таблицам
Команда имет вид:
