Разделы презентаций


Элементы языка SQL

Содержание

Элементы языка SQLОбщие сведения Язык SQL оперирует терминами, несколько отличающимися от терминов реляционной теории, например, вместо "отношений" используются "таблицы", вместо "кортежей" - "строки", вместо "атрибутов" - "колонки" или "столбцы". Стандарт языка

Слайды и текст этой презентации

Слайд 1

Элементы языка SQL
Общие сведения

Базовым требованием к реляционным СУБД является

наличие мощного и в тоже время простого языка, позволяющего выполнять

все необходимые пользователям операции. В последние годы таким повсеместно принятым языком стал язык реляционных БД SQL.

SQL - Structured Query Language
(иногда понимается как Standard Query Language).

Язык SQL стал фактически стандартным языком доступа к базам данных. Все СУБД, претендующие на название "реляционные", реализуют тот или иной диалект SQL. Многие нереляционные системы также имеют в настоящее время средства доступа к реляционным данным. Целью стандартизации является переносимость приложений между различными СУБД.
В настоящее время, ни одна система не реализует стандарт SQL в полном объеме. Кроме того, во всех диалектах языка имеются возможности, не являющиеся стандартными. Таким образом, можно сказать, что каждый диалект - это надмножество некоторого подмножества стандарта SQL. Это затрудняет переносимость приложений, разработанных для одних СУБД в другие СУБД.
Элементы языка SQLОбщие сведения	 			Базовым требованием к реляционным СУБД является наличие мощного и в тоже время простого

Слайд 2

Элементы языка SQL
Общие сведения

Язык SQL оперирует терминами, несколько отличающимися

от терминов реляционной теории, например, вместо "отношений" используются "таблицы", вместо

"кортежей" - "строки", вместо "атрибутов" - "колонки" или "столбцы".

Стандарт языка SQL, хотя и основан на реляционной теории, но во многих местах отходит он нее. Например, отношение в реляционной модели данных не допускает наличия одинаковых кортежей, а таблицы в терминологии SQL могут иметь одинаковые строки. Имеются и другие отличия.

Язык SQL является реляционно полным. Это означает, что любой оператор реляционной алгебры может быть выражен подходящим оператором SQL.
Элементы языка SQLОбщие сведения	 Язык SQL оперирует терминами, несколько отличающимися от терминов реляционной теории, например, вместо

Слайд 3

Элементы языка SQL
Средства определения схемы БД
DDL (Data Definition Language)

CREATE

SCHEMA - создать схему базы данных
DROP SHEMA - удалить

схему базы данных
CREATE TABLE - создать таблицу
ALTER TABLE - изменить таблицу
DROP TABLE - удалить таблицу
CREATE DOMAIN - создать домен
ALTER DOMAIN - изменить домен
DROP DOMAIN - удалить домен
CREATE VIEW - создать представление
DROP VIEW - удалить представление
Элементы языка SQLСредства определения схемы БД DDL (Data Definition Language)	CREATE SCHEMA - создать схему базы данных DROP

Слайд 4

Элементы языка SQL
Средства определения схемы БД
Создание БД

CREATE {

DATABASE | SHEMA } “”
{ USER “имя_пользователя” [PASSWORD

“пароль”] ]
[ PAGE_SIZE [=] целое ]
[ LENGTH [=] целое [PAGE [S] ] ]
[ DEFAULT CHARASTER SET набор_символов ]
[ <вторичный_файл> ];

<вторичный файл> = FILE “<имя_файла>” [<файлов_информ>] [<вторичный файл>]

<файлов_информ> = LENGTH [ = ] целое [ PAGE [S] ] | STARTING [AT [PAGE]] целое <файлов_информ>
Элементы языка SQLСредства определения схемы БД 	Создание БДCREATE  { DATABASE | SHEMA } “”{ USER

Слайд 5

Элементы языка SQL
Средства определения схемы БД
Создание БД

Элементы языка SQLСредства определения схемы БД 	Создание БД

Слайд 6

Элементы языка SQL
Средства определения схемы БД
Создание БД

Пример:

CREATE DATABASE “D:\BD\SKLAD.GDB”
FILE

“D:\BD\SKLAD.GD1” STARTING AT PAGE 1001
LENGTH 500
FILE “D:\BD\SKLAD.GD\2”

Здесь

определяется БД D:\BD\SKLAD.GDB, состоящая из 3 файлов: первичного длиной 1000 страниц, второго длиной 500 страниц и третьего неопределенной длины.
Элементы языка SQLСредства определения схемы БД 	Создание БД	Пример:	CREATE DATABASE “D:\BD\SKLAD.GDB”	FILE “D:\BD\SKLAD.GD1”  STARTING  AT PAGE 1001						LENGTH

Слайд 7

Элементы языка SQL
Средства определения схемы БД
Типы данных и домены
Типы

данных:
Символьные (CHAR, VARCHAR)
Целочисленные (INTEGER, SMALLINT)
Вещественные (FLOAT, DOUBLE PRECISION)
Фиксированно-десятичные значения

(DECIMAL, NUMERIC)
Значения типа даты (DATE)
Двоичные (BLOB)

Понятие домена:
CREATE DOMAIN домен [AS] <тип данных>
[DEFAULT {литерал} | NULL | USER]
[NOT NULL] [CHECK (<Ограничение домена>) ]

Пример:
CREATE DOMAIN ID_TYPE AS INTEGER
CHECK (VALUE >= 100);


Элементы языка SQLСредства определения схемы БД 	Типы данных и доменыТипы данных:Символьные (CHAR, VARCHAR)Целочисленные (INTEGER, SMALLINT)	Вещественные  (FLOAT,

Слайд 8

Элементы языка SQL
Средства определения схемы БД
Типы данных и домены

Ограничение домена >= {
VALUE
| VALUE [NOT] BETWEEN

AND <значение2>
| VALUE [NOT] LIKE <значение1> [ESCAPE <значение2>]
| VALUE [NOT] IN <значение1> [, <значение2> …])
| VALUE IS [NOT] NULL
| VALUE [NOT] CONTAINING <значение>
| < Ограничение домена >
| NOT < Ограничение домена >
| < Ограничение домена > OR | < Ограничение домена >
| < Ограничение домена > AND < Ограничение домена >
};

где
<оператор> = { = | < | > | <= | >= | != | !< | !> | <> }











Элементы языка SQLСредства определения схемы БД 	Типы данных и домены< Ограничение домена >= {VALUE | VALUE [NOT]

Слайд 9
Элементы языка SQL
Средства определения схемы БД
Общий формат оператора создания

таблиц

CREATE TABLE ИмяТаблицы
(
[, | …]);

- определение столбца таблицы.

<опр_столбца> = тип_данных | COMPUTED [ BY ]
{<выражение>) | домен }
[ DEFAULT {литерал | NULL | USER } ]
[NOT NULL] [<огранич_столбца>]
Элементы языка SQLСредства определения схемы БД 	Общий формат оператора создания таблиц	CREATE TABLE ИмяТаблицы ( [, | …]);

Слайд 10
Элементы языка SQL
Средства определения схемы БД
Пример оператора создания таблиц

CREATE

TABLE SAL_HIST
QUORTER INTEGER NOT NULL,
LAST_YEAR INTEGER,
THIS_YEAR INTEGER,
DELTA

COMPUTED_BY (THIS_YEAR - LAST_YEAR),
PRIMARY KEY (QUORTER) );

Элементы языка SQLСредства определения схемы БД 	Пример оператора создания таблиц	CREATE TABLE SAL_HIST 	QUORTER INTEGER NOT NULL,	LAST_YEAR

Слайд 11
Элементы языка SQL
Средства определения схемы БД
Ограничения целостности

Ограничения целостности бывают

двух видов:
Накладываемые на отдельный столбец;
Накладываемые на всю таблицу.
При наложении на

отдельный столбец :
TOVAR VARCHAR(20) NOT NULL PRIMARY KEY, …

При наложении ограничений на таблицу :
CREATE TABLE … (
TOVAR VARCHAR(20) NOT NULL

PRIMARY KEY (TOVAR)
);


Элементы языка SQLСредства определения схемы БД 	Ограничения целостности	Ограничения целостности бывают двух видов:Накладываемые на отдельный столбец;Накладываемые на всю

Слайд 12
Элементы языка SQL
Средства определения схемы БД
Первичные и уникальные (альтернативные)

ключи

На уровне столбцов:
CREATE TABLE VLADLIM (
KODVLAD INTEGER NOT NULL PRIMARY

KEY,
NAZVVLAD VARCHAR(50) NOT NULL UNIQUE
);

На уровне таблицы:
CREATE TABLE VLADLIM (
KODVLAD INTEGER NOT NULL,
NAZVVLAD VARCHAR(50) NOT NULL,
PRIMARY KEY ( KODVLAD),
UNIQUE ()NAZVVLAD)
);


