Слайд 2Новые типы данных
LARGE OBJECT (LOB)
BOOLEAN
ARRAY
ROW
Слайд 3ARRAY
Пример:
WEEKDAYS VARCHAR (10) ARRAY[7] позволило бы хранить названия всех семи
дней недели в одной строке базы данных.
Означает ли это,
что SQL:1999 допускает базы данных, не удовлетворяющие первой нормальной форме? Действительно, допускает, в том смысле, что разрешаются "повторяющиеся группы", запрещаемые первой нормальной формой.
Однако некоторые утверждают, что тип ARRAY в SQL:1999 всего лишь допускает хранение информации, которую можно декомпозировать
Слайд 4ROW
CREATE TABLE employee
(emp_id INTEGER,
name
ROW (given VARCHAR (30), family
VARCHAR (30) ), address ROW ( street VARCHAR (50), city VARCHAR (30), state CHAR (2) ), salary REAL );
SELECT e.name.family FROM employee E
Слайд 5Новые предикаты. SIMILAR
Пример:
WHERE name SIMILAR TO ' (SQL- (86|89|92|99)
) | (SQL (1|2|3))‘
- Этот предикат производит сопоставление образца с
различными названиями, присваивавшимися когда-либо стандарту SQL.
Слайд 6Новые предикаты. DISTINCT
похож по своему действию на обычный предикат
SQL UNIQUE
Отличия:
два неопределенных значения считаются неравными одно другому и поэтому
удовлетворяют предикату UNIQUE
Предикат DISTINCT рассматривает два неопределенных значения как неотличающиеся одно от другого (хотя, конечно, они не являются равными и в то же время не являются неравными), и поэтому два неопределенных значения не удовлетворяют предикату DISTINCT.
Слайд 7В SQL:1999 существенно расширен диапазон представлений, над которыми напрямую могут
выполняться операции обновления с использованием только средств, обеспечиваемых стандартом.
Слайд 8рекурсивные запросы
Написание рекурсивного запроса вовлекает написание выражения запроса, которое вы
хотите включить в рекурсию и присвоение ему имени, а затем
использование этого имени в соответствующем выражении запроса:
WITH RECURSIVE Q1 AS SELECT … FROM … WHERE …, Q2 AS SELECT … FROM … WHERE …SELECT … FROM Q1, Q2 WHERE …
Слайд 9точки сохранения (savepoints)
Операции
ROLLBACK TO SAVEPOINT
RELEASE SAVEPOINT
Слайд 10Активные базы данных
обеспечивается через средство, называемое триггерами (triggers).
триггер -
это предоставляемое разработчикам базы данных средство заставить систему баз данных
выполнять некоторые операции каждый раз, когда приложение запрашивает выполнение определенных операций над указанными таблицами.
Слайд 11Пример (использование триггера для журнализации всех операций, которые изменяют значение
заработной платы в таблице служащих):
CREATE TRIGGER log_salupdate
BEFORE UPDATE OF salary ON employees REFERENCING OLD ROW as oldrow NEW ROW as newrow
FOR EACH ROW
INSERT INTO log_table
VALUES (CURRENT_USER, oldrow.salary, newrow.salary)
Слайд 12Объектная ориентация
Структурные определяемые пользователями типы
пример определения структурного типа:
CREATE TYPE
emp_type
UNDER person_type
AS (emp_id INTEGER,
salary REAL)
INSTANIABLE
NOT FINAL
REF (emp_id)
INSTANCE METHOD
GIVE_RAISE
(abs_or_pct BOOLEAN, amount REAL )
RETURNS REAL
Слайд 13Этот новый тип является подтипом другого структурного типа
новые атрибуты типа
emp_type включают идентификатор служащего и размер заработной платы.
этот тип немедленно
пригоден для прямого использования (instaniable)
ему разрешается иметь подтипы (NOT FINAL).
любая ссылка на этот тип (REF) порождаются из значений идентификаторов служащих.
определен метод, который может быть применен к экземплярам этого типа (его значениям).
Слайд 14REF-тип
специальный тип, называемый REF-типом, значениями которого являются уникальные идентификаторы.
Данный
REF-тип всегда ассоциируется с указанным структурным типом.
Пример:
если
мы собирались определить таблицу, содержащую столбец с именем "manager", значения которого являются ссылками на строки типизированной таблицы служащих, то это выглядело бы подобно следующему:
manager REF (emp_type)
Слайд 15Функциональная и точечная нотации
WHERE emp.salary > 10000
WHERE salary (emp) >
10000