SQL: 1999 (SQL 3)
Новые типы данных • • LARGE OBJECT (LOB) BOOLEAN ARRAY ROW
ARRAY Пример: WEEKDAYS VARCHAR (10) ARRAY[7] позволило бы хранить названия всех семи дней недели в одной строке базы данных. Означает ли это, что SQL: 1999 допускает базы данных, не удовлетворяющие первой нормальной форме? Действительно, допускает, в том смысле, что разрешаются "повторяющиеся группы", запрещаемые первой нормальной формой. Однако некоторые утверждают, что тип ARRAY в SQL: 1999 всего лишь допускает хранение информации, которую можно декомпозировать
ROW 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
Новые предикаты. SIMILAR • Пример: WHERE name SIMILAR TO ' (SQL- (86|89|92|99) ) | (SQL (1|2|3))‘ - Этот предикат производит сопоставление образца с различными названиями, присваивавшимися когда-либо стандарту SQL.
Новые предикаты. DISTINCT • похож по своему действию на обычный предикат SQL UNIQUE • Отличия: – два неопределенных значения считаются неравными одно другому и поэтому удовлетворяют предикату UNIQUE – Предикат DISTINCT рассматривает два неопределенных значения как неотличающиеся одно от другого (хотя, конечно, они не являются равными и в то же время не являются неравными), и поэтому два неопределенных значения не удовлетворяют предикату DISTINCT.
• В SQL: 1999 существенно расширен диапазон представлений, над которыми напрямую могут выполняться операции обновления с использованием только средств, обеспечиваемых стандартом.
рекурсивные запросы • Написание рекурсивного запроса вовлекает написание выражения запроса, которое вы хотите включить в рекурсию и присвоение ему имени, а затем использование этого имени в соответствующем выражении запроса: WITH RECURSIVE Q 1 AS SELECT … FROM … WHERE …, Q 2 AS SELECT … FROM … WHERE …SELECT … FROM Q 1, Q 2 WHERE …
точки сохранения (savepoints) Операции § ROLLBACK TO SAVEPOINT § RELEASE SAVEPOINT
Активные базы данных • обеспечивается через средство, называемое триггерами (triggers). • триггер - это предоставляемое разработчикам базы данных средство заставить систему баз данных выполнять некоторые операции каждый раз, когда приложение запрашивает выполнение определенных операций над указанными таблицами.
• Пример (использование триггера для журнализации всех операций, которые изменяют значение заработной платы в таблице служащих): 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)
Объектная ориентация • Структурные определяемые пользователями типы • пример определения структурного типа: 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
• Этот новый тип является подтипом другого структурного типа • новые атрибуты типа emp_type включают идентификатор служащего и размер заработной платы. • этот тип немедленно пригоден для прямого использования (instaniable) • ему разрешается иметь подтипы (NOT FINAL). • любая ссылка на этот тип (REF) порождаются из значений идентификаторов служащих. • определен метод, который может быть применен к экземплярам этого типа (его значениям).
REF-тип • специальный тип, называемый REF-типом, значениями которого являются уникальные идентификаторы. • Данный REF-тип всегда ассоциируется с указанным структурным типом. • Пример: если мы собирались определить таблицу, содержащую столбец с именем "manager", значения которого являются ссылками на строки типизированной таблицы служащих, то это выглядело бы подобно следующему: manager REF (emp_type)
Функциональная и точечная нотации • WHERE emp. salary > 10000 • WHERE salary (emp) > 10000