
- •1. Введение в бд
- •2. Теоретические основы бд
- •2.1 Базы данных
- •2.2. Архитектуры обработки информации
- •Ошибка! Ошибка связи.
- •Ошибка! Ошибка связи.
- •2.3 Модели баз данных
- •2.3.1 Иерархическая модель данных
- •Ошибка! Ошибка связи.
- •Ошибка! Ошибка связи.
- •2.3.2 Сетевая модель данных
- •Ошибка! Ошибка связи.
- •2.3.3 Реляционная модель данных
- •3. Реляционный подход к организации бд
- •3.1 Базовые понятия реляционных баз данных
- •Ошибка! Ошибка связи.
- •3.2 Фундаментальные свойства отношений
- •3.3 Взаимосвязь отношений
- •4. Реляционная алгебра
- •4.1 Обзор реляционной алгебры
- •Замкнутость реляционной алгебры
- •Отношения, совместимые по типу
- •4.2 Теоретико-множественные операторы
- •4.3 Специальные реляционные операторы
- •4.4 Зависимые реляционные операторы
- •4.5 Примитивные реляционные операторы
- •4.6 Запросы, невыразимые средствами реляционной алгебры
- •4.7 Кросс-таблицы
- •5. Проектирование бд
- •5.1. Цели и этапы проектирования
- •5.2 Уровни моделирования (проектирования) бд
- •5.3 Критерии оценки качества логической модели данных
- •5.4 Нормализация и ее необходимость
- •5.5 Теория нормализации
- •5.6 Элементы модели "сущность-связь"
- •Основные понятия er-диаграмм
- •Ошибка! Ошибка связи.
- •6. Элементы языка sql
- •6.1 Типы данных
- •6.2 Операторы dml (определения объектов базы данных)
- •6.2.1 Операторы работы с таблицами
- •6.3 Операторы dml (операторы манипулирования данными)
- •6.3.1 Примеры использования операторов манипулирования данными
- •Insert - вставка строк в таблицу
- •6.3.2 Update - обновление строк в таблице
- •6.3.3 Delete - удаление строк в таблице
- •6.3.4 Выбор данных из таблицы select
- •6.3.4.1 Общий синтаксис команды select
- •6.3.4.2 Примеры работы с использованием оператора select
- •Использование агрегатных функций в запросах
- •Использование агрегатных функций с группировками
- •Использование подзапросов
- •Использование объединения, пересечения и разности
- •6.3.4.3 Порядок выполнения оператора select
- •6.3.4.4 Реализация реляционной алгебры средствами оператора select (Реляционная полнота sql)
- •6.4 Объекты и концепции базы данных
- •6.4.1 Таблицы (Tables)
- •6.4.2 Столбцы (Columns)
- •6.4.3 Типы данных (Data types)
- •Тип данных blob
- •6.4.4 Домены (Domains)
- •6.4.5 Справочные ограничения целостности (Referential integrity constraints)
- •6.4.6 Индексы (Indexes)
- •6.4.7 Представления (Views)
- •6.4.8. Хранимые процедуры (Stored procedures)
- •6.4.9 Триггеры (Triggers)
- •6.4.10 Генераторы (Generators)
- •6.4.11 Защита (Security)
- •6.5 Операторы sql для работы с объектами бд
- •6.5.1 Представления
- •6.5.2 Хранимые процедуры
- •6.5.3 Генераторы
- •6.5.4 Триггеры
- •6.5.5 Индексы
- •6.6 Инструкции sql
- •7. Физическая организация и работа субд
- •7.1 Хранение данных
- •Ошибка! Ошибка связи.
6.4.11 Защита (Security)
SQL защита (securite) управляется на уровне таблицы привилегий доступа - списка операций, которые разрешены пользователю над данной таблицей или видом. Инструкция GRANT назначает привилегии доступа к таблице или виду конкретным пользователям или процедурам. Инструкция REVOKE удаляет предварительно предоставленные привилегии доступа.
6.5 Операторы sql для работы с объектами бд
6.5.1 Представления
Представление (view) это виртуальная таблица, которая не сохранена физически в базе данных, но ведет себя точно также как "реальная" таблица. Вид может содержать данные из одной или более таблиц или других видов и используется для хранения часто используемых запросов (queries) или множества запросов в базе данных.
Создание
CREATE VIEW имя_представления [(имя_столбца [,имя_столбца ...])]
AS <select_выражение> [WITH CHECK OPTION];
имя_представления - имя для вида. Должно быть уникальным среди всех имен видов, таблиц и процедур в базе данных.
имя_столбца имена столбцов вида. Имена столбцов должны быть уникальны среди всех имен столбцов в виде. Требуется, если вид содержит столбцы, основанные на выражении; иначе факультативен. По умолчанию, имена столбцов берутся из базовой таблицы.
<select_выражение> select_выражение.
WITH CHECK OPTION – предотвращает использование представления совместно с операциями INSERT и UPDATE.
Особенности использования:
1. Если в представлении не указаны столбцы – то они берутся из <select_выражение>.
2. Количество <имя_столбца> указано явно, то они должны совпадать со столбцами из <select_выражение>
3. В <select_выражение> не могут использоваться сортировки ORDER BY
Обратите внимание: Любые столбцы, используемые в значении выражения, должны присутствовать раньше чем выражение может быть определено.
Изменение
нельзя
Удаление
DROP VIEW имя_представления;
имя_представления Имя существующего представления, для удаления
Примеры
CREATE VIEW "A_UNI_B" (
"ID_SOTR",
"FAM",
"ZAP"
) AS
select * from a
union
select * from b;
6.5.2 Хранимые процедуры
Хранимые процедуры (stored procedure) – это отдельные программы, написанные на языке SQL процедур и триггеров InterBase, который является расширением SQL. Сохраненные процедуры являются частью метаданных базы данных. Сохраненные процедуры могут получать входные параметры, возвращать значения приложению и могут быть вызваны явно из приложения или подстановкой вместо имени таблицы в инструкции SELECT.
Сохраненные процедуры обеспечивают следующие возможности:
1. Модульный проект: сохраненные процедуры могут быть общими для приложений, которые обращаются к той же самой базе данных, что позволяет избегать повторяющегося кода, и уменьшает размер приложений.
2. Упрощают сопровождение приложений: при обновлении процедур, изменения автоматически отражаются во всех приложениях, которые используют их без необходимости их повторной компиляции и сборки.
3. Улучшают эффективность работы: Особенно для удаленных клиентов. Сохраненные процедуры выполняются сервером, а не клиентом, что снижает сетевой трафик.
Важно: Т.к. каждая инструкция в теле сохраненной процедуры должна завершатся точкой с запятой, вы должны определить другой символ для завершения инструкции CREATE PROCEDURE в SQL. Используйте SET TERM пред CREATE PROCEDURE чтобы определить терминатор отличный от точки с запятой. После инструкции CREATE PROCEDURE, включите SET TERM, что бы изменить терминатор обратно к точке с запятой
Создание
CREATE PROCEDURE имя_проц
[(имя_параметра <тип> [,имя_параметра <тип> ...])]
[RETURNS имя_параметра <тип> [,имя_параметра <тип> ...])]
AS <тело_процедуры> [terminator]
имя_проц Имя процедуры.
param <datatype> Входные параметры, используемые процедурой и тип данных
RETURNS param <datatype> Выходные параметры, используемые процедурой. Допустимые типы данных перечислены в Типы данных.
<тело_процедуры> Тело процедуры. Включает: ·Объявления локальных переменных. · Блок инструкций на языке процедур и триггеров.
terminator Терминатор, определенный для SQL командой SET TERM, указывающий конец тела процедуры
Изменение
ALTER PROCEDURE имя_проц
[(имя_параметра <тип> [,(имя_параметра <тип> ...])]
[RETURNS ((имя_параметра <тип> [,(имя_параметра <тип> ...])]
AS <тело_процедуры> [terminator]
Удаление
DROP PROCEDURE имя_проц;
Примеры
SET TERM ^ ;
CREATE PROCEDURE "MyProc"(
"ID" INTEGER)
AS
BEGIN EXIT; END ^
ALTER PROCEDURE "MyProc"
( "LID" INTEGER,
"LFAM" CHAR(30),
"LYEARS" INTEGER,
"LSTATUS" CHAR(10))
AS
BEGIN
INSERT INTO sotrudnik(id_sotr, fam, years, status)
VALUES(:lid, :lfam, :lyears, :lstatus);
END^
SET TERM ; ^
Чтобы выполнить эту процедуру необходимо выполнить команду:
execute procedure MyProc(123, 'Ленин', 35, 'Вождь');
commit;
А теперь удалим процедуру:
DROP PROCEDURE MyProc;
Еще один пример в котором используются циклы FOR:
CREATE PROCEDURE “SET_DEF_USER”(
“NewDefValue” CHAR(10),
“OldDefValue” CHAR(10))
RETURNS (
“Number” INTEGER)
AS
DECLARE VARIABLE Count INTEGER;
DECLARE VARIABLE TempID INTEGER;
BEGIN
:Count = 0;
FOR
SELECT “Status”, “ID_Status”
FROM “StatusTable”
WHERE “Status” = :OldDefValue
INTO :NewDefValue, :TempID
DO
BEGIN
UPDATE “StatusTable”
SET “Status” = :NewDefValue
WHERE “ID” = :TempID;
:Count = :Count + 1;
END;
:Number = :Count;
END^