Элементы языка SQLСредства определения схемы БД 	Первичные и уникальные (альтернативные) ключи	На уровне столбцов:CREATE TABLE VLADLIM (	KODVLAD INTEGER

Слайд 13
Элементы языка SQL
Средства определения схемы БД
Внешний ключ и определение

ссылочной целостности

Внешний ключ строится в дочерней таблице.
Описание формата:

[CONSTRAINT

целостности>]
FOREIGN KEY ( <список столбцов внешнего ключа>)
REFERENCES <имя родительской таблицы>
[ <список столбцов родительской таблицы > ]
[ON DELETE { NO ACTION | CACADE | SET DEFAULT | SET NULL}]
[ON UPDATE { NO ACTION | CACADE | SET DEFAULT | SET NULL}]


Элементы языка SQLСредства определения схемы БД 	Внешний ключ и определение ссылочной целостности	Внешний ключ строится в дочерней таблице.Описание

Слайд 14
Элементы языка SQL
Средства определения схемы БД
Внешний ключ и определение

ссылочной целостности

Пример:
CREATE TABLE P (
PK_FIELD INTEGER NOT NULL,
OTHER FIELD INTEGER,
PRIMARY KEY

(PK_FIELD)
);
CREATE TABLE F (
PK_FIELD1 INTEGER NOT NULL,
PK_FIELD2 INTEGER NOT NULL,
SOME_FIELD INTEGER,
PRIMARY KEY (PK_FIELD1,PK_FIELD2),
FOREIGN KEY (PK_FIELD1) REFERENCES P
ON UPDATE CASCADE
);

Элементы языка SQLСредства определения схемы БД 	Внешний ключ и определение ссылочной целостности	Пример:CREATE TABLE P (	PK_FIELD	INTEGER NOT NULL,	OTHER

Слайд 15
Элементы языка SQL
Средства определения схемы БД
Требования к значениям столбцов
Примеры

фрагментов ограничений:
CREATE TABLE PERSON _PARAMS (
ID_INTEGER NOT NULL PRIMARY KEY,
HEIGHT

INTEGER NOT NULL,
WIEGHT INTEGER NOT NULL CHECK (HEIGHT > WIEGHT)
);
---------------------------------------------------------------------------------
CREATE TABLE RASHOD (

CONSTRAINT PO_DATE_RASH
CHECK (EXISTS (SELECT TOVAR FROM PRIHOD
WHERE PROHOD.TOVAR=RASHOD.TOVAR))
);
------------------------------------------------------------------------------
- Столбец должен содержать сочетание символов USD
…. CHECK (STOLBEZ CONTAINING “USD”)

-Столбец должен начинаться с сочетания символов USD
…. CHECK (STOLBEZ STARTING WITH “USD”)


Элементы языка SQLСредства определения схемы БД 	Требования к значениям столбцовПримеры фрагментов ограничений:CREATE TABLE PERSON _PARAMS (	ID_INTEGER NOT

Слайд 16
Элементы языка SQL
Средства определения схемы БД
Изменение объявлений таблицы
Оператор ALTER

TABLE позволяет:

Добавить определение нового столбца
ALTER TABLE ADD

столбца>;

Удалить столбец из таблицы
ALTER TABLE <имя таблицы> DROP <имя столбца1> [,<имя столбца2>…

3 . Удалить атрибуты целостности таблицы или отдельного столбца
ALTER TABLE <имя таблицы> DROP <имя ограничения целостности>

4. Добавить новые ограничения целостности
ALTER TABLE <имя таблицы> ADD [CONSTRAINT <имя ограничения>] <определение целостности>;



Элементы языка SQLСредства определения схемы БД 	Изменение объявлений таблицыОператор ALTER TABLE позволяет:Добавить определение нового столбца		ALTER TABLE ADD

Слайд 17
Элементы языка SQL
Средства определения схемы БД
Удаление таблицы

Удаление таблицы целиком:

DROP

TABLE


Элементы языка SQLСредства определения схемы БД 	Удаление таблицы	Удаление таблицы целиком:		DROP TABLE

Слайд 18
Элементы языка SQL
Работа с индексами
Логическое разделение на ключи индексы


Логический

уровень
Первичный ключ выполняет функцию однозначной идентификации записи в таблицы.

Первичный и внешний ключи строятся для обеспечения ссылочной целостности реляцинно-связанных таблиц.
Индексы служат для сортировок и оптимизации доступа к данным

Физический уровень
Все ключи и индексы преобразуются в физические индексы - специальный механизм, обеспечивающий быстрый доступ к данным.

Элементы языка SQLРабота с индексами 	Логическое разделение на ключи индексы	Логический уровень Первичный ключ выполняет функцию однозначной идентификации

Слайд 19
Элементы языка SQL
Необходимость создания индексов

Индексы необходимо создавать в случае,

когда по столбцу или группе столбцов:
Часто производится поиск в БД;
Часто

строятся объединения таблиц;
Часто производится сортировка;
Часто производится сортировка;
Не рекомендуется строить индексы по столбцам или группам столбцов, которые:
Редко используются для поиска, объединения , сортировки результатов запроса
Часто меняют значение, что приводит к необходимости часто обновлять индекс и способно существенно замедлить скорость работы с БД;
Содержит небольшое число вариантов значения
Элементы языка SQL	 Необходимость создания индексовИндексы необходимо создавать в случае, когда по столбцу или группе столбцов:Часто производится

Слайд 20
Элементы языка SQL
Работа с индексами
Логическое разделение на ключи индексы

Пример:

CREATE

TABLE SOTR (
ID_SOTR INTEGER NOT NULL,
OTDEL VARCHAR (10),
DOLGNOST CHAR

(10),
FIO VARCHAR(25),
PRIMARY KEY (ID_SOTR));
CREATE INDEX DLJ ON SOTR (DOLGNOST);

Именоваться индексы будут так :

DLJ INDEX ON SOTR (DOLGNOST)
RDB$PRIMARY18 UNIQUE INDEX ON SOTR (ID_SOTR)

Элементы языка SQLРабота с индексами 	Логическое разделение на ключи индексыПример:CREATE TABLE SOTR (ID_SOTR INTEGER NOT NULL, 	OTDEL

Слайд 21
Элементы языка SQL
Работа с индексами

Создание индекса
CREATE [UNIQUE] ASC |

DESC ]
INDEX ИмяИндекса ON ИмяТаблицы (столбец1 [, столбец2 … ]



UNIQUE – требует создания уникального индекса, не допускающего одинаковых значений индексных полей для разных записей таблицы.
ASC – указывает на необходимость сортировки полей по возрастанию (принят по умолчанию)
DESC - указывает на необходимость сортировки полей по убыванию

Определения всех индексов можно вывести оператором
SHOW INDEX ;

Для конкретной таблицы
SHOW INDEX <имя таблицы>;

Удаление существующих ключей
DROP INDEX <имя индекса>;
Элементы языка SQLРабота с индексами 	Создание индексаCREATE [UNIQUE] ASC | DESC ]INDEX ИмяИндекса ON ИмяТаблицы (столбец1 [,

Слайд 22
Элементы языка SQL
Работа с индексами


Пример:
CREATE TABLE PRIHOD(
ID_PRIHOD INTEGER NOT

NULL PRIMARY KEY,
DATAPRIH DATE NOT NULL,
TOVAR VARCHAR(20) NOT NULL,
KOLVO INTEGER

NOT NULL);
CREATE DESC INDEX D_P
ON PRIHOD (DATAPRIH, TOVAR);

.

Элементы языка SQLРабота с индексами 	Пример:CREATE TABLE PRIHOD(	ID_PRIHOD INTEGER NOT NULL PRIMARY KEY,	DATAPRIH DATE NOT NULL,	TOVAR VARCHAR(20)

Слайд 23
Элементы языка SQL
Работа с индексами
Улучшение производительности индекса

После многократного внесения

изменений в таблицу БД индексы этой таблицы могут быть разбалансированы.

Разбалансировка приводит к тому, что глубина индекса возрастает сверх критического значения.
Для улучшения показателя индекса необходимо выполнить его перестроение:

ALTER INDEX <имя индекса> DEACTIVATE;
ALTER INDEX <имя индекса> ACTIVATE;

Замечания:
Нельзя перестроить индекс, если он используется в данный момент в запросах
Нельзя перестроить индекс, созданный в результате создания первичного ключа, внешнего и уникального ключей.


.

Элементы языка SQLРабота с индексами 	Улучшение производительности индекса		После многократного внесения изменений в таблицу БД индексы этой таблицы

Слайд 24
Элементы языка SQL
Оператор SELECT

Позволяет производить выборки из ТБД и

преобразовывать к нужному виду полученные результаты.

Общий формат:

SELECT [DISTINCT | ALL

] {* | <значение1> [,<значение2> …]}
FROM <таблица1> [ , <таблица2> … ]
[ WHERE <условия_поиска> ]
[ GROUP BY столбец [, столбец1 … ]
[ HAVING < условия_поиска> ]
[ UNION <оператор_select>]
[ PLAN <план_выполнения_запроса>]
[ ORDER BY <список_столбцов>]


Элементы языка SQLОператор SELECT 			Позволяет производить выборки из ТБД и преобразовывать к нужному виду полученные результаты.Общий формат:SELECT

Слайд 25
Элементы языка SQL
Оператор SELECT

Простейший формат:

SELECT { * | ,

[, …]}
FROM [ ,


FROM RASHOD

Или так:

SELECT N_RASH, DAT_RASH, KOLVO, TOVAR, POKUP
FROM RASHOD
Элементы языка SQLОператор SELECT 			Простейший формат:SELECT { * | , [, …]}FROM [ ,

Слайд 26
Элементы языка SQL
Оператор SELECT
Использование предложения WHERE

Предложение WHERE используется для

включения в НД лишь нужных записей.
В этом случае имеем

следующий формат:

SELECT {* | <значение1> [,<значение2> …]}
FROM <таблица1> [ , <таблица2> … ]
[ WHERE <условия_поиска> ]

Сравнение значения столбца с константой При сравнении столбца с константой условие имеет вид:

<условия поиска > = <оператор> <константа>
Где <оператор> - одна из следующих операций отношения:
<оператор> = { = | < | > | <= | >= | != | !< | !> | <> }
Пример:
SELECT * FROM RASHOD WHERE KOLVO = 20

Элементы языка SQLОператор SELECT 		Использование предложения WHEREПредложение WHERE используется для включения в НД лишь нужных записей. В

Слайд 27
Элементы языка SQL
Оператор SELECT
Использование предложения WHERE

Внутреннее соединение таблиц
При сравнении

значения одной таблицы с со значением столбца другой таблицы условие

поиска имеет следующий вид:
<условия поиска > = <имя столбца 1> <оператор> <имя столбца 2>

Пример:
Чтобы выбрать все записи о расходе товара из таблицы RASHOD и для каждого товара указать его цену из таблицы TOVARY, можно использовать такой оператор:

SELECT RASHOD.*, TOVARY.ZENA
FROM RASHOD, TOVARY
WHERE RASHOD.TOVAR = TOVARY.TOVAR
Такой способ соединения называется внутренним соединением.
Элементы языка SQLОператор SELECT 		Использование предложения WHEREВнутреннее соединение таблиц	При сравнении значения одной таблицы с со значением столбца

Слайд 28
Элементы языка SQL
Оператор SELECT
Использование предложения WHERE

Внутреннее соединение таблиц
При внутреннем

соединении двух таблиц A и B логический порядок формирования результирующего

набора данных можно представить следующим образом.
Из столбцов, которые указаны после слова SELECT, составляется промежуточный набор данных путем сцепления результирующих столбцов каждой записи из таблицы А и результирующих столбцов записи из таблицы В.
Из получившегося НД отбрасываются все записи , не удовлетворяющие условию в предложении WHERE.

Замечание:
Фактический порядок выполнения запроса для конкретного SQL-сервера может быть другим.
Элементы языка SQLОператор SELECT 		Использование предложения WHEREВнутреннее соединение таблиц	При внутреннем соединении двух таблиц A и B логический

Слайд 29
Элементы языка SQL
Оператор SELECT
Использование предложения WHERE

Внутреннее соединение таблиц
Пример:
Таблица

A
Таблица B
Промежуточный набор
SELECT A.P1, A.P2, B.P2
FROM A, B
WHERE

A.P2 = B.P1

Окончательный набор

Элементы языка SQLОператор SELECT 		Использование предложения WHEREВнутреннее соединение таблиц Пример:Таблица A				Таблица BПромежуточный наборSELECT A.P1, A.P2, B.P2 FROM

Слайд 30
Элементы языка SQL
Оператор SELECT
Использование псевдонимов таблиц

SELECT …
FROM < таблица1

псевдоним1> [, таблица2 псевдоним 2 … ]
WHERE …

Пример:
SELECT R.*, P.ADRES
FROM

RASHOD R, POKUPATELI P
WHERE P.POKUP = R.POKUP
Элементы языка SQLОператор SELECT 		Использование псевдонимов таблицSELECT …FROM < таблица1 псевдоним1> [, таблица2 псевдоним 2 … ]WHERE

Слайд 31
Элементы языка SQL
Оператор SELECT
Предложение ORDER BY – определение сортировки

Результирующий

набор данных можно отсортировать с помощью предложения:

ORDER BY

Пример:
SELECT POKUP,

DATRASH, TOVAR, KOLVO
FROM RASHOD
WHERE TOVAR = “Кока-кола”
ORDER BY POKUP, DATARASH


Элементы языка SQLОператор SELECT 		Предложение ORDER BY – определение сортировкиРезультирующий набор данных можно отсортировать с помощью предложения:ORDER

Слайд 32
Элементы языка SQL
Оператор SELECT
Устранение повторяющихся значений

Часто в результирующий НД

необходимо включать не все записи с одинаковым значением комбинации столбцов.

Для этого используется ключевое слово
DISTINCT

Пример:
SELECT DISTINCT TOVAR
FROM RASHOD

Замечание:
использование DISTINCT может существенно замедлить выполнение запроса, т.к. сервер будет тратить дополнительные ресурсы на проверку каждой записи. Обычно применяется в запросах, использующих агрегатные функции.


Элементы языка SQLОператор SELECT 		Устранение повторяющихся значенийЧасто в результирующий НД необходимо включать не все записи с одинаковым

Слайд 33
Элементы языка SQL
Оператор SELECT
Расчет значений вычисляемых столбцов

Для расчета значений

вычисляемых столбцов результирующего НД используются арифметические выражения. При этом в

списке возвращаемых столбцов после SELECT вместо имени вычисляемого столбца указывается выражение:

SELECT [DISTINCT | ALL ]
{ * | <значение1> [,<значение2> …], <выражение1>[AS <имя_столбца>] …}
FROM <таблица1> [ , <таблица2> … ]

Пример:
SELECT R.*, T.ZENA, R.KOLVO*T.ZENA AS STOIM
FROM RASHOD R, TOVARY T
WHERE R.TOVAR = T.TOVAR

AS STOIM – необязательное присвоение имени вычисляемому столбцу

Элементы языка SQLОператор SELECT 		Расчет значений вычисляемых столбцов	Для расчета значений вычисляемых столбцов результирующего НД используются арифметические выражения.

Слайд 34
Элементы языка SQL
Оператор SELECT
Агрегатные функции

Агрегатные функции предназначены для вычисления

итоговых значений операций над всеми записями НД. К агрегатным относятся

следующие функции:
COUNT(<выражение>) – число вхождений выражения в результирующий НД;
SUM(<выражение>) – суммирует значение выражения;
AVG(<выражение>) – находит среднее значение;
MAX(<выражение>) – определяет максимальное значение;
MIN(<выражение>)- определяет минимальное значение.

Примеры:
SELECT COUNT(DISTINCT POKUP) AS COUNT_POKUP
FROM RASHOD;
-----------------------
SELECT SUM(R.KOLVO*T.ZENA) AS OBS_ZENA
FROM RASHOD R, TOVARY T
WHERE (R.TOVAR = T.TOVAR)

Элементы языка SQL	Оператор SELECT 	Агрегатные функции	Агрегатные функции предназначены для вычисления итоговых значений операций над всеми записями НД.

Слайд 35
Элементы языка SQL
Оператор SELECT
Группировка записей

Иногда требуется получить агрегированные значения

не по всему результирующему НД, а по каждой из входящих

в него групп записей, характеризующихся одинаковым значением какого-либо столбца. Для этого перед предложением WHERE вводится предложение:

GROUP BY столбец [ , столбец1 … ]
Примеры:
SELECT R.TOVAR, SUM(R.KOLVO*T.ZENA)
FROM RASHOD R, TOVARY T
WHERE R.TOVAR = T.TOVAR
GROUP BY R.TOVAR, R.DAT_RASH
---------------------------------------------------
SELECT DAT_RASH, COUNT(DISTINCT POKUP)
FROM RASHOD
GROUP BY DAT_RASH

Элементы языка SQL	Оператор SELECT 	Группировка записей	Иногда требуется получить агрегированные значения не по всему результирующему НД, а по

Слайд 36
Элементы языка SQL
Оператор SELECT
Наложение ограничений на группировку записей

Если нужно

в результирующем НД выдавать агрегацию не по всем группам, а

только по группам, которые отвечают некоторому условию то после GROUP BY указывается предложение :

HAVING <агрегатная функция> <отношение> <значение>
Агрегатная функция – одна из функций MIN, MAX, AVG, SUM
Отношение – одна из операций отношения.
Значение – константа, результат вычисления выражения или единичное значение, возвращаемое вложенным оператором SELECT.

Пример:
SELECT POKUP, MIN(KOLVO)
FROM RASHOD
GROUP BY POKUP
HAVING MIN (KOLVO) >= 100


Элементы языка SQL	Оператор SELECT 	Наложение ограничений на группировку записей	Если нужно в результирующем НД выдавать агрегацию не по

Слайд 37
Элементы языка SQL
Оператор SELECT
Наложение ограничений на группировку записей

Отличие HAVING

от WHERE:
HAVING – исключает из результирующего НД группы с результатами

агрегированных значений;

WHERE – исключает из расчета агрегатных значений по группировкам записи, не удовлетворяющие условию;

В условии поиска WHERE нельзя указывать агрегатную функцию.
Элементы языка SQL	Оператор SELECT 	Наложение ограничений на группировку записей	Отличие HAVING от WHERE:HAVING – исключает из результирующего НД

Слайд 38
Элементы языка SQL
Оператор SELECT: задание сложных условий поиска
Использование логических

выражений

Сложные логические выражения строятся при помощи операторов AND, OR и

NOT.
Замечание:
операторы отношения при построении выражений имеют меньший приоритет, чем логические операции, что избавляет от необходимости расстановки многочисленных скобок.

Пример:

SELECT R.*, T.ZENA
FROM RASHOD R, TOVARY T
WHERE R.TOVAR = T.TOVAR AND
(R.KOLVO <= 30 OR R.KOLVO >= 3000) AND
R.POKUP IS NOT NULL
ORDER BY R.KOLVO


Элементы языка SQL	Оператор SELECT: задание сложных условий поиска 	Использование логических выраженийСложные логические выражения строятся при помощи операторов

Слайд 39
Элементы языка SQL
Оператор SELECT: задание сложных условий поиска
Сравнение столбца

с результатом вычисления выражения


или аналогичный способ

<выражение>

Результат вычисления выражения сравнивается содержимым указанного столбца.
Пример:

SELECT R.DAT_RASH, R.TOVAR, T.ZENA
FROM RASHOD R, TOVAR T
WHERE R.TOVAR = T.TOVAR AND T.ZENA > (120 / R.KOLVO)
ORDER BY R.DAT_RASH
Элементы языка SQL	Оператор SELECT: задание сложных условий поиска 	Сравнение столбца с результатом вычисления выражения или аналогичный способ

Слайд 40
Элементы языка SQL
Оператор SELECT: задание сложных условий поиска
Использование BETWEEN

[ NOT ] BETWEEN AND
Указать значение, которое должно

находиться в интервале между значением1 и значением2.

Пример:

SELECT *
FROM RASHOD
WHERE KOLVO BETWEEN 1000 AND 3000
Элементы языка SQL	Оператор SELECT: задание сложных условий поиска 	Использование BETWEEN [ NOT ] BETWEEN AND 	Указать значение,

Слайд 41
Элементы языка SQL
Оператор SELECT: задание сложных условий поиска
Использование IN

Если

нужно, чтобы значение какого-либо столбца (или результат вычисления некоторого выражения)

совпадало с одним из дискретных значений, в условии поиска указывается предложение:

<значение> [ NOT ] IN ( <значение1> [, <значение2> … ] )

В результирующий НД будут включены только те записи, для которых значение, стоящее слева от IN , равно одному из значений, указанному в списке значений.
Пример:
SELECT *
FROM RASHOD
WHERE KOLVO IN (100, 1000, 3000 )

Замечание. Существует вторая форма использования IN, в которой список возможных значений возвращается вложенным запросом SELECT.
Элементы языка SQL	Оператор SELECT: задание сложных условий поиска 	Использование IN	Если нужно, чтобы значение какого-либо столбца (или результат

Слайд 42
Элементы языка SQL
Оператор SELECT: задание сложных условий поиска
Использование STARTING

Если

нужно, чтобы значение какого-либо символьного столбца (или некоторого выражения) НАЧИНАЛОСЬ

с определенной подстроки, в условии поиска указывается предложение:


<значение> [ NOT ] STARTING [WITH] <подстрока>

Пример:
SELECT *
FROM TOVARY
WHERE TOVAR STARTING WITH ‘C’

Элементы языка SQL	Оператор SELECT: задание сложных условий поиска 	Использование STARTING	Если нужно, чтобы значение какого-либо символьного столбца (или

Слайд 43
Элементы языка SQL
Оператор SELECT: задание сложных условий поиска
Использование CONTAINING

Если

нужно, чтобы значение какого-либо символьного столбца (или некоторого выражения) ВКЛЮЧАЛО

В СЕБЯ определенную подстроку, в условии поиска указывается предложение:


<значение> [ NOT ] CONTAINIG <подстрока>

Пример:
SELECT *
FROM POKUPATELI
WHERE ADRES CONTAINING ‘Стр’

Элементы языка SQL	Оператор SELECT: задание сложных условий поиска 	Использование CONTAINING	Если нужно, чтобы значение какого-либо символьного столбца (или

Слайд 44
Элементы языка SQL
Оператор SELECT: задание сложных условий поиска
Использование функции

UPPER

Функция преобразует все буквы аргумента в заглавные.
UPPER ()

Обычно эта

функция используется в условиях поиска, когда необходимо игнорировать возможную разницу в высоте букв. Может использоваться как в списке столбцов результирующего НД, так и в условии поиска в предложении WHERE.

Пример:
SELECT *
FROM POKUPATELI
WHERE UPPER(GOROD) = ‘МОСКВА’

Элементы языка SQL	Оператор SELECT: задание сложных условий поиска 	Использование функции UPPER	Функция преобразует все буквы аргумента в заглавные.

Слайд 45
Элементы языка SQL
Оператор SELECT: задание сложных условий поиска
Использование LIKE

Предложение

LIKE определяет шаблоны сравнения строковых значений. Если необходимо , чтобы

сравниваемое значение удовлетворяло шаблону, в условии поиска необходимо указать
<значение> [NOT] LIKE <шаблон> [ESCAPE <подшаблон>]
В шаблоне используются специальные символы - «%» и «_».
Символ «%» означает, что на его месте может быть строка любой длины.
Символ «_» используется для указания любого одиночного символа.
ESCAPE определяет символ, появление которого в шаблоне отменяет специальные функции следующего за ним символа.

Примеры:
LIKE “%USD”
LIKE “__94”
WHERE STOLBEZ LIKE “_!%” ESCAPE “!”
Элементы языка SQL	Оператор SELECT: задание сложных условий поиска 	Использование LIKE	Предложение LIKE определяет шаблоны сравнения строковых значений. Если

Слайд 46
Элементы языка SQL
Оператор SELECT: задание сложных условий поиска
Использование функции

CAST

Для того, чтобы трактовать значение одного типа как значение другого

типа применяется функция CAST:

CAST (<значение> AS <тип_данных>)

Множество типов данных, в которые может быть преобразовано значение:





Примеры:
SELECT *
FROM RASHOD
WHERE CAST(KOLVO AS CHAR(4)) LIKE “%09”
Элементы языка SQL	Оператор SELECT: задание сложных условий поиска 	Использование функции CAST	Для того, чтобы трактовать значение одного типа

Слайд 47
Элементы языка SQL
Оператор SELECT: использование подзапросов
Вложение подзапросов

Часто невозможно решить

поставленную задачу путем использования единственного запроса. Например, в тех случаях,

когда при использовании условия поиска в предложении WHERE параметр <значение, с которым сравнивать> заранее не определен и должен вычисляться в момент выполнения оператора SELECT.
В этом случае оператор SELECT с подзапросом имеет следующий вид:
SELECT …
FROM …
WHERE <сравниваемое_значение> <оператор> (SELECT …)
Пример:
SELECT KOLVO, DAT_RASH
FROM RASHOD
WHERE KOLVO = (SELECT MAX(KOLVO) FROM RASHOD)
Замечание.
Ошибкой для данного вида запроса является использование вложенного оператора SELECT, возвращающего вместо единичного список значений.
Элементы языка SQL	Оператор SELECT: использование подзапросов 	Вложение подзапросов	Часто невозможно решить поставленную задачу путем использования единственного запроса. Например,

Слайд 48
Элементы языка SQL
Оператор SELECT: использование подзапросов
Вложение подзапросов

Пример1 (ошибочный):
SELECT R.DAT_RASH,

R.TOVAR, R.KOLVO, R.POKUP
FROM RASHOD R
WHERE R.POKUP = (SELECT POK.POKUP

FROM POKUPATELI POK
WHERE UPPER(POK.GOROD) = ‘МОСКВА’)

Пример 2 (исправленный):
SELECT R.DAT_RASH, R.TOVAR, R.KOLVO, R.POKUP
FROM RASHOD R
WHERE R.POKUP IN (SELECT POK.POKUP
FROM POKUPATELI POK
WHERE UPPER(POK.GOROD) = ‘МОСКВА’)


Элементы языка SQL	Оператор SELECT: использование подзапросов 	Вложение подзапросов	Пример1 (ошибочный):SELECT R.DAT_RASH, R.TOVAR, R.KOLVO, R.POKUPFROM RASHOD RWHERE R.POKUP =

Слайд 49
Элементы языка SQL
Оператор SELECT: использование подзапросов
Вложение подзапросов

Пример 3.

SELECT RRR.*
FROM

RASHOD RRR
WHERE R.POKUP IN
(SELECT R.POKUP
FROM RASHOD R
WHERE KOLVO

=
(SELECT MAX(RSH.KOLVO)
FROM RASHOD RSH) )

Логический порядок выполнения запроса:
Определяется самая крупная покупка – отыскивается максимальное значение в столбце KOLVO («самый вложенный» запрос).
Определяется покупатель, осуществивший эту покупку (средний запрос)
Основной запрос выбирает записи с заданным покупателем.

Элементы языка SQL	Оператор SELECT: использование подзапросов 	Вложение подзапросовПример 3.SELECT RRR.*FROM RASHOD RRRWHERE R.POKUP IN 	(SELECT R.POKUP	 FROM

Слайд 50
Элементы языка SQL
Оператор SELECT: использование подзапросов
Дополнительные возможности

Предложение EXISTS. Требуется

отобрать только те данные, для которых подзапрос возвращает одно или

более значений.
EXISTS (<подзапрос>)

Пример.
Составить список покупателей, которые хотя бы один раз получали товар со склада:

SELECT P.POKUP
FROM POKUPATELI P
WHERE EXISTS (SELECT R.POKUP
FROM RASHOD R
WHERE R.POKUP = P.POKUP )


Элементы языка SQL	Оператор SELECT: использование подзапросов 	Дополнительные возможности	Предложение EXISTS. Требуется отобрать только те данные, для которых подзапрос

Слайд 51 Оператор SELECT: использование подзапросов
Дополнительные возможности

Предложение SINGULAR. Требуется выбрать лишь

те записи, для которых подзапрос возвращает только одно значение.
SINGULAR ()

Пример.
Составить

список покупателей, купивших только один товар:

SELECT P.*
FROM POKUPATELI P
WHERE SINGULAR (SELECT *
FROM RASHOD R
WHERE R.POKUP = P.POKUP )


Элементы языка SQL

Оператор SELECT: использование подзапросов 	Дополнительные возможности	Предложение SINGULAR. Требуется выбрать лишь те записи, для которых подзапрос возвращает только

Слайд 52 Оператор SELECT: использование подзапросов
Дополнительные возможности

Использование ALL, SOME (ANY). Если

в условиях поиска необходимо указать , что сравниваемое значение должно

находиться в определенных отношениях со всеми или некоторыми значениями из множества значений, возвращаемых подзапросом, применяют выражение:
<сравниваемое_значение> [NOT] <оператор> {ALL | SOME | ANY } (<подзапрос>)
ALL указывает, что условие поиска будет истинно только тогда, когда сравниваемое значение находится в нужном отношении со ВСЕМИ значениями, возвращаемыми подзапросом.

WHERE STOLBEZ > ALL (SELECT POLE FROM TABLIZA)

SOME (или ANY) условие истинно, когда сравниваемое значение находится в нужном отношении ХОТЯ БЫ С ОДНИМ значением, возвращаемым подхвпросом.

WHERE STOLBEZ > SOME (SELECT POLE FROM TABLIZA)

Элементы языка SQL

Оператор SELECT: использование подзапросов 	Дополнительные возможности	Использование ALL, SOME (ANY). Если в условиях поиска необходимо указать , что

Слайд 53 Оператор SELECT: использование подзапросов
Дополнительные возможности

Использование ALL, SOME (ANY)
Пример.
Определим

все факты отгрузки товара со склада, в которых количество единиц

отгружаемого товара превышает среднее значение.

SELECT * FROM RASHOD R1
WHERE R1.KOLVO > ALL
(SELECT AVG(R2.KOLVO) FROM RASHOD R2
GROUP BY POKUP)

Определим все факты отгрузки товара со склада, в которых количество единиц отгружаемого товара превышает среднее значение отгрузки хотя бы одного товара.
SELECT * FROM RASHOD R1
WHERE R1.KOLVO > SOME
(SELECT AVG(R2.KOLVO) FROM RASHOD R2
GROUP BY POKUP)

Элементы языка SQL

Оператор SELECT: использование подзапросов 	Дополнительные возможностиИспользование ALL, SOME (ANY)Пример. Определим все факты отгрузки товара со склада, в

Слайд 54 Оператор SELECT: использование подзапросов
Использование HAVING и агрегатных функций для

вложенных подзапросов


Если в условиях поиска для вложенного запроса нужно указать

агрегатную функцию, используется предложение HAVING.

Пример.
Определим покупателя, у которого средняя покупка больше средней покупки других покупателей. .


SELECT R1.POKUP, AVG(R1.KOLVO) FROM RASHOD R1
GROUP BY R1.POKUP
HAVING AVG(R1.KOLVO) >= ALL
(SELECT AVG(R2.KOLVO) FROM RASHOD R2
GROUP BY POKUP)

Элементы языка SQL

Оператор SELECT: использование подзапросов 	Использование HAVING и агрегатных функций для вложенных подзапросовЕсли в условиях поиска для вложенного

Слайд 55 Оператор SELECT
Внешние соединения

Внешнее соединение таблиц определяется в предложении FROM

согласно следующей спецификации:
SELECT { * | [, …]}
FROM

<таблица1> <вид_соединения> JOIN <таблица2> ON <условие_поиска>

Внешнее соединение отличается от внутреннего тем, что в результирующий НД включаются также записи ведущей таблицы соединения, которые объединяются с пустым множеством записей другой таблицы. Какая из таблиц будет ведущей, определяет вид соединения:
LEFT – (левое внешнее соединение), когда ведущей являются таблица1 (расположена СЛЕВА от вида соединения).
RIGHT – (правое внешнее соединение), когда ведущей являются таблица2 (расположена СПРАВА от вида соединения).
FULL – (полное внешнее соединение), когда ведущими являются и таблица1, и таблица2.

Элементы языка SQL

Оператор SELECT 	Внешние соединенияВнешнее соединение таблиц определяется в предложении FROM согласно следующей спецификации:SELECT { * | [,

Слайд 56 Оператор SELECT
Внешние соединения

Таблица A
Таблица B
SELECT A.P1, A.P2, B.P2
FROM A


LEFT JOIN B ON A.P2 = B.P1
Результирующий НД
Элементы языка SQL

Оператор SELECT 	Внешние соединенияТаблица AТаблица BSELECT A.P1, A.P2, B.P2FROM A LEFT JOIN B ON A.P2 = B.P1Результирующий

Слайд 57 Оператор SELECT
Внешние соединения

Таблица A
Таблица B
SELECT A.P1, A.P2, B.P2
FROM A


RIGHT JOIN B ON A.P2 = B.P1
Результирующий НД
Элементы языка SQL

Оператор SELECT 	Внешние соединенияТаблица AТаблица BSELECT A.P1, A.P2, B.P2FROM A RIGHT JOIN B ON A.P2 = B.P1Результирующий

Слайд 58 Оператор SELECT
Внешние соединения

Таблица A
Таблица B
SELECT A.P1, A.P2, B.P1, B.P2


FROM A
FULL JOIN B ON A.P2 = B.P1
Результирующий НД
Элементы

языка SQL
Оператор SELECT 	Внешние соединенияТаблица AТаблица BSELECT A.P1, A.P2, B.P1, B.P2 FROM A FULL JOIN B ON A.P2

Слайд 59 Оператор SELECT
Внешние соединения

Пример 1. Несколько последовательных внешних соединений

SELECT R.DAT_RASH,

R.TOVAR, T.ED_IZM, R.KOLVO, P.ADRES
FROM RASHOD R
LEFT JOIN POKUPATELI P

ON R.POKUP = P.POKUP
LEFT JOIN TOVARY T ON R.TOVAR = T.TOVAR

Пример 2. Комбинирование внешних и внутренних соединений
SELECT P.POKUP, R.DAT_RASH, R.TOVAR, T.ED_IZM, R.KOLVO
FROM POKUPATELI P
P LEFT JOIN RASHOD R ON R.POKUP = P.POKUP
INNER JOIN TOVARY T ON R.TOVAR = T.TOVAR


Элементы языка SQL

Оператор SELECT 	Внешние соединенияПример 1. Несколько последовательных внешних соединений	SELECT R.DAT_RASH, R.TOVAR, T.ED_IZM, R.KOLVO, P.ADRES	FROM RASHOD R 	LEFT

Слайд 60 Оператор SELECT
Объединение запросов – UNION
Иногда бывает полезным объединить два

или более результирующих наборов данных.
Результирующие наборы должны иметь одинаковую структуру

(состав столбцов).
Если в результирующих наборах имеется одна и та же запись, в сводном наборе она не
дублируется.

SELECT R.*
FROM RASHOD R
WHERE R.TOVAR CONTAINING ‘Сахар’
UNION
SELECT R.*
FROM RASHOD R
WHERE R.KOLVO >= 100




Элементы языка SQL

Оператор SELECT 	Объединение запросов – UNIONИногда бывает полезным объединить два или более результирующих наборов данных.Результирующие наборы должны

Слайд 61 Оператор SELECT
Использование IS NULL
Если требуется выдать записи, в которых

некоторый столбец (или результат вычисления выражений) имеет значение NULL, то

в условии достаточно указать предложение:

<значение> IS [NOT] NULL

Пример.
Показать все факты отгрузки товаров со склада, для которых не указан покупатель.

SELECT * FROM RASHOD
WHERE POKUP IS NULL



Элементы языка SQL

Оператор SELECT 	Использование IS NULLЕсли требуется выдать записи, в которых некоторый столбец (или результат вычисления выражений) имеет

Слайд 62 Оператор SELECT
Использование операции сцепления строк
Операция || соединяет два строковых

значения , которые могут быть представлены выражениями:

||

Операцию

можно использовать как после слова SELECT, так и в предложении WHERE

Пример.
Показать в одном столбце имена покупателей и названия их городов:

SELECT POKUP || ‘ (‘ || GOROD || ‘)’
FROM POKUPATELI



Элементы языка SQL

Оператор SELECT 	Использование операции сцепления строкОперация || соединяет два строковых значения , которые могут быть представлены выражениями:

Слайд 63 Оператор INSERT
Формат оператора добавления записей


INSERT INTO [ (столбец1

[ , столбец2 …]) ]
{VALUES ( [, …]) |

<оператор SELECT>}

Список столбцов указывает столбцы, которым будут присвоены значения в добавляемых
записях. Список столбцов может быть опущен. В этом случае подразумеваются все
столбцы объекта.

Поставить в соответствие столбцам списки значений можно двумя способами
Явное указание значений после слова VALUES
Формирование значений при помощи оператора SELECT.

Элементы языка SQL

Оператор INSERT 	Формат оператора добавления записейINSERT INTO  [ (столбец1 [ , столбец2 …]) ]{VALUES ( [,

Слайд 64 Оператор INSERT
Формат оператора добавления записей


INSERT INTO [ (столбец1

[ , столбец2 …]) ]
{VALUES ( [, …]) |

<оператор SELECT>}

Список столбцов указывает столбцы, которым будут присвоены значения в добавляемых
записях. Список столбцов может быть опущен. В этом случае подразумеваются все
столбцы объекта.

Поставить в соответствие столбцам списки значений можно двумя способами
Явное указание значений после слова VALUES
Формирование значений при помощи оператора SELECT.

Элементы языка SQL

Оператор INSERT 	Формат оператора добавления записейINSERT INTO  [ (столбец1 [ , столбец2 …]) ]{VALUES ( [,

Слайд 65 Оператор INSERT
Явное указание списка значений


INSERT INTO [ (столбец1

[ , столбец2 …]) ]
VALUES ( [, …])

Пример.

INSERT INTO

RASHOD (N_RASH, DAT_RASH, KOLVO, TOVAR, POKUP)
VALUES (45 ,”20.01.2005”, 100, “Сахар”, “Саяны”)

Или, если столбцы указаны в полном составе и порядке создания:

INSERT INTO RASHOD
VALUES (45 ,”20.01.2005”, 100, “Сахар”, “Саяны”)

Элементы языка SQL

Оператор INSERT 	Явное указание списка значенийINSERT INTO  [ (столбец1 [ , столбец2 …]) ]VALUES ( [,

Слайд 66 Оператор UPDATE
Формат оператора изменения записей

UPDATE
SET столбец1 =

[ , столбец2 = …]
[WHERE ]


Пример.

UPDATE

RASHOD
SET DAT_RASH = “24.01.2005”, KOLVO=KOLVO+2
WHERE DAT_RASH = “20.01.2005”

Элементы языка SQL

Оператор UPDATE 	Формат оператора изменения записейUPDATE  SET столбец1 = [ , столбец2 =  …][WHERE ]Пример.UPDATE

Слайд 67 Оператор DELETE
Формат оператора удаления записей

DELETE FROM
[WHERE

]


Пример.

DELETE FROM RASHOD
WHERE (DAT_RASH = “20.01.2005”) AND (TOVAR = “Сахар”)

Элементы

языка SQL
Оператор DELETE 	Формат оператора удаления записейDELETE FROM  [WHERE ]Пример.DELETE FROM RASHODWHERE (DAT_RASH = “20.01.2005”) AND (TOVAR

Слайд 68 Работа с просмотрами (VIEW)
Понятие просмотра как виртуальной таблицы

Формирование записей

в просмотре определяется оператором SELECT.
Для создания просмотра применяется оператор:

CREATE

VIEW ИмяПросмотра [ (столбец_view [, столбец_view1 … ] ) ]
AS < оператор_select > [WITH CHECK OPTION]

Необязательный параметр WITH CHECK OPTION определяет, допускать ли для обновляемых просмотров ввод записей, не удовлетворяющих условию формирования просмотра.
Пример:
CREATE VIEW FULL_RASHOD AS
SELECT R.DAT_RASH, R.TOVAR, R.KOLVO, T.ZENA
WHERE R.TOVAR = T.TOVAR

После этого к нему можно обращаться как к обычной таблице БД:
SELECT * FULL_RASHOD

Элементы языка SQL

Работа с просмотрами (VIEW) 	Понятие просмотра как виртуальной таблицы	Формирование записей в просмотре определяется оператором SELECT. 	Для создания

Слайд 69 Работа с просмотрами (VIEW)
Способы формирования просмотра
Просмотр может создаваться как:
1)

вертикальный срез таблицы, когда в просмотр включается подмножество столбцов таблицы,

например:
CREATE VIEW RASH_VERT AS
SELECT DAT_RASH, TOVAR, KOLVO FROM RASHOD

2) горизонтальный срез таблицы, когда в просмотр включаются все столбце, но не все записи, например:
CREATE VIEW RASH_GORIZ AS
SELECT * FROM RASHOD WHERE TOVAR = “Сахар”

3) вертикально-горизонтальный срез таблицы:
CREATE VIEW RASH_VERT_GORIZ AS
SELECT DAT_RASH, TOVAR, KOLVO FROM RASHOD WHERE TOVAR = “Сахар”

4) подмножество строк и столбцов соединения разных таблиц:
CREATE VIEW FULL_RASHOD AS
SELECT R.DAT_RASH, R.TOVAR, R.KOLVO, T.ZENA
FROM RASHOD R, TOVARY T
WHERE R.TOVAR = T.TOVAR

Элементы языка SQL

Работа с просмотрами (VIEW) 	Способы формирования просмотра	Просмотр может создаваться как:	1) вертикальный срез таблицы, когда в просмотр включается

Слайд 70 Работа с просмотрами (VIEW)
Обновляемые и необновляемые просмотры
Чтобы просмотру можно

было применять операторы UPDATE, DELETE необходимо одновременное выполнение двух условий:
Просмотр

должен формироваться из записей только одной таблицы;
Оператор SELECT просмотра не должен использовать агрегатных функций, режима DISTINCT, предложения HAVING, соединения таблиц, хранимых процедур и функций, определённых пользователем.

Чтобы в просмотр можно было добавлять записи оператором INSERT необходимо одновременное выполнение трёх условий:
В просмотр должен быть включен каждый столбец таблицы, имеющий атрибут NOT NULL ;
Просмотр должен формироваться из записей только одной таблицы;
Оператор SELECT просмотра не должен использовать агрегатных функций, режима DISTINCT, предложения HAVING, соединения таблиц, хранимых процедур и функций, определённых пользователем.

Элементы языка SQL

Работа с просмотрами (VIEW) 	Обновляемые и необновляемые просмотры	Чтобы просмотру можно было применять операторы UPDATE, DELETE необходимо одновременное

Слайд 71 Работа с просмотрами (VIEW)
Дополнительные параметры просмотра

1) Указание имен

столбцов просмотра. Имена столбцов просмотра должны указываться, когда в качестве

столбца определяется выражение:
CREATE VIEW STOIM_RASH (DAT_RASH, TOVAR, STOIM) AS
SELECT R.DAT, R.TOVAR, R.KOLVO*T.ZENA
FROM RASHOD R, TOVARY T
WHERE R.TOVAR = T.TOVAR

2) Использование CHECK OPTION. Если указан CHECK OPTION, то будут отвергаться все попытки добавления новых или изменения существующих записей таким образом, чтобы нарушалось условие WHERE оператора SELECТ.
CREATE VIEW RASH_1000_CHECK AS
SELECT * FROM RASHOD
WHERE KOLVO > 1000
WITH CHECK OPTRION

Нельзя добавить записи со значением поля KOLVO, меньшим 1000

Элементы языка SQL

Работа с просмотрами (VIEW) 	Дополнительные параметры просмотра 	1) Указание имен столбцов просмотра. Имена столбцов просмотра должны указываться,

Слайд 72 Работа с хранимыми процедурами
Понятие хранимой процедуры

Хранимая процедура –

это модуль, написанный на процедурном языке и хранящийся в БД

как метаданные (т.е. данные о данных).

Существует два вида хранимых процедур:
процедуры выбора - могут возвращать более одного значения. В приложении имя ХП выбора подставляется в оператор SELECT вместо имени таблицы или просмотра;
процедуры действия – вообще могут не возвращать данных и используются для реализации каких-либо действий .

Преимущества использования ХП:
1) одну процедуру можно использовать многими приложениями;
2) разгрузка приложения клиента путем переноса части кода на сервер и вследствие этого – упрощение клиентских приложений;
3) при изменении ХП все изменения немедленно становятся доступными для всех клиентских приложений;
4) улучшенные характеристики выполнения, связанные с тем, что ХП выполняются сервером, в частности – уменьшенный сетевой трафик.

Элементы языка SQL

Работа с хранимыми процедурами 	Понятие хранимой процедуры 	Хранимая процедура – это модуль, написанный на процедурном языке и

Слайд 73 Работа с хранимыми процедурами
Создание хранимой процедуры

Хранимая процедура создается

оператором:

CREATE PROCEDURE ИмяПроцедур
[ ( входной_параметр тип_данных
[, входной_параметр тип_данных … ]

) ]
[ RETURNS
( выходной_параметр тип_данных
[ , выходной_параметр тип_данных … ] ) ]
AS
[< объявление локальных переменных процедуры>]
BEGIN
< оператор >
[ < оператор > … ]
END ;

Элементы языка SQL

Работа с хранимыми процедурами 	Создание хранимой процедуры 	Хранимая процедура создается оператором:		CREATE PROCEDURE ИмяПроцедур			[ ( входной_параметр тип_данных		[, входной_параметр

Слайд 74 Работа с хранимыми процедурами
Создание хранимой процедуры

Пример:

CREATE PROCEDURE FIND_MAX_KOLVO

(IN_TOVAR VARCHAR(20))
RETURNS (MAX_KOLVO INTEGER)
AS
BEGIN
SELECT MAX(KOLVO)

FROM RASHOD
WHERE TOVAR = :IN_TOVAR
INTO :MAX_KOLVO;
SUSPEND;
END ;

Элементы языка SQL

Работа с хранимыми процедурами 	Создание хранимой процедуры 	Пример:		CREATE PROCEDURE FIND_MAX_KOLVO (IN_TOVAR VARCHAR(20))		RETURNS (MAX_KOLVO INTEGER) 		AS 		BEGIN

Слайд 75 Работа с хранимыми процедурами
Алгоритмический язык хранимых процедур

Формат объявления локальных

переменных:

DECLARE VARIABLE < тип данных >

;

Пример:

CREATE PROCEDURE FULL_ADR (TOVAR VARCHAR(20) )
RETURNS GOROD_ADRES VARCHAR(40)) AS
DECLARE VARIABLE NAIDEN_POKUPATEL VARCHAR(20);
DECLARE VARIABLE MAX_KOLVO INTEGER;
BEGIN
….
END ;

Элементы языка SQL

Работа с хранимыми процедурами 	Алгоритмический язык хранимых процедур	Формат объявления локальных переменных: 	DECLARE VARIABLE  < тип данных

Слайд 76 Работа с хранимыми процедурами
Алгоритмический язык хранимых процедур

Операторные скобки :
Используются

для указания границ составного оператора
BEGIN

...
END ;

Оператор присваивания:
Имя_переменной = выражение ;

OUT_TOVAR = UPPER(TOVAR);

Оператор условия :
IF ( < условие> ) THEN
< оператор 1>
[ELSE
< оператор 2 > ]:

Элементы языка SQL

Работа с хранимыми процедурами 	Алгоритмический язык хранимых процедур	Операторные скобки :	Используются для указания границ составного оператора 	BEGIN

Слайд 77 Работа с хранимыми процедурами
Оператор SELECT

Оператор SELECT используется в ХП

для выдачи единичной строки. К обычному формату SELECT в процедурный

оператор добавлено предложение:

INTO :переменная [, переменная … ]

Пример:


SELECT AVG(KOLVO), SUM(KOLVO)
FROM RASHOD
WHERE TOVAR = :IN_TOVAR
INTO :AVG_KOLVO, :SUM_KOLVO;

Элементы языка SQL

Работа с хранимыми процедурами 	Оператор SELECT	Оператор SELECT используется в ХП для выдачи единичной строки. К обычному формату

Слайд 78 Работа с хранимыми процедурами
Оператор FOR SELECT … DO
FOR


< оператор SELECT >
DO
< оператор > ;

Оператор SELECT

используется в ХП в расширенном синтаксисе с INTO. Для каждой строки полученного результирующего НД выполняется оператор, следующий за словом DO. Этим оператором часто бывает SUSPEND, который приводит к возврату выходных параметров в вызывающее приложение.

Пример:
CREATE PROCEDURE RASHOD_TOVARA (IN_TOVAR VARCHAR(20) )
RETURNS (OUT_DAT DATE, OUT_POKUP VARCHAR(20),
OUT_KOLVO INTEGER) AS
BEGIN
FOR SELECT DAT_RASH, POKUP, KOLVO FROM RASHOD
WHERE TOVAR = :IN_TOVAR
INTO :OUT_DAT, :OUT_POKUP, :OUT_KOLVO
DO
SUSPEND;
END

Элементы языка SQL

Работа с хранимыми процедурами 	Оператор FOR SELECT … DO 		FOR 			< оператор SELECT > 		DO 			< оператор

Слайд 79 Работа с хранимыми процедурами
Оператор SUSPEND
Оператор SUSPEND передает в

вызывающее приложение значения результирующих параметров (перечисленных после слова RETURNS в

описании функции), имеющие место на момент выполнения SUSPEND. Когда от оператора SELECT вызывающего приложения приходит запрос на следующее значение выходных параметров , выполнение хранимой процедуры возобновляется.
Пример:
CREATE PROCEDURE POK_LIST (IN_TOVAR VARCHAR(20) )
RETURNS (POK VARCHAR(20) ) AS
DECLARE VARIABLE AVG_KOLVO INTEGER;
BEGIN
SELECT AVG(KOLVO) FROM RASHOD
WHERE TOVAR = :IN_TOVAR
INTO :AVG_KOLVO;
FOR SELECT POKUP FROM RASHOD
WHERE KOLVO >= :AVG_KOLVO
INTO :POK
DO
BEGIN
IF (:POK IS NULL) THEN
POK = “Покупатель не указан”;
SUSPEND;
END
END

Элементы языка SQL

Работа с хранимыми процедурами 	Оператор SUSPEND 	Оператор SUSPEND передает в вызывающее приложение значения результирующих параметров (перечисленных после

Слайд 80 Работа с хранимыми процедурами
Оператор WHILE … DO
WHILE ()

DO
< оператор > ;
В цикле проверяется выполнение условия. Если

истинно – выполняется оператор. Цикл продолжается пока условие не станет ложным.

Пример:
CREATE PROCEDURE SUM_0_N ( N INTEGER )
RETURNS ( S INTEGER ) AS
DECLARE VARIABLE TMP INTEGER;
BEGIN
S = 0;
TMP=1;
WHILE ( TMP <= N ) DO
BEGIN
S = S+TMP;
TM = TPM + 1;
END
END

Элементы языка SQL

Работа с хранимыми процедурами 	Оператор WHILE … DO 		WHILE () DO 			< оператор > ;	В цикле проверяется

Слайд 81 Работа с хранимыми процедурами
Оператор EXIT
Оператор EXIT инициирует прекращение выполнения

процедуры и выход в вызывающее приложение.

Пример:
CREATE PROCEDURE MAX_VALUE ( А

INTEGER, B INTEGER )
RETURNS ( M_V INTEGER ) AS
DECLARE VARIABLE TMP INTEGER;
BEGIN
IF ( :A IS NULL OR :B IS NULL ) THEN EXIT;
IF ( :A > :B ) THEN M_V = :A ;
ELSE M_V = :B ;
END

Элементы языка SQL

Работа с хранимыми процедурами 	Оператор EXIT	Оператор EXIT инициирует прекращение выполнения процедуры и выход в вызывающее приложение.	Пример:		CREATE PROCEDURE

Слайд 82 Работа с хранимыми процедурами
Оператор EXECUTE PROCEDURE
Оператор вызова другой хранимой

процедуры:

EXECUTE PROCEDURE имя [параметр [, параметр … ] ] ;
[

RETURNING_VALUES параметр [, параметр … ] ];


Пример:

EXECUTE PROCEDURE AVG_KOLVO (:IN_TOVAR)
RETURNING_VALUE :AVG_KOLVO_TOVAR;

Элементы языка SQL

Работа с хранимыми процедурами 	Оператор EXECUTE PROCEDURE	Оператор вызова другой хранимой процедуры:	EXECUTE PROCEDURE имя [параметр [, параметр …

Слайд 83 Работа с хранимыми процедурами
Оператор POST_EVENT
Оператор применяется для посылки сервером

клиентским приложениям сообщения о наступлении какой либо ситуации, связанной с

именем события.

POST_EVENT “Имя события”;


Элементы языка SQL

Работа с хранимыми процедурами 	Оператор POST_EVENT	Оператор применяется для посылки сервером клиентским приложениям сообщения о наступлении какой либо

Слайд 84 Работа с хранимыми процедурами
Изменение и удаление ХП

Изменение ХП:

ALTER

PROCEDURE ИмяПроцедур
[ ( входной_параметр тип_данных
[, входной_параметр тип_данных … ] )

]
[ RETURNS
( выходной_параметр тип_данных
[ , выходной_параметр тип_данных … ] ) ]
AS
< тело процедуры>

Удаление ХП:

DROP PROCEDURE ИмяПроцедуры;

Элементы языка SQL

Работа с хранимыми процедурами 	Изменение и удаление ХП	Изменение ХП:	 ALTER PROCEDURE ИмяПроцедур			[ ( входной_параметр тип_данных		[, входной_параметр тип_данных

Слайд 85 Работа с триггерами
Общие понятия
Триггер – это процедура в БД,

автоматически вызываемая SQL-сервером при обновлении, удалении или добавлении новой записи

в таблицу БД.

По событию изменения триггеры различают на вызываемые при:
Добавлении новой записи
Изменении существующей записи
Удалении записи

По отношению к событию, влекущему их вызов, триггеры различаются на:
Выполняемые до наступления события
Выполняемы после наступления события

Элементы языка SQL

Работа с триггерами 	Общие понятия	Триггер – это процедура в БД, автоматически вызываемая SQL-сервером при обновлении, удалении или

Слайд 86 Работа с триггерами
Общие понятия
Особенности:
Непосредственно обратиться к триггеру нельзя
Нельзя

передавать параметры и получать значения выходных параметров
Триггер всегда реализует действие

Преимущества

использования триггеров:
Автоматическое обеспечение каскадных воздействий, выполняющихся на сервере.
Изменения в триггерах не влекут необходимости изменения клиентских приложений.
Обязательное выполнение бизнес-правил, реализованных с использованием триггеров для всех приложений работающих с БД.
Все изменения вносимые триггером выполняются в рамках одной транзакции. Как следствие, при откате транзакции откатываются также и все изменения, внесенные в БД триггерами.

Элементы языка SQL

Работа с триггерами 	Общие понятия	 Особенности:Непосредственно обратиться к триггеру нельзяНельзя передавать параметры и получать значения выходных параметровТриггер

Слайд 87 Работа с триггерами
Создание триггеров

Триггер создается оператором:

CREATE TRIGGER ИмяТриггера FOR

ИмяТаблицы
[ ACTIVE | INACTIVE ]
{ BEFORE | AFTER

}
{ DELETE | INSERT | UPDATE }
[ POSITION номер ]
AS
[<объявление локальных переменных>]
BEGIN
<оператор>
END

Элементы языка SQL

Работа с триггерами 	Создание триггеров		Триггер создается оператором:		CREATE TRIGGER ИмяТриггера FOR ИмяТаблицы 	[ ACTIVE  | INACTIVE ]	{

Слайд 88 Работа с триггерами
Создание триггеров

Пример (обеспечение каскадных воздействий):

CREATE TRIGGER AD_TOVARY

FOR TOVARY
ACTIVE
AFTER DELETE
POSITION 1
AS
BEGIN
DELETE FROM RASHOD
WHERE RASHOD.TOVAR = TOVARY.TOVAR;
END`
Элементы

языка SQL
Работа с триггерами 	Создание триггеров		Пример (обеспечение каскадных воздействий):		CREATE TRIGGER AD_TOVARY FOR TOVARY 	ACTIVE	AFTER DELETE	POSITION 1	AS	BEGIN		DELETE FROM RASHOD		WHERE

Слайд 89 Работа с триггерами
Значения OLD и NEW

Значение OLD.имя_столбца позволяет обратиться

к состоянию столбца, имевшему место до внесения возможных изменений, а

значение NEW.имя_столбца - к состоянию столбца, имевшему место после внесения возможных изменений.
Пример:

CREATE TRIGGER BU_TOVARY FOR TOVARY
ACTIVE
BEFORE UPDATE
AS
BEGIN
IF ( OLD.TOVAR <> NEW.TOVAR ) THEN
UPDATE RASHOD
SET TOVAR = NEW.TOVAR
WHERE TOVAR = OLD.TOVAR;
END

Элементы языка SQL

Работа с триггерами 	Значения OLD и NEW		Значение OLD.имя_столбца позволяет обратиться к состоянию столбца, имевшему место до внесения

Слайд 90 Работа с триггерами
Изменение и удаление триггеров

Изменение существующего триггера:

ALTER TRIGGER

ИмяТриггера FOR ИмяТаблицы
[ ACTIVE | INACTIVE ]
{ BEFORE

| AFTER }
{ DELETE | INSERT | UPDATE }
[ POSITION номер ]
AS <тело триггера>

Удаление триггера:

DROP TRIGGER ИмяТриггера

Элементы языка SQL

Работа с триггерами 	Изменение и удаление триггеров		Изменение существующего триггера:	ALTER TRIGGER ИмяТриггера FOR ИмяТаблицы 	[ ACTIVE  |

Слайд 91 Исключения

Пример определение исключения:
CREATE EXCEPTION

UNKNOWN_EMP_ID «Неизвестный идентификатор”

Пример вызова исключения:
EXCEPTION UNKNOWN_EMP_ID


Пример удаления исключения:
DROP EXCEPTION UNKNOWN_EMP_ID


Элементы

языка SQL
Исключения 			Пример определение исключения:     CREATE EXCEPTION UNKNOWN_EMP_ID «Неизвестный идентификатор”	Пример вызова исключения:	EXCEPTION UNKNOWN_EMP_ID	Пример удаления

Слайд 92 Использование генераторов в InterBase
Основные понятия

В InterBase отсутствует аппарат автоинкрементных

столбцов. Вместо этого для установки уникальных значений столбцов используются генераторы.

Генератор

– хранимый на сервере БД механизм, возвращающий уникальные значения , никогда не совпадающие со значениями, выданными тем же самым генератором в прошлом.

Для создания генератора используется оператор:
CREATE GENERATOR ИмяГенератора ;

Установка стартового значения генератора:
SET GENERATOR ИмяГенератора TO СтартовоеЗначение;

Обращение к генератору (получение уникального значения):
GEN_ID( ИмяГенератора , Шаг )

Элементы языка SQL

Использование генераторов в InterBase 	Основные понятия		В InterBase отсутствует аппарат автоинкрементных столбцов. Вместо этого для установки уникальных значений

Слайд 93 Использование генераторов в InterBase
Основные понятия

Пример:

CREATE GENERATOR RASHOD_N_RASH;

SET GENERATOR

RASHOD_N_RASH TO 20 ;

CREATE TRIGGER BI_RASHOD FOR RASHOD
ACTIVE


BEFORE INSERT
AS
BEGIN
NEW.N_RASH = GEN_ID(RASHOD_N_RASH, 1);
END

Элементы языка SQL

Использование генераторов в InterBase 	Основные понятия		Пример:	 	CREATE GENERATOR RASHOD_N_RASH;	SET GENERATOR RASHOD_N_RASH  TO  20 ;	CREATE TRIGGER

Слайд 94 Транзакции
Назначение трaнзакции:
Откат изменений и целостность БД
Понятие транзакции
Транзакция – это

единичное или чаще групповое изменение БД, которое или выполняется полностью,

или не выполняется вообще.
Результаты выполнения транзакции записываются в БД только в том случае, если вся транзакция завершилась успешно. Таким образом, транзакция переводит БД из одного целостного состояния в другое.

Начало транзакции инициируется оператором :
SET TRANSACTION [имя транзакции]

Подтверждение транзакции, т.е. санкционирование физического запоминания сделанных изменений в БД выполняется оператором COMMIT
COMMIT WORK [TRANSACTION name]

Отказаться от физического запоминания сделанных изменений («откатить изменения») можно с помощью оператора.
ROLLBACK WORK [TRANSACTION name]

Замечание. Описанные выше операторы представлены в упрощенном формате. Полный формат содержит дополнительные параметры управления транзакциями.

Физическое проектирование БД

ТранзакцииНазначение трaнзакции:	Откат изменений и целостность БД Понятие транзакции	Транзакция – это единичное или чаще групповое изменение БД, которое

Слайд 95 Транзакции
Уровни изоляции транзакций

При одновременной работе нескольких клиентов с одной

и той же БД возникают проблемы одновременного изменения данных.
Пусть пользователь

A получил данные из таблицы RASHOD и впоследствии изменил их. В это же время с той же записью в таблице RASHOD работает пользователь B. Он также изменил записи в той же записи, что и A, и пытается подтвердить их. Пользователь C работает с таблицей RASHOD в режиме «только для чтения». Сразу же возникает группа вопросов:

Позволять или не позволять B изменять запись, если A еще не подтвердил ее изменение?
Позволять ли C видеть изменения, внесенные A и B?
Может ли A видеть изменения, внесенные B, и наоборот?
Для разрешения указанных проблем на стороне клиента определены три уровня изоляции (разграничения) транзакций.

Для разрешения указанных проблем на стороне клиента определены три уровня изоляции (разграничения) транзакций.

Физическое проектирование БД

Транзакции		Уровни изоляции транзакций 		При одновременной работе нескольких клиентов с одной и той же БД возникают проблемы одновременного

Слайд 96 Транзакции
Уровни изоляции транзакций

При уровне изоляции транзакций Dirty Read («грязное

чтение») конкурирующие транзакции видят изменения, внесенные, но не подтвержденные текущей

транзакцией. Если текущая транзакция откатит сделанные изменения, другие транзакции будут обладать недостоверными данными. Этот уровень изоляции может привести к серьезным ошибкам и применяется крайне редко – фактически он не изолирует конкурирующие транзакции.

При уровне Read Committed («подтвержденное чтение») конкурирующие транзакции работают с данными, какими они были на момент старта транзакции A. однако, если транзакция A внесла изменения в запись и подтвердила их, а незавершенная транзакция вновь прочитала эти данные, она увидит изменения.

Уровень изоляции Repetable Read («повторяющееся чтение») заставляет конкурирующие транзакции оперировать с собственными (локальными) версиями одной и той же записи. Если транзакция A читает какую-то запись, она, как и при уровне ReadCommited, получит последнюю подтвержденную ее версию. Однако, если другая транзакция изменит эту запись, а транзакция A вновь прочитает ее, она не увидит внесенных изменений, т.е. A видит всегда одну и ту же версию записи. Изменения, которые вносят конкурирующие транзакции в одну и ту же запись, могут конфликтовать. В этом случае фактически изменит данные первая завершенная транзакция, а попытки подтвердить свои изменения второй и всеми другими незавершенными транзакциями, изменившими те же записи, будут отвергнуты.


Физическое проектирование БД

Транзакции		Уровни изоляции транзакций При уровне изоляции транзакций Dirty Read («грязное чтение») конкурирующие транзакции видят изменения, внесенные, но

Слайд 97 Транзакции
Уровни изоляции транзакций
Разные серверы БД различным образом интерпретируют уровни

изоляции транзакций

Физическое проектирование БД



Транзакции		Уровни изоляции транзакций Разные серверы БД различным образом интерпретируют уровни изоляции транзакций 		Физическое проектирование БД

Слайд 98 Транзакции
Уровни изоляции транзакций
Физическое проектирование БД
В InterBase с учетом управляющих

параметров формат оператора начала транзакции выглядит следующим образом:

SET TRANSACTION [

имя транзакции ]
[ READ WRITE | READ ONLY ]
[ WAIT | NO WAIT ]
[[ ISOLATION LEVEL ] {SNAPSHOT | READ COMMITTED [ [ NO ] RECORD_VERSION]}]
------------------------------
READ WRITE | READ ONLY WAIT – устанавливает уровень доступа к данным (по умолчанию READ WRITE )

WAIT | NO WAIT – определяет поведение при возникновении конфликта при обновлении записи данной транзакции с другой транзакцией, ранее сделавшей изменение в той же записи: WAIT (по умолчанию) побуждает данную транзакцию ожидать завершения конкурирующей транзакции; NO WAIT определяет аварийное завершение данной транзакции.

ISOLATION LEVEL – определяет уровни изоляции транзакций на сервере (по умолчанию SNAPSHOT, что соответствует уровню REPETABLE READ.

READ COMMITTED разрешает стартующей транзакции читать только подтвержденные записи:

NO RECORD_VERSION (по умолчанию) – читается последняя версия записи, даже если она не подтверждена другой транзакцией; при этом если указан параметр WAIT, стартующая транзакция будет ожидать подтверждения последней версии; RECORD VERSION – читается последняя подтвержденная версия записи.

Пример.
SET TRANSACTION WAIT
ISOLATION LEVEL READ COMMITTED



Транзакции		Уровни изоляции транзакций Физическое проектирование БДВ InterBase с учетом управляющих параметров формат оператора начала транзакции выглядит следующим

Слайд 99 Учет особенностей используемого сервера БД

Основная часть проблем физического проектирования баз

данных в большой степени зависит от особенностей используемого сервера баз

данных. В частности, это относится к планированию размещения в дисковой памяти различных частей базы данных: таблиц, индексов, BLOB'ов, журналов и т.д. Соответствующие рекомендации обычно содержатся в руководстве администратора используемой системы. Но можно, тем не менее, выделить некоторые общие соображения, которые осмысленны вне зависимости от деталей реализации сервера. Прежде всего это касается индексов.

Понятно, что чем больше индексов существует над таблицами базы данных, тем более вероятным будет выполнение запросов по выборке данных и тем медленнее будут выполняться операции модификации базы данных.

Физическое проектирование БД

Учет особенностей используемого сервера БД			Основная часть проблем физического проектирования баз данных в большой степени зависит от особенностей

Слайд 100 Учет особенностей используемого сервера БД
В большинстве систем индекс создается автоматически

для каждого определенного в таблице первичного, возможного и внешнего ключа.

Здесь никуда не денешься: потребность в определении ключей следует из семантики предметной области, а для поддержания и использования ключей СУБД нуждается в соответствующих индексах. Но вот что касается дополнительных индексов, вводимых для целей более эффективного выполнения запросов, то с ними нужно быть очень аккуратным. Требуется тщательный предварительный анализ наиболее важного набора запросов (к сожалению далеко не всегда это возможно). Нужно также отдавать себе отчет в том, что создание нового индекса для большой заполненной таблицы - это серьезная дорогостоящая операция (как правило, СУБД выполняет сортировку строк таблицы в соответствии со значением ключевого атрибута).
Хотя в языке SQL и в большинстве его реализаций допускается динамическое изменение реляционной схемы базы данных, не все такие изменения выполняются дешево и безопасно. Дешево и безопасно можно создать новую таблицу с набором индексов и добавить столбец к существующей заполненной таблице. Дорого и опасно уничтожается большая заполненная таблица или ее отдельный столбец. (Опасно в том смысле, что, как правило, соответствующие операции не журнализуются.)

Физическое проектирование БД

Учет особенностей используемого сервера БД		В большинстве систем индекс создается автоматически для каждого определенного в таблице первичного, возможного

Слайд 101 Противоречия теории и практики нормализации

Достаточно часто абсолютно правильно спроектированная

реляционная схема базы данных мешает эффективному выполнению транзакций в конкретной

прикладной области при использовании конкретного сервера баз данных. Часто это связано с особенностями синхронизации параллельно выполняемых транзакций.
Пример:
Сервером используется блокировка строк, и в базе данных находится широкая правильно спроектированная таблица, обладающая тем свойством, что небольшое число столбцов меняется, а основная их часть только читается. Тогда любая изменяющая таблицу может транзакция заблокировать все читающие транзакции. Решение снова состоит в том, чтобы немного отойти от теории и разбить таблицу на две: изменяемую и только читаемую.

Физическое проектирование БД

Противоречия теории и практики нормализации 	Достаточно часто абсолютно правильно спроектированная реляционная схема базы данных мешает эффективному выполнению

Слайд 102Денормализация для оптимизации

Если еще раз внимательно посмотреть на шаги

процесса построения «хорошей» нормализованной схемы реляционной базы данных, то можно

заметить, что на каждом шаге нормализации порождаются потенциальные соединения отношений. Для некоторых приложений это несущественно, для других - критично. Известно, что если для выполнения запроса к базе данных требуется выполнить десять соединений, то ни один из современных серверов баз данных не обеспечивает умеренное время ответа.
Поэтому иногда приходится жертвовать идеями и работать с недостаточно нормализованной схемой БД. Конечно, при работе с такой схемой могут возникать аномалии изменений, но с ними можно бороться другими способами, например, с помощью триггеров.

Физическое проектирование БД

Денормализация для оптимизации 							Если еще раз внимательно посмотреть на шаги процесса построения «хорошей» нормализованной схемы реляционной базы

Слайд 103Денормализация для оптимизации

Если еще раз внимательно посмотреть на шаги

процесса построения «хорошей» нормализованной схемы реляционной базы данных, то можно

заметить, что на каждом шаге нормализации порождаются потенциальные соединения отношений. Для некоторых приложений это несущественно, для других - критично. Известно, что если для выполнения запроса к базе данных требуется выполнить десять соединений, то ни один из современных серверов баз данных не обеспечивает умеренное время ответа.
Поэтому иногда приходится жертвовать идеями и работать с недостаточно нормализованной схемой БД. Конечно, при работе с такой схемой могут возникать аномалии изменений, но с ними можно бороться другими способами, например, с помощью триггеров.

Физическое проектирование БД

Денормализация для оптимизации 							Если еще раз внимательно посмотреть на шаги процесса построения «хорошей» нормализованной схемы реляционной базы

Слайд 104Оптимизация запросов

Оптимизация запросов к БД связана с построением адекватной запросам

и оптимальной структуры индексов таблиц БД и оптимизации собственно текстов

запросов.

Оптимальная структура индексов
От структуры индексов таблиц БД в огромной степени зависит эффективность выполнения запросов. При выполнении запросов сервер БД обычно сначала просматривает список индексов, определенных для участвующих в запросе таблиц. Затем выбирается одна из двух схем выполнения запроса – использовать имеющиеся индексы или последовательно просмотреть таблицы. Оптимизатор сервера стремиться выполнить запрос с максимальным быстродействием и с минимальными накладными расходами.


Физическое проектирование БД

Оптимизация запросов		Оптимизация запросов к БД связана с построением адекватной запросам и оптимальной структуры индексов таблиц БД и

Слайд 105Оптимизация запросов

«Полезность» индекса
Эффективность использования индекса при поиске информации в таблице

БД сильно зависит от того, построен ли индекс по уникальным

значениям и, если нет, насколько отличаются данные, по которым он построен.
Рассмотрим пример возможного логического порядка использования индексов при выполнении запроса для некоторого сервера БД (в общем случае для конкретного сервера БД реальный порядок выполнения запроса может быть другим).

Пусть необходимо выбрать из таблицы из таблицы RASHOD все записи о расходе товара за 10.10.2006, у которых количество расходуемого товара превышает 300 единиц.

SELECT *
FROM RASHOD
WHERE DAT_RASH = “10.10.2007” AND
KOLVO > 300

Физическое проектирование БД

Оптимизация запросов«Полезность» индекса	Эффективность использования индекса при поиске информации в таблице БД сильно зависит от того, построен ли

Слайд 106Оптимизация запросов

«Полезность» индекса

SELECT *
FROM RASHOD
WHERE DAT_RASH = “10.10.2007”

AND
KOLVO > 300
В случае отсутствия индексов поиск записей, удовлетворяющих запросу,

осуществляется путем перебора всех записей в таблице, т.е. путем последовательного доступа, что обеспечивает наименьшую эффективность выполнения запроса. В случае нескольких индексов, по которым можно осуществить поиск , выбирается для использования тот, у которого выше показатель полезности индекса (selectivity).
Показатель полезности индекса рассчитывается как число различающихся значений индексных полей внутри индекса, отнесенное к среднему количеству записей. Для участия в выполнении запроса выбираются индексы с максимальным уровнем полезности. Такие индексы обеспечивают более быстрый поиск. Максимальным индексом полезности обладают уникальные индексы, т.е. индексы, построенные по определениям первичных и уникальных ключей.
В некоторых случаях оптимизатор сервера БД не может корректно определить полезность индекса. В решения этой проблемы в диалектах языка SQL существуют способы принудительного использования того или иного индекса при выполнении запроса.

Физическое проектирование БД

Оптимизация запросов«Полезность» индекса		SELECT  *	FROM RASHOD 	WHERE DAT_RASH = “10.10.2007” AND	KOLVO > 300В случае отсутствия индексов поиск

Слайд 107Оптимизация запросов
Целесообразность создания индексов

Индексы необходимо создавать в случае, когда по

столбцу или группе столбцов:
Часто производится поиск в БД;
Часто строятся соединения

таблиц;
Часто производится сортировка;

Не рекомендуется строить индексы по столбцам или группам столбцов, которые:
Редко используются для поиска, объединения , сортировки результатов запроса
Часто меняют значение, что приводит к необходимости часто обновлять индекс и способно существенно замедлить скорость работы с БД;
Содержит небольшое число вариантов значения.

Физическое проектирование БД

Оптимизация запросовЦелесообразность создания индексов	Индексы необходимо создавать в случае, когда по столбцу или группе столбцов:Часто производится поиск в

Слайд 108Оптимизация запросов
Частичное использование составного индекса

Если запросы часто используют для поиска

одни и те же столбцы, следует построить по этим столбцам

индекс (если это возможно) так, чтобы чаще используемые столбцы выступали в качестве ведущих полей индекса. Тогда при поиске может быть использована часть индексных полей.

Следует помнить, что при использовании в запросах не всех столбцов из индекса, можно использовать только непрерывную последовательность столбцов, что важно для указания порядка сортировки в предложении ORDER BY.

Порядок следования условий по столбцам в предложении WHERE оператора SELECT не важен (если условия объединяются по AND).

Физическое проектирование БД

Оптимизация запросовЧастичное использование составного индексаЕсли запросы часто используют для поиска одни и те же столбцы, следует построить

Слайд 109Оптимизация запросов
Многопоточность поиска по OR и IN
При частом использовании в

условной части WHERE оператора SELECT нескольких столбцов, между собой операцией

«или» (OR)
SELECT *
WHERE A=100 OR B=200 OR C= 300
вместо индекса по столбцам A,B,C лучше создать несколько индексов, построенных по каждому из этих полей, поскольку в противном случае будет осуществлен последовательный просмотр всей таблицы.
Важно помнить, что при использовании оператора OR в условной части оператора SELECT каждая часть условия влечет за собой отдельное сканирование участвующих в запросе таблиц.
Отдельный поток поиска порождает и каждый элемент в списке IN. Например,
WHERE A IN (100, 200, 300)
интерпретируется как
WHERE A=100 OR A=200 OR A=300 .
Однако при указании диапазона BETWEEN
WHERE A BETWEEN 100 AND 300
этого не происходит. Поэтому, где возможно, следует заменять IN на BETWEEN.

Физическое проектирование БД

Оптимизация запросовМногопоточность поиска по OR и IN	При частом использовании в условной части WHERE оператора SELECT нескольких столбцов,

Слайд 110Оптимизация запросов
Уменьшение общего количества индексов.

Следует стремиться к уменьшению количества индексов,

поскольку при большом их количестве снижается скорость добавления, изменения и

удаления записей в таблицах БД. Как правило, в БД определяется два вида индексов:
индексы фактически использующиеся запросами для доступа к данным
индексы, внесенные в БД для обеспечения ссылочной целостности.
В некоторых случаях, когда требуется обеспечить повышенную производительность, такие индексы, не использующиеся при доступе к данным, следует удалить, а ссылочную целостность обеспечивать с использованием триггеров.

Физическое проектирование БД

Оптимизация запросовУменьшение общего количества индексов.	Следует стремиться к уменьшению количества индексов, поскольку при большом их количестве снижается скорость

Слайд 111Оптимизация клиентских приложений
Минимизация соединений с БД
Каждое соединение с БД потребляет

системные ресурсы, и их чрезмерный расход может сказаться на эффективности

доступа к БД. Поэтому рекомендуется снижать число соединений клиентского приложения с удаленной БД к минимуму, а в идеале иметь одно соединение с каждой БД.

Использование SQL-ориентированных компонентов при построении клиентских приложений
Использование SQL-ориентированных компонентов (например, в Delphi компонент TQuery вместо TTable) позволяет уйти от «навигационного способа» обработки данных, который был характерен для локальных и файл-серверных СУБД, и, как следствие, решает задачу снижения трафика в вычислительной сети.

Физическое проектирование БД

Оптимизация клиентских приложений	Минимизация соединений с БДКаждое соединение с БД потребляет системные ресурсы, и их чрезмерный расход может

Слайд 112Оптимизация клиентских приложений
Перенос тяжести вычислительной работы на сервер
При работе с

удаленными БД следует стремиться перенести тяжесть вычислительной работы на сервер,

по возможности оставив приложению клиента лишь работу по реализации интерфейса с пользователем, отсылки запросов к серверу и интерпретации полученных от него данных.
Не надо обращаться к серверу с запросом необоснованно большого объема данных, на которые приходится накладывать фильтры в самом клиентском приложении.
Следует максимально использовать возможности сервера, помня о том, что он может выполнять большинство требований приложения быстрее, кроме того, серверу не надо пересылать данные самому себе по сети.
Запросы, требующие при своем выполнении ветвящихся и циклических алгоритмов, а также всевозможные вычисления значений, основанные на текущих данных из БД, реализуйте при помощи хранимых процедур. Бизнес правила, связанные с транзакционными изменениями ряда таблиц, реализуйте при помощи триггеров. Получайте уникальные значения числовых полей при помощи генераторов.

Перенос тяжести вычислительной работы на сервер, во-первых, убыстряет работу клиентского приложения, а во-вторых, минимизирует возможность возникновения ошибок.

Физическое проектирование БД

Оптимизация клиентских приложенийПеренос тяжести вычислительной работы на серверПри работе с удаленными БД следует стремиться перенести тяжесть вычислительной

Слайд 113Классификация архитектур построения приложений баз данных

По технологии обработки данных
По технологии

обработки данных базы данных подразделяются на централизованные и распределенные.

Централизованная база

данных хранится в памяти одной вычислительной системы. Эта вычислительная система может быть мэйнфреймом - тогда доступ к ней организуется с использованием терминалов - или файловым сервером локальной сети ПК.
Распределенная база данных состоит из нескольких, возможно, пересекающихся или даже дублирующих друг друга частей, которые хранятся в различных ЭВМ вычислительной сети. Работа с такой базой осуществляется с помощью системы управления распределенной базой данных (СУРБД).

Технологии построения информационных систем – приложений БД

Классификация архитектур построения приложений баз данных	По технологии обработки данных	По технологии обработки данных базы данных подразделяются на централизованные

Слайд 114Классификация архитектур построения приложений баз данных

По способу доступа к данным

По

способу доступа к данным базы данных разделяются на
БД с

локальным доступом
БД с сетевым доступом.

Для всех современных баз данных можно организовать сетевой доступ с многопользовательским режимом работы.

Централизованные базы данных с сетевым доступом могут иметь следующую архитектуру:
файл-сервер;
клиент-сервер базы данных;
"тонкий клиент" - сервер приложений - сервер базы данных (трехуровневая архитектура).

Технологии построения информационных систем – приложений БД

Классификация архитектур построения приложений баз данных		По способу доступа к данным	По способу доступа к данным базы данных разделяются

Слайд 115Классификация архитектур построения приложений баз данных
Схема работы с БД в

локальной сети с выделенным файловым сервером









Архитектура систем БД с

сетевым доступом предполагает выделение одной из машин сети в качестве центральной (файловый сервер). На этот компьютер устанавливается операционная система (ОС) для выделенного сервера. На нем же хранится совместно используемая централизованная БД в виде одного или группы файлов. Все другие компьютеры сети выполняют функции рабочих станций Файлы базы данных в соответствии с пользовательскими запросами передаются на рабочие станции, где и производится обработка информации. При большой интенсивности доступа к одним и тем же данным производительность информационной системы падает. Пользователи могут создавать также локальные БД на рабочих станциях.

Технологии построения информационных систем – приложений БД

Классификация архитектур построения приложений баз данных	Схема работы с БД в локальной сети с выделенным файловым сервером 			Архитектура

Слайд 116Классификация архитектур построения приложений баз данных
Схема работы с БД в

архитектуре "Клиент-сервер"









В этой архитектуре на выделенном сервере, работающем под

управлением серверной операционной системы, устанавливается специальное программное обеспечение (ПО) - сервер БД. СУБД подразделяется на две части: клиентскую и серверную. Основа работы сервера БД - использование языка запросов (SQL). Запрос на языке SQL, передаваемый клиентом (рабочей станцией) серверу БД, порождает поиск и извлечение данных на сервере. Извлеченные данные транспортируются по сети от сервера к клиенту. Тем самым, количество передаваемой по сети информации уменьшается во много раз.

Технологии построения информационных систем – приложений БД

Классификация архитектур построения приложений баз данных	Схема работы с БД в архитектуре

Слайд 117Классификация архитектур построения приложений баз данных
Схема работы с БД в

трехуровневой архитектуре








Трехуровневая архитектура функционирует в Интранет- и Интернет-сетях. Клиентская

часть ("тонкий клиент"), взаимодействующая с пользователем, представляет собой HTML-страницу в Web-браузере либо Windows-приложение, взаимодействующее с соответствующими сервисами. Вся программная логика вынесена на сервер приложений, который обеспечивает формирование запросов к базе данных, передаваемых на выполнение серверу баз данных. Сервер приложений может быть Web-сервером или специализированной программой.

Технологии построения информационных систем – приложений БД

Классификация архитектур построения приложений баз данных	Схема работы с БД в трехуровневой архитектуре 				Трехуровневая архитектура функционирует в Интранет-

Слайд 118Базовая архитектура сервера баз данных

Типичный сервер баз данных на

логическом уровне отвечает за выполнение следующих функций:

поддержание логически согласованного

набора файлов;
обеспечение языка манипулирования данными;
восстановление информации после разного рода сбоев;
организацию реально параллельной работы нескольких пользователей.

Технологии построения информационных систем – приложений БД

Базовая архитектура сервера баз данных 	Типичный сервер баз данных на логическом уровне отвечает за выполнение следующих функций:

Слайд 119Базовая архитектура сервера баз данных

На физическом уровне сервером БД

реализуются следующие функции:

Непосредственное управление данными во внешней памяти
Эта функция

включает обеспечение необходимых структур внешней памяти как для хранения непосредственных данных, входящих в БД, так и для служебных целей, например, для убыстрения доступа к данным в некоторых случаях (обычно для этого используются индексы).

Управление буферами оперативной памяти
Серверы баз данных обычно работают с БД значительного размера; по крайней мере этот размер обычно существенно больше доступного объема оперативной памяти. Понятно, что если при обращении к любому элементу данных будет производиться обмен с внешней памятью, то вся система будет работать со скоростью устройства внешней памяти. Практически единственным способом реального увеличения этой скорости является буферизация данных в оперативной памяти.

Технологии построения информационных систем – приложений БД

Базовая архитектура сервера баз данных 	На физическом уровне сервером БД реализуются следующие функции:Непосредственное управление данными во внешней

Слайд 120Базовая архитектура сервера баз данных
На физическом уровне сервером БД

реализуются следующие функции (продолжение):

Управление транзакциями
Понятие транзакции необходимо для поддержания

логической целостности БД. Но понятие транзакции гораздо более важно в многопользовательских СУБД. То свойство, что каждая транзакция начинается при целостном состоянии БД и оставляет это состояние целостным после своего завершения, делает очень удобным использование понятия транзакции как единицы активности пользователя по отношению к БД.
С управлением транзакциями в многопользовательской СУБД связаны важные понятия сериализации транзакций и сериального плана выполнения смеси транзакций.
Под сериализаций параллельно выполняющихся транзакций понимается такой порядок планирования их работы, при котором суммарный эффект смеси транзакций эквивалентен эффекту их некоторого последовательного выполнения. Сериальный план выполнения смеси транзакций - это такой план, который приводит к сериализации транзакций.
Существует несколько базовых алгоритмов сериализации транзакций. В централизованных СУБД наиболее распространены алгоритмы, основанные на синхронизационных захватах объектов БД.


Технологии построения информационных систем – приложений БД

Базовая архитектура сервера баз данных 	На физическом уровне сервером БД реализуются следующие функции (продолжение):Управление транзакциями 	Понятие транзакции

Слайд 121Базовая архитектура сервера баз данных
На физическом уровне сервером БД

реализуются следующие функции (продолжение):

Журнализация
Одним из основных требований к СУБД

является надежное хранение данных во внешней памяти. Под надежностью хранения понимается то, что СУБД должна быть в состоянии восстановить последнее согласованное состояние БД после любого аппаратного или программного сбоя.
Поддержание надежного хранения данных в БД требует избыточности хранения данных, причем та часть данных, которая используется для восстановления должна храниться особо надежно. Наиболее распространенным методом поддержания такой избыточной информации является ведение журнала изменений БД.
Журнал - это особая часть БД, недоступная пользователям СУБД и поддерживаемая с особой тщательностью (иногда поддерживаются две копии журнала, располагаемые на разных физических дисках), в которую поступают записи обо всех изменениях основной части БД.

Технологии построения информационных систем – приложений БД

Базовая архитектура сервера баз данных 	На физическом уровне сервером БД реализуются следующие функции (продолжение):Журнализация 	Одним из основных

Слайд 122Базовая архитектура сервера баз данных
На физическом уровне сервером БД

реализуются следующие функции (продолжение):

Языки БД

Для работы с базами данных

используются специальные языки, в целом называемые языками баз данных. В ранних СУБД поддерживалось несколько специализированных по своим функциям языков. Чаще всего выделялись два языка - язык определения схемы БД (SDL - Sсhema Definition Language) и язык манипулирования данными (DML - Data Manipulation Language).

В современных СУБД обычно поддерживается единый интегрированный язык, содержащий все необходимые средства для работы с БД, начиная от ее создания, и обеспечивающий базовый пользовательский интерфейс с базами данных. Стандартным языком наиболее распространенных в настоящее время реляционных СУБД является язык SQL.

Технологии построения информационных систем – приложений БД

Базовая архитектура сервера баз данных 	На физическом уровне сервером БД реализуются следующие функции (продолжение):Языки БД Для работы

Слайд 123 Реализация доступа к базам данных в среде DELPHI

VCL-библиотека классов среды

проектирования Delphi предоставляет ряд классов, позволяющих быстро и эффективно разрабатывать

различные приложения баз данных. Эти классы представлены следующими группами:
компоненты для доступа к данным, реализующие:
доступ через машину баз данных BDE (Borland Database Engine), предоставляющую доступ через ODBC-драйверы или через внутренние драйверы машины баз данных BDE (компоненты страницы BDE-палитры инструментов);
доступ через ADO-объекты (ActiveX Data Objects), в основе которого лежит применение технологии OLE DB (компоненты страницы ADO);
доступ к локальному или удаленному SQL-серверу InterBase (компоненты страницы InterBase);
доступ посредством легковесных драйверов dbExpress;
доступ к БД при многозвенной архитектуре (компоненты страницы DataSnap);

визуальные компоненты, реализующие интерфейс пользователя;

компоненты для связи источников данных с визуальными компонентами, предоставляющими интерфейс пользователя;

компоненты для визуального проектирования отчетов.

: Проектирование приложений БД

Реализация доступа к базам данных в среде DELPHI		VCL-библиотека классов среды проектирования Delphi предоставляет ряд классов, позволяющих быстро

Слайд 124 Реализация доступа к базам данных в среде DELPHI

Основными механизмами доступа

к данным, поддерживаемым в Delphi, являются:

ODBC - доступ через ODBC-драйверы

БД или BDE-драйверы;

OLE DB - доступ с использованием провайдеров данных (OLE DB - это метод доступа к любым данным через стандартный COM-интерфейс);

средства dbExpress, использующие легковесные драйверы БД;

Средства IBExpress при непосредственном взаимодействии с InterBase

средства доступа к распределенным наборам данных в многозвенной архитектуре.

: Проектирование приложений БД

Реализация доступа к базам данных в среде DELPHI		Основными механизмами доступа к данным, поддерживаемым в Delphi, являются:ODBC -

Слайд 125 Реализация доступа к базам данных в среде DELPHI

Самый простой механизм

управления данными, использующий ODBC-драйверы, может быть реализован по следующей схеме:

В

модуль данных (или в форму) добавляется компонент набора данных (объект класса TDataSet) и устанавливается связь с источником данных, определяемая свойством DatabaseName. Связь может быть указана одним из трех способов: по имени базы данных, каталогу или псевдониму (способ указания связи может быть ограничен типом источника данных). Список всех псевдонимов доступен на этапе проектирования.

В модуль данных (или в форму) добавляется компонент источника данных (TDataSourse), являющийся центральным связующим звеном между набором данных и элементами управления, отображающими эти данные. Свойство DataSet компонента типа TDataSourse указывает набор данных, формируемый компонентами таких классов как TTable или TQuery. Если компоненты набора данных и источника данных расположены в модуле данных, то их следует добавить в проект (команда меню File | Use unit).

В форму добавляются элементы управления для работы с данными, такие как TDBGrid, TDBEdit, TDBCheckbox. Они связываются с компонентом источником данных, который указывается свойством DataSource. Имя поля набора данных определяется свойством DataField.


: Проектирование приложений БД

Реализация доступа к базам данных в среде DELPHI		Самый простой механизм управления данными, использующий ODBC-драйверы, может быть реализован

Слайд 126 Упрощенная схема работы с базами данных для двухзвенных архитектур в

среде Delphi

: Проектирование приложений БД
Сервер БД

TDataBase

TTable, TQuery,
TDataSet

TDataSourse

TDBGrid, TDBEdit,
TDBText

и др.

Свойство DataSet

Свойство DataSourse


TADOConection

TADOTable, TADOQuery,
TADODataSet


TSQLConection

TSQLTable, TSQLQuery,
TSQLDataSet,
TSQLClientDataSet


TIBDataBase

TIBTable, TIBQuery,
TIBDataSet

Машина БД
BDE

Провайдеры
OLE DB

dbExpress

InterBase
(IBExpress)

Компонент "источник данных"

Визуальные компоненты для работы с данными

Невизуальные компоненты набора данных

Упрощенная схема работы с базами данных для двухзвенных архитектур в среде Delphi 		: Проектирование приложений БД Сервер

Слайд 127 Наборы данных
Набор данных - это упорядоченная последовательность строк, извлеченных из

источника данных.
Каждая строка набора данных состоит из полей, указываемых в

свойствах класса.

Предком всех классов наборов данных является класс TDataSet. Он определяет основу структуры всех наборов данных - массив компонентов типа TField (каждый элемент массива соответствует столбцу таблицы).

В зависимости от механизма доступа, используемого приложением, базовыми классами набора данных могут быть:
TTable, TQuery, TStoredProc - для однозвенных или двухзвенных приложений, использующих машину баз данных BDE. Класс TQuery дополнительно позволяет выполнять параметрические запросы;
TClientDataSet - для реализации клиентского набора данных и для многозвенной архитектуры, использующей распределенный доступ;
TADODataSet - для приложений, использующих ADO-объекты;
TSQLDataSet ,TSQLTable и TSQLQuery - для доступа к базе данных посредством dbExpress.
TIBDataSet, TIBTable, TIBQuery - для доступа к базе данных посредством IBExpress.

: Проектирование приложений БД

Наборы данных	Набор данных - это упорядоченная последовательность строк, извлеченных из источника данных.	Каждая строка набора данных состоит из

Слайд 128 Наборы данных
Для определения набора данных необходимо задать следующие свойства (здесь

и далее, на примере компонентов IBExpress):
для класса TIBTable - значения

свойств DatabaseName и TableName;
для класса TIBQuery - значение свойства SQL и, возможно, свойства DatabaseName.

Набор данных предварительно должен быть открыт. Открыть набор данных можно одним из следующих способов:
Query1.Active:= True;
или
Query1.Open;
Аналогично, закрыть набор данных можно вызовом метода Close или установив значение свойства Active равным False.
Для компонента типа TIBQuery метод Open может быть выполнен только для закрытого набора данных: попытка открыть уже открытый набор данных инициирует ошибку.

Открытие набора данных влечет за собой:
инициацию событий BeforeOpen и AfterOpen;
установку состояния набора данных в dsBrowse;
открытие курсора для набора данных;
если в момент открытия набора данных произошла ошибка, то состояние набора данных устанавливается в dsInactive, а курсор закрывается.

Включение кэширования изменений:
По умолчанию при переходе от одной записи набора данных к другой происходит запись всех сделанных изменений в базу данных (для модифицируемых НД).
Чтобы включить режим кэшированного обновления, следует установить значение свойства CachedUpdates равным True для компонента набора данных. Для присвоения кэшированного обновления вызывается метод ApplyUpdates, а для отмены - CancelUpdates.

: Проектирование приложений БД

Наборы данных	Для определения набора данных необходимо задать следующие свойства (здесь и далее, на примере компонентов IBExpress):для класса

Слайд 129 Классы библиотеки VCL Delphi
Класс TDataSet
Класс TDataSet является базовым для всех

классов наборов данных, наследующих общие свойства и методы этого класса,

включая следующие часто используемые:

Active свойство, определяющее, открыт ли набор данных;
DataSource свойство, указывающее родительскую таблицу (для таблиц, связанных отношением родительская - дочерняя);
Bof свойство, определяющее, находится ли курсор на первой записи набора данных;
Eof свойство, определяющее, достигнут ли конец набора данных;
FieldCount свойство, указывающее количество полей в наборе данных;
Fields свойство, представляющее собой массив полей набора данных и используемое для доступа к этим полям.
Found свойство, определяющее, успешно ли выполнен поиск методами FindFirst, FindLast, FindNext или FindPrior;
Modified свойство, определяющее, была ли изменена активная запись;
RecordCount свойство, содержащее общее число записей в наборе данных;
State свойство, указывающее текущее состояние набора данных. Это свойство может принимать следующие значения:
dsInactive - набор данных закрыт;
dsBrowse - данные доступны только для просмотра;
dsEdit - можно изменять активную запись;
dsInsert - активной записью является новая запись, пока не сохраненная;
dsSetKey - просмотр ограниченного множества записей (SetRange) или поиск записи;
dsCalcFields - выполняется обработчик события OnCalcFields;
dsFilter - выполняется обработчик события OnFilterRecord;
dsOpening - набор данных находится в процессе открытия.

: Проектирование приложений БД

Классы библиотеки VCL Delphi	Класс TDataSet	Класс TDataSet является базовым для всех классов наборов данных, наследующих общие свойства и

Слайд 130 Классы библиотеки VCL Delphi
Класс TDataSet

Append метод, добавляющий в конец набора

данных новую запись;
Delete метод, удаляющий текущую запись из базы

данных. Если в момент удаления записи набор данных находится в неактивном состоянии, то инициируется исключение;
Edit метод, переводящий текущую запись в режим редактирования;
Cancel метод, отменяющий изменения, сделанные в текущей записи;
Post метод, выполняющий внесение изменений в базу данных;
Refresh метод, выполняющий обновление результирующего набора путем повторного извлечения данных из БД;
Insert метод, вставляющий в набор данных новую запись;
InsertRecord метод, вставляющий в набор данных новую запись со значениями, которые указаны параметрами метода;
Close метод, закрывающий набор данных;
Open метод, открывающий набор данных;
First метод, устанавливающий курсор на первую запись набора данных и делающий эту запись активной;
Last метод, устанавливающий курсор на последнюю запись набора данных и делающий эту запись активной;
Next метод, перемещающий курсор на следующую запись набора данных и делающий эту запись активной;
Prior метод, перемещающий курсор на предыдущую запись набора данных и делающий эту запись активной.

: Проектирование приложений БД

Классы библиотеки VCL Delphi	Класс TDataSetAppend 	метод, добавляющий в конец набора данных новую запись; Delete 	метод, удаляющий текущую

Слайд 131 Классы библиотеки VCL Delphi
Класс TDataSet
Пример 1.
Table1.Edit; // Включение режима

редактирования
Table1.Fields.Fields[6].AsString := Edit1.Text;
Table1.Post; // Присвоение изменений Свойство Fields

Пример 2.


var S: String;
begin
S := Fields[0].FieldName; // Имя первого поля
S := Fields[1].FieldName; // Имя второго поля..
end;

Пример 3.
var s: String; i: Integer; d: TDateTime;
s := Fields[0].AsString;
i := Fields[0].AsInteger;
d := Fields[0].AsDate;

Пример 4.
// Вместо Fields[n] можно использовать функцию FieldsByName('имя_поля’) - метод, определяющий
// поле набора данных по его имени;
s := Fields[0].AsString;
s := FieldsByName('F1').AsString;
Table1.FieldByName('F1').AsInteger:=StrToInt(Edit1.Text);

: Проектирование приложений БД

Классы библиотеки VCL Delphi	Класс TDataSetПример 1.Table1.Edit; 				 // Включение режима редактированияTable1.Fields.Fields[6].AsString := Edit1.Text;Table1.Post; // Присвоение изменений Свойство

Слайд 132 Классы библиотеки VCL Delphi
Класс TDataSourse
Класс TDataSource реализует связь между компонентами

- наборами данных и элементами управления, используемыми для отображения данных.

При построении отношений между таблицами "родительская-дочерняя" компонент "источник данных" служит для связывания наборов данных, указывая родительский набор данных. Класс TDataSource содержит набор свойств и методов, используемых для доступа к набору данных, включая следующие:

AutoEdit свойство, определяющее, будет ли автоматически вызываться метод Edit набора данных при получении фокуса элементом управления, ассоциированным с источником данных;
DataSet свойство, указывающее используемый набор данных. Изменяя значение свойства DataSet во время выполнения, можно эффективно переключаться на работу с различными наборами данных, отображая разные наборы данных в одних и тех же элементах управления. Например:
DataSource.DataSet := Table1;
Enabled свойство, определяющее, будет ли элемент управления отображать ассоциированные с ним данные, или будет отображаться пустым;
State свойство, позволяющее определить состояние используемого набора данных.

Например:
if DataSource1.Dataset <> nil then
//Кнопка доступна только в том случае, если набор данных находится в состоянии
//редактирования или вставки новой записи
BtnPost1.Enabled := DataSource1.State in [dsEdit, dsInsert];

: Проектирование приложений БД

Классы библиотеки VCL Delphi	Класс TDataSourse		Класс TDataSource реализует связь между компонентами - наборами данных и элементами управления, используемыми

Слайд 133 Классы библиотеки VCL Delphi
Класс TIBTable
Компонент типа TIBTable используется для доступа

к БД InterBase посредством определения источника данных DSN и имени

таблицы базы данных. При этом допускается выбор всех полей таблицы или только части полей, а также задание фильтра, определяющего, какие строки таблицы будут доступны.
Компоненты типа TIBTable могут использовать все свойства и методы, наследуемые от класса TDataSet, а также свойства и методы класса TIBTable для набора данных, включая следующие:

DatabaseName свойство, определяющее имя источника данных DSN;
CanModify свойство, определяющее, может ли приложение выполнять вставку, редактирование и удаление записей в таблице;
DefaultIndex свойство, определяющее, должны ли данные в таблице быть упорядочены при ее открытии. Если значение свойства равно True (по умолчанию), то выполняется упорядочивание по первичному ключу или уникальному индексу;
IndexName свойство, позволяющее определить вторичный индекс, используемый для сортировки открываемого набора данных;
Exclusive свойство, позволяющее установить исключительный режим доступа к таблице (значение свойства должно быть определено до открытия таблицы);

: Проектирование приложений БД

Классы библиотеки VCL Delphi	Класс TIBTable		Компонент типа TIBTable используется для доступа к БД InterBase посредством определения источника данных

Слайд 134 Классы библиотеки VCL Delphi
Класс TIBTable

MasterSource свойство, определяющее имя компонента "источник

данных" родительской таблицы для установления отношения между таблицами "родительская-дочерняя";
MasterFields

свойство, определяющее одно или несколько полей из родительской таблицы, служащих для связи с соответствующими полями данной дочерней таблицы (Это задает отношение между родительской и дочерней таблицами. Поля в списке разделяются точкой с запятой);
ReadOnly свойство, позволяющее установить для таблицы режим доступа "только для чтения";
TableName свойство, указывающее используемую таблицу базы данных;
RecNo свойство, указывающее номер текущей записи набора данных;
FindKey метод, выполняющий поиск значения или значений, перечисленных в списке, для ключевого поля;
FindNearest метод, перемещающий курсор на запись, содержащую значение, наиболее близкое к указанному значению ключевого поля (поиск может выполняться как по одному значению, так и по нескольким, если используется составной индекс).

: Проектирование приложений БД

Классы библиотеки VCL Delphi	Класс TIBTable	MasterSource 	свойство, определяющее имя компонента

Слайд 135 Классы библиотеки VCL Delphi
Класс TIBQuery
Компонент типа TIBQuery позволяет выполнять любой

SQL-оператор, допустимый по синтаксису InterBase. Если в качестве выполнимого оператора

используется SQL-оператор SELECT, то компонент возвращает набор данных (результирующий набор).

В отличие от класса TIBTable, класс TIBQuery позволяет создавать наборы данных из нескольких таблиц, а также ограничивать получаемый набор данных определенными условиями. Это отменяет необходимость извлечения всех записей таблицы в набор данных, что, в свою очередь, экономит память, сокращает сетевой трафик для удаленных баз данных и уменьшает время доступа.

Для определения набора данных TIBQuery следует установить значение свойства SQL и свойства DatabaseName (свойство DatabaseName определяет имя источника данных). По умолчанию, набор данных, формируемый компонентом типа TIBQuery, не является редактируемым.

Для того чтобы значения в созданном наборе данных можно было редактировать, необходимо выполнить следующие действия:
связать компонент TIBQuery с компонентом типа TIBUpdateSQL
Query1.UpdateObject:= UpdateSQL1;
определить для последнего значение свойств ModifySQL, InsertSQL, UpdateSQL

: Проектирование приложений БД

Классы библиотеки VCL Delphi	Класс TIBQuery	Компонент типа TIBQuery позволяет выполнять любой SQL-оператор, допустимый по синтаксису InterBase. Если в

Слайд 136 Классы библиотеки VCL Delphi
Класс TIBQuery
Класс TQuery содержит свойства и методы,

используемые для работы с набором данных, включая следующие:
DataSource свойство, позволяющее

указать родительский набор данных (для отношения "родительский-дочерний").
Например, если свойство SQL содержит значение
'SELECT * FROM RASHOD WHERE TOVAR = :TOVAR‘ ,
то значение переменной связи :TOVAR будет определяться из источника данных, указанного свойством DataSource.
Params свойство, содержащее список параметров для SQL-оператора.

Например:
Query3.SQL.Clear; // Очищаем значение свойств
// Динамически формируем код SQL-оператора INSERT
Query3.SQL.Add('INSERT INTO ADDRESS (F1, F2)');
// Имена параметров указываются после символа :
Query3.SQL.Add('VALUES (:F1, :F2)');
// Устанавливаем значение параметров
Query3.Params[0].AsString := 'Abc';
Query3.Params[1].AsInteger := 123;
// Выполнение SQL-оператора
Query3.ExecSQL;

: Проектирование приложений БД

Классы библиотеки VCL Delphi	Класс TIBQuery		Класс TQuery содержит свойства и методы, используемые для работы с набором данных, включая

Слайд 137 Классы библиотеки VCL Delphi
Класс TIBQuery

SQL свойство, содержащее текст SQL-оператора (для

автоматического формирования SQL-оператора можно вызвать из контекстного меню компонента TQuery

диалог SQL Builder);
DatabaseName свойство, определяющее имя подключаемого источника данных (имя DSN источника данных или имя, введенное классом типа TDatabase);
ExecSQL метод, выполняющий SQL-оператор, указанный свойством SQL (для SQL- оператора, создающего набор данных, вместо ExecSQL используется метод Open). ExecSQL можно вызывать для таких SQL-операторов как INSERT, UPDATE, DELETE, CREATE TABLE и т. п.

Если перед вызовом Open или ExecSQL не был вызван метод Prepare, то SQL-оператор
будет одновременно и откомпилирован, и выполнен.

Prepare метод, выполняющий компиляцию SQL-оператора. Вызов этого метода перед ExecSQL увеличивает скорость выполнения запроса при многократном повторении вызовов ExecSQL для одного и того же оператора (например, параметризированного запроса). Это позволяет откомпилировать SQL-оператор только один раз, а затем многократно его выполнять.

: Проектирование приложений БД

Классы библиотеки VCL Delphi	Класс TIBQuery		SQL 		свойство, содержащее текст SQL-оператора (для автоматического 		формирования SQL-оператора можно вызвать из контекстного

Слайд 138 Классы библиотеки VCL Delphi
Класс TIBUpdateSQL

Объект типа TIBUpdateSQL позволяет для наборов

данных, созданных с доступом
"только для чтения", поддерживать возможность их

обновления посредством выполнения
SQL-оператора.

Класс TIBUpdateSQL реализует следующие свойства и методы:

DeleteSQL свойство, определяющее SQL-оператор DELETE.

InsertSQL свойство, определяющее SQL-оператор INSERT.

ModifySQL свойство, определяющее SQL-оператор UPDATE.

ExecSQL метод, выполняющий один из заданных SQL-операторов (в зависимости от значения параметра, указываемого следующими константами: ukDelete, ukInsert,ukModify).

: Проектирование приложений БД

Классы библиотеки VCL Delphi	Класс TIBUpdateSQL	Объект типа TIBUpdateSQL позволяет для наборов данных, созданных с доступом

Слайд 139 Классы библиотеки VCL Delphi
Класс TIBDatabase
Класс TIBDatabase реализует работу с объектом

"база данных" и предоставляет средства контроля над соединением с базой

данных.

Класс TIBDataBase реализует следующие свойства и методы:

DatabaseName свойство, определяющее путь к БД

DеfaultTransaction свойство, определяющее транзакцию по умолчанию для
соединения с БД.
Params свойство, определяющее параметры соединения.
например:
user_name=SYSDBA
password=masterkey
lc_ctype=WIN1251

Open метод, открывающий соединение с БД

Сlose метод, закрывающий соединение с БД

: Проектирование приложений БД

Классы библиотеки VCL Delphi	Класс TIBDatabase	Класс TIBDatabase реализует работу с объектом

Слайд 140 Классы библиотеки VCL Delphi
Класс TIBTransaction

Класс TIBTransaction позволяет управлять транзакциями.
Свойства и

методы:

InTransaction свойство, указывающее, был ли выполнен для базы данных вызов

метода StartTransaction.

DеfaultDatabase свойство, определяющее компонент соединения с БД по умолчанию.

Params свойство, определяющее параметры транзакции
Пример:
read_commited
rec_version
nowait

StartTransaction метод, открывающий новую транзакцию;
Commit метод, выполняющий фиксацию текущей транзакции;
Rollback метод, выполняющий откат текущей транзакции;

: Проектирование приложений БД

Классы библиотеки VCL Delphi	Класс TIBTransaction		Класс TIBTransaction позволяет управлять транзакциями.	Свойства и методы:InTransaction 	свойство, указывающее, был ли выполнен для

Слайд 141 Классы библиотеки VCL Delphi
Классы компонентов управления данными
Компоненты управления данными расположены

на странице Data Controls палитры компонентов. Многие из этих компонентов

аналогичны элементам управления страницы Standard, с тем лишь отличием, что связаны через источник данных (компонент типа TDataSource) с определенным полем (или полями) из набора данных (компонентов типа TTable или TQuery).
Библиотека VCL предоставляет следующие классы компонентов управления данными:

TDBGrid - класс, позволяющий отображать записи набора данных в виде таблицы и управлять этими записями.
TDBNavigator - класс, предоставляющий средства навигации по набору данных, а также возможности добавления новых записей, включения режима редактирования, присвоения и отмены сделанных изменений. TDBText - класс, позволяющий в качестве надписи отображать значение поля текущей записи набора данных.
TDBEdit - класс, реализующий работу с однострочным полем редактирования.
TDBMemo - класс, реализующий многострочное поле редактирования, в котором можно отображать и изменять значение поля набора данных.
TDBImage - класс, реализующий объект "рисунок", в котором можно отображать и изменять значение поля набора данных формата BLOB.

: Проектирование приложений БД

Классы библиотеки VCL DelphiКлассы компонентов управления данными	Компоненты управления данными расположены на странице Data Controls палитры компонентов. Многие

Слайд 142 Классы библиотеки VCL Delphi
Классы компонентов управления данными
TDBRadioGroup - класс, реализующий

группу радиокнопок, которые связаны с полем базы данных. Применение такого

объекта предоставляет пользователю удобную возможность устанавливать значение поля базы данных, выбирая его из предлагаемых опций.
TDBCheckBox - класс, реализующий компонент "флажок", который связан с полем базы данных.
TDBListBox - класс, реализующий компонент "список", который используется для отображения значений поля набора данных. Значения, отображаемые в списке, содержатся в свойстве Items.
TDBComboBox - класс, реализующий компонент "раскрывающийся список", который используется для отображения значений поля набора данных. Значения, отображаемые в списке, содержатся в свойстве Items.
TDBLookupListBox - класс, позволяющий выполнять просмотр списка, заполненного значениями полей из другого набора данных.
TDBCtrlGrid - класс, реализующий особый вид таблицы, в которой каждая запись отображается на отдельной панели (количество панелей в компоненте указывается значением свойства RowCount).

: Проектирование приложений БД

Классы библиотеки VCL DelphiКлассы компонентов управления даннымиTDBRadioGroup - класс, реализующий группу радиокнопок, которые связаны с полем базы

Слайд 143 Классы библиотеки VCL Delphi
События, инициируемые для наборов данных

При работе с

наборами данных могут инициироваться следующие события:

AfterCancel и BeforeCancel - происходит

после/до отмены в приложении всех изменений, сделанных для текущей записи.
AfterClose и BeforeClose - происходит после/до закрытия набора данных и перевода базы данных в состояние dsInactive.
AfterDelete и BeforeDelete - инициируется после/до удаления приложением текущей записи, перевода набора данных в состояние dsBrowse и перемещения позиции курсора на предыдущую запись.
AfterEdit и BeforeEdi - происходит после/до начала редактирования приложением текущей записи.
AfterInsert и BeforeInsert - происходит после/до того как приложение вставит новую запись.
AfterOpen и BeforeOpen - происходит после/до того как приложение откроет набор данных, но до того, как какие-либо доступные данные будут отображены.
AfterPost и BeforePost - происходит до завершения переноса значений активной записи в базу данных или внутренний кэш.
AfterRefresh и BeforeRefresh - происходит после/до обновления набора данных.

: Проектирование приложений БД

Классы библиотеки VCL DelphiСобытия, инициируемые для наборов данныхПри работе с наборами данных могут инициироваться следующие события:AfterCancel и

Слайд 144 Классы библиотеки VCL Delphi
События, инициируемые для наборов данных

AfterScroll и BeforeScroll

- происходит после/до перемещения позиции курсора на другую запись.
OnCalcFields -

происходит при открытии набора данных, перевода его в состояние dsEdit, перемещении фокуса ввода от одного компонента к другому или от одного столбца к другому, при изменениях записи или при извлечении записи из базы данных, но только в том случае, если значение свойства AutoCalcFields равно True;
OnDeleteError - инициируется, если при попытке удаления строки произошла ошибка - было брошено исключение.
OnEditError - инициируется, если при попытке изменения или вставки записи произошла ошибка - было брошено исключение.
OnPostError - инициируется, если при попытке передать изменение или вставку новой записи происходит ошибка - бросается исключение.
OnFilterRecord - происходит при изменении активной записи и только в том случае, если свойство State набора данных установлено равным dsFilter, а свойство Filtered равно True. Чтобы запись была включена в набор данных, для нее следует установить параметр Accept равным True.
OnNewRecord - происходит при вставке или добавлении новой записи.

: Проектирование приложений БД

Классы библиотеки VCL DelphiСобытия, инициируемые для наборов данныхAfterScroll и BeforeScroll - происходит после/до перемещения позиции курсора на

Слайд 145 Применение многозвенных архитектур

: Проектирование приложений БД
Сервер БД

TDCOMConection

TClietntDataSet

TDataSourse

TDBGrid, TDBEdit,
TDBText

и др.
Свойство DataSet
Свойство DataSourse
Приложение – Сервер (Remote Data Module)
Приложение -

Клиент

TDataSetProvider

TDataSet


TDatabase

Свойство RemoteServer

Свойство ServerName или ServerGuide

Свойство ProviderName

Свойство DataSet




Применение многозвенных архитектур 		: Проектирование приложений БД Сервер БДTDCOMConectionTClietntDataSetTDataSourseTDBGrid, TDBEdit,TDBText и др.Свойство DataSetСвойство DataSourseПриложение – Сервер (Remote

Слайд 146 Применение многозвенных архитектур
Применение многозвенной архитектуры позволяет вынести бизнес-логику работы

с данными в приложение-сервер.
При многозвенной архитектуре приложение разбивается на ряд

компонентов, которые могут выполняться на различных компьютерах.

Такая архитектура позволяет реализовывать доступ к серверу БД из приложения-сервера, не имея на клиентских машинах никаких драйверов доступа к базе данных.

Большое преимущество использования такой архитектуры заключается также в возможности изменения серверной части без необходимости перетрансляции клиентского приложения.

Приложение-сервер получает набор данных стандартным способом - через один из компонентов набора данных, таких как TTable или Tquery, и пересылает его с помощью компонента TDataSetProvider компоненту TClientDataSet в приложение-клиент. Приложение-сервер реализуется как удаленный модуль данных, представляющий из себя СОМ-объект. Доступ к такому компоненту может быть выполнен посредством DCOM с любого удаленного компьютера.

: Проектирование приложений БД

Применение многозвенных архитектур 	Применение многозвенной архитектуры позволяет вынести бизнес-логику работы с данными в приложение-сервер.При многозвенной архитектуре приложение

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика