Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Базы данных. Лекции по курсу. В 4 частях. Ч.1. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
1 Мб
Скачать
Приведем примеры записи средствами языка реляционного исчис­ления с переменными-кортежами формул, соответствующих операци­ям реляционной алгебры.
операция объединения R S {t | R(t) S(t)}; операция разности RS {t | R(t) S(t)};
операция декартова произведения T = RS
t |  (u, w) (R(u) S(w) t = u w)};
{
операция проекции
(k)
{
t
|  (u) (R(u) ((t[1] = u(i1))…. (t[k] = u(ik))}.
i, i2,…i
(R) 
k
Подобным образом можно записать формулы и для остальных опе­раций реляционной алгебры.
Вернемся к исходной задаче «Получить имена и табельные номера сотрудников, являющихся начальниками отделов с количеством со­трудников больше пятидесяти». Для краткости введем обозначения:
Сотрудники (Таб_номер, Сотр_имя, Сотр_зарпл, Отдел_ном) – R(u);
Отделы (Отдел_ном, Отдел_нач, Кол_во) – S(w).
Тогда формулу на языке реляционного исчисления с переменными­кортежами, дающую решение задачи, можно записать следующим об­разом:
(2)
{
r
|  (u, w) (R(u) S(w) (u[4] = w[1]) (w[3] > 50)
r[1] = u[1]) (r[2] = w[2])}.
 (
В более прагматическом и не столь теоретическом варианте ис­пользуется несколько другая запись, более близкая к языку SQL (язык
SQL построен на языке реляционного исчисления).
1. Вместо номера компонента в кортежной переменной
зуется выражение
2. Кванторы и заменяются фразами
S.[имя_атрибута].
FORALL и EXISTS.
S[i] исполь-
3. Общий вид формулы реляционного исчисления имеет вид
[список переменных-кортежей]
WHERE [формула реляционного
исчисления]
21
4. Перечень переменных-кортежей вводится фразой [список переменных-кортежей]
RANGE IS [имя отношения]
Ниже приведена запись на языке реляционного исчисления в дан­ном диалекте для задачи «Получить имена и табельные номера сотруд­ников, являющихся начальниками отделов с количеством сотрудников больше пятидесяти».
Сотрудник RANGE IS Сотрудники
Отдел RANGE IS Отделы
Сотрудник.Сотр_имя, Сотрудник.Таб_номер
WHERE EXISTS
AND Отдел.Отдел_Кол > 50
(Сотрудник.Сотр_имя = Отдел.Отдел_нач
)
Как можно видеть, приведенная запись достаточно близка к записи на языке SQL.
Ниже приведен один пример ного исчисления с переменными-кортежами
ЩИЕ, ПРОЕКТЫ, НОМЕРА_ПРОЕКТОВ
записи формулы на языке реляцион-
для отношений СЛУЖА-
.
СЛУ1, СЛУ2 RANGE IS СЛУЖАЩИЕ
НОМЕР_ПРОЕКТА RANGE IS НОМЕРА_ПРОЕКТОВ
СЛУ1.СЛУ_НОМЕР, СЛУ1.СЛУ_ИМЯ, СЛУ1.СЛУ_ЗАРП
WHERE FORALL НОМЕР_ПРОЕКТА EXISTS СЛУ2
СЛУ1.ПРО_НОМ = НОМЕРА_ПРОЕКТОВ.ПРО_НОМ
(СЛУ1.СЛУ_НОМЕР = СЛУ2.СЛУ_НОМЕР AND
)
Выражение генерирует следующий результат:
СЛУ_НОМЕР СЛУ_ИМЯ СЛУ_ЗАРП
2934 Иванов 22 400 2935 Петров 29 600
22
Записанная формула является эквивалентом операции реляционной алгебры
DIVIDE.
СЛУЖАЩИЕ DIVIDE BY НОМЕРА_ПРОЕКТОВ.
Ниже приведены формулы на языке реляционного исчисления с переменными-кортежами для учебной базы данных поставщиков, деталей, поставок, являющиеся решениями указанных хадач.
Учебная база данных поставщиков, деталей, поставок:
Create table S (n_post char(5) not NULL, name char(20), reiting
smallint, town char
(15));
Create table P (n_det char
smallint, town char
(15));
(6), name char(20), cvet char(7), ves
Create table SPJ (n_post char(5), n_det char(6), kol smallint).
Переменные на кортежах: SX, SY RANGE IS S
SPX, SPY RANGE IS SP
PX RANGE IS P
1. Определить номера поставщиков из Парижа со статусом, боль-
шим 20:
(SX.n_post, SX.reiting) WHERE (SX.town =’Париж’ AND SX.reiting > 20).
2. Найти все пары номеров поставщиков, в которых два поставщи-
ка находятся в одном городе:
SX.n_post, SY.n_post) WHERE (SX.town = SY.town
(
AND SX.n_post < SY.n_post).
3. Определить поставщиков детали с номером 'Р2'
SX .n_post, SX.name, SX.reiting, SX.town)
(
WHERE EXISTS SPX (SPX.n_post = SX.n_post AND SPX.n_det = ‘P2’).
Сокращенная запись того же запроса выглядит следующим образом:
SX WHERE EXISTS SPX (SPX.n_post = SX.n_post AND SPX.n_det = ‘P2’).
23
4. Определить имена поставщиков хотя бы одной красной детали:
SX.name WHERE EXISTS SPX ( SX.n_post = SPX.n_post AND
EXISTS PX (PX.n_det = SPX.n_det AND PX.cvet = 'Красный')).
Тот же запрос можно записать и в несколько ином виде:
SX.name WHERE EXISTS SPX (EXISTS PX (SX.n_post = SPX.n_post AND
SPX.n_det = PX.n_det AND PX.cvet = 'Красный')).
1.2.2. РЕЛЯЦИОННОЕ ИСЧИСЛЕНИЕ С ПЕРЕМЕННЫМИ-ДОМЕНАМИ
В реляционном исчислении с переменными-доменами областью
определения переменных являются не отношения, а домены.
Общая форма записи формулы: {x1, x2, . . . xk, |  (x1, x2, . . . xk)}. В правой части формулы записан предикат (формула), обладающий
тем свойством, что
x
, x2, . . . xk – переменные на доменах. Ниже приве-
1
дены переменные на доменах для учебной базы данных поставщиков, деталей, поставок.
Домен Переменная домена x1, x2, . . . xk
n_post SX, SY – переменные на одном домене
n_det PX, PY
name NAMEX, NAMEY
cvet CVETX, CVETY
reiting REITINGX, REITINGY
town TOWNX, TOWNY
Виды атомов, из которых строятся предикаты:
1.
R(x
, x2, . . . xk), где Rk-арное отношение, xi – константа или пе-
1
ременная на некотором домене; ния
x
, должны быть выбраны таким образом, чтобы (x1, x2, . . . xk) было
i
кортежем отношения
2.
x y, где x, y – переменные или константы на домене.
R.
R(x
, x2, … xk) указывает, что значе-
1
24
Например, формула {x1, x2 | R1(x1, x2) (y) (R2(x1, y)   R2(x2, y))}
представляет собой множество кортежей в
R
таких, что ни один из их
1
компонентов не является первым компонентом какого-либо кортежа отношения
R
.
2
Теорема 2. Для любого безопасного выражения реляционного ис-
числения с переменными-кортежами существует эквивалентная без­опасная формула реляционного исчисления с переменными-доменами.
Теорема 3. Для любой безопасной формулы реляционного исчис-
ления с переменными-доменами существует эквивалентное выражение реляционной алгебры.
Ниже приведена формула реляционного исчисления с переменны­ми-доменами в классическом виде, дающая решение задачи «Найти имена менеджеров, зарплата которых превышает 25 000 единиц».
{
fname, lname | position, salary
(
Staff(lname, position, salary) position = ’Managersalary >25 000)}.
Ниже приведены примеры формул исчисления с переменными­доменами в более прагматической форме записи языка для учебной базы данных поставщиков, деталей, поставок:
SX – множество всех номеров поставщиков;
SX WHERE S(n_post:SX) – множество всех номеров поставщиков
в отношении
S;
SX WHERE S(n_post:SX, town:’Лондон’) – множество номеров по-
ставщиков из Лондона;
SX WHERE EXISTS REITINGX
(S (n_post:SX, reiting:REITINGX, CITY:'Париж' ) AND REITINGX > 20) – номера поставщиков из Парижа с рейтингом, большим 20;
NAMEX WHERE EXISTS SX EXISTS PX (S(n_post:SX, name:NAMEX)
AND SP(n_post:SX, n_det:PX ) AND P(n_det:PX, cvet:'Красный'))
имена поставщиков хотя бы одной красной детали.
25
ВОПРОСЫ
1. В чем принципиальное различие между языками реляционной
алгебры и реляционного исчисления?
2. В чем проявляется замкнутость языков реляционной алгебры и
реляционного исчисления относительно понятия отношения?
3. В чем проявляется эквивалентность языков реляционной алгебры
и реляционного исчисления относительно понятия отношения?
4. Перечислите операции реляционной алгебры и дайте им опреде-
ление.
5. Как классифицируются
операции реляционной алгебры?
6. Что такое отношения-синонимы?
7. Запишите дополнительные операции реляционной алгебры (пе-
ресечение, соединение, эквисоединение, деление) через основные опе­рации.
8. Запишите каждую операцию реляционной алгебры на языке
SQL.
9. Чем различаются операции «эквисоединение» и «внешнее соеди-
нение»?
10. Чем различают полное, левое и правое внешние соединения?
11. Как сервер баз
данных выбирает план выполнения запроса?
12. Что является областью определения в языке реляционного ис-
числения с переменными-кортежами?
13. Что является областью определения в языке реляционного ис-
числения с переменными-доменами?
14. Какова общая форма записи формулы реляционного исчисления
с переменными-кортежами в классическом варианте?
15. Как строятся атомы в формуле реляционного исчисления
с пере-
менными-кортежами?
16. Какова общая форма записи формулы реляционного исчисления
с переменными-кортежами в прагматическом варианте?
17. Как строятся атомы в формуле реляционного исчисления с пере-
менными-доменами?
18. Запишите операции реляционной алгебры на языке реляционно-
го исчисления с переменными-кортежами.
26
19. Какова общая форма записи формулы реляционного исчисле-
ния с переменными-доменами в классическом варианте?
20. Какова общая форма записи формулы реляционного исчисле-
ния с переменными-доменами в прагматическом варианте?
21. Пусть база данных «Гостиницы» содержит следующие отно-
шения:
Гостиницы (код гостиницы, название, адрес);
Номера (код номера, код гостиницы, тип номера, цена);
Регистрация (код, код постояльца, имя, адрес, дата прибытия, дата отъезда, код номера, код гостиницы
).
Напишите выражения реляционной алгебры, позволяющие выпол­нить запрос: «Составить список имен и адресов всех постояльцев двухместных номеров гостиницы Северная».
22. Учебная база данных поставщиков, деталей, поставок опреде-
лена следующим образом:
Create table S (n_post char(5) not NULL, name char(20), reiting
smallint, town cha
r(15));
Create table P (n_det char(6), name char(20), cvet char(7), ves
smallint, town char
(15));
Create table SP (n_post char(5), n_det char(6), date_post date, kol
smallint
).
Объясните, в чем состоит некорректность SQL-запроса
Select * from S x where reiting > any (Select ves from P y where
y.town=‘Париж’
)?
23. Для учебной базы данных, определенной в вопросе 22, запиши-
те выражение реляционной алгебры, дающее решение задачи «Опреде­лить номера изделий, детали для которых полностью поставляются поставщиком с номером '
S1'».
24. Для учебной базы данных, определенной в вопросе 22, запиши­те выражение реляционной алгебры, дающее решение задачи «Полу­чить имена поставщиков, по крайней мере, одной детали, поставляе­мой как минимум одним поставщиком, который поставляет хотя бы одну красную деталь».
27
25. Для учебной базы данных, определенной в вопросе 22, запиши-
те выражение реляционной алгебры, дающее решение задачи «Опреде­лить номера изделий, для которых поставляется хотя бы одна деталь из множества деталей, поставляемых поставщиком с номером '
26. Тождественно ли выражение ( (
A MINUS B) выражению (A INTERSECT B) UNION (B MINUS A)?
27. Тождественно ли выражение ( (
A MINUS B) выражению (A INTERSECT B) INTERSECT (B MINUS
(
A MINUS B))?
28. Является ли запись
A INTERSECT B = A MINUS (A MINUS B)
A INTERSECT B) MINUS
A INTERSECT B) MINUS
S1'».
тождеством?
29. Является ли запись
A INTERSECT B = (A MINUS B) MINUS
(B MINUS A) тождеством?
30. Для учебной базы данных, определенной в вопросе 22, объяс­ните, в чем состоит некорректность SQL-запроса
Select * from S x where reiting > all (Select ves from P y)?
28
2. ЯЗЫК SQL. ОПТИМИЗАЦИЯ ЗАПРОСОВ
Работа по созданию языка SQL была начата сразу после появления статьи Э. Кодда в 1970 г. в лабораториях компании IBM для проверки возможностей реляционной модели. Прототипом языка SQL был язык
SEQUEL для экспериментальной исследовательской системы System R. Первые прототипы, основанные на языке SQL, появились в 1973– 1976 годах сначала в IBM, а затем в других компаниях.
На рубеже 1970–1980 годов появились коммерческих реализациях:
1979 – Oracle (Relation Software Inc. – Oracle corp.);
1981–1982 – DB2 (IBM), Ingres – CA-OpenIngres (Relation Tech-
nology Inc. – Computer Associates);
1984 – Informix (Informix Software);
1986 – Sybase (Sybase Corp.)
Одновременно были начаты работы по стандартизации языка SQL. К числу особенностей развития языка SQL следует отнести:
язык SQL реализован во всех коммерческих реляционных СУБД;
все фирмы провозглашают соответствие стандарту SQL;
реализованные диалекты очень близки;
путь «сверху вниз» – уточнение и упрощение SQL System R;
путь «снизу вверх» (наращивание возможностей);
нередко отсутствие полного описания языка.
Первый международный стандарт языка SQL появился в 1989 году. В 1992 году был принят второй международный стандарт (стандарт SQL2 или SQL92).
В 1995 г. стандарт был дополнен спецификацией интерфейса уров­ня вызова Call-Level Interface – SQL/CLI, ODBC (Open Database
Connectivity) и JDBC (Java Database Connectivity).
первые разработки SQL в
29
Стандарт SQL:1999 (SQL3) – третий основной стандарт SQL, ис­пользуемый в настоящее время. Стандарт SQL:1999 состоит из пяти частей. Первая часть (SQL/Framework) посвящена описанию концепту­альной структуры стандарта: приводится развернутая аннотация сле­дующих четырех частей.
Вторая часть SQL:1999 (SQL/Foundation) образует базис стандарта. Вводится система типов языка, формулируются правила определения функциональных зависимостей и возможных ключей, определяется синтаксис и семантика основных
операторов определения и манипулирования схемой базы данных;
операторов манипулирования данными;
операторов управления транзакциями (расширенные модели
операторов SQL:
транзакций, контрольные точки, многозвенные транзакции);
операторов управления подключениями к базе данных и т. д.
Третью часть занимает уточненная по сравнению с SQL/92 специ­фикация SQL/CLI. В четвертой части специфицируется SQL/PSM – синтаксис и семантика языка определения хранимых процедур (стан­дарт синтаксиса триггеров и процедур). Наконец, в пятой части – SQL/Bindings – определяются правила связывания SQL для стандарт­ных версий языков программирования FORTRAN, COBOL, PL/1,
Pascal, Ada, C и MUMPS.
конце 2003 года был принят и опубликован новый вариант меж-
В дународного стандарта SQL:2003.
стандарт управления распределенными транзакциями (SQL/
Transaction);
стандарт поддержки темпоральных свойств данных (SQL/
Temporal);
стандарт управления внешними данными (SQL/MED);
поддержка оперативной аналитической обработки (SQL/OLAP).
2.1. ОСНОВНЫЕ ПРАВИЛА ИСПОЛЬЗОВАНИЯ ЯЗЫКА SQL
Написанный пользователем SQL-запрос передается серверу баз данных, который, обрабатывая запрос, строит план его выполнения (алгоритм), от которого зависит:
скорость выполнения запроса;
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]