Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
- Название:Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2006
- Город:Санкт-Петербург
- ISBN:5-94157-609-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ краткое содержание
Рассмотрены вопросы, необходимые разработчику для создания клиент-серверных приложений с использованием СУБД Firebird, явившейся развитием СУБД Borland Interbase 6. Содержится обзор концепций и моделей архитектуры клиент/сервер, а также практические рекомендации по работе с клиентскими библиотеками Firebird. Детально описаны особенности типов данных SQL, язык манипулирования данными (Data Manipulation Language, DML), а также синтаксис и операторы языка определения данных ( Data Definition Language, DDL). Большое внимание уделено описанию транзакций и приведены советы по их использованию при разработке приложений. Описано программирование на стороне клиента и сервера написание триггеров и хранимых процедур, создание и использование событий базы данных, обработка ошибок в коде на сервере и многое другое. Материал сопровождается многочисленными примерами, советами и практическими рекомендациями.
Для разработчиков баз данных
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
ALTER TABLE MEMBERSHIP
ADD FULL_NAME COMPUTED BY FIRST_NAME || ' ' || LAST_NAME;
Также возможно использование выражения подзапроса для получения значения такого столбца - эту возможность следует использовать осторожно, исключив нежелательные зависимости. Информацию о вычисляемых столбцах см. в главе 16.
Условия поиска
Возможность конструировать "формулы" для задания условий поиска при выборе наборов, локализации строк при изменениях и удалениях, а также применение правил для создания входных данных является фундаментальной характеристикой языка запросов. Выражения заполняют весь SQL, потому что они обеспечивают алгебру для контекста добавления данных в хранимые абстрактные данные и представления их в виде информации.
Выражения также играют важную роль в контексте разбора входных данных.
Предложение WHERE в операторе задает условия для выбора строк выходного набора или определения строк, на которые воздействуют операции (UPDATE, DELETE). Почти все столбцы таблицы могут быть использованы в выражении поиска в предложении WHERE. Если с элементом данных можно оперировать в SQL, то его можно проверять. Вспомните, что предикат поиска является утверждением. Простые или сложные утверждения являются формулами. Мы конструируем формулы для задания условий. Условия должны быть истинными для каждой строки в наборе, с которой оперирует главное предложение нашего запроса.
Упрощенный синтаксис предикатов в предложении WHERE имеет вид:
WHERE значение оператор значение
Другими словами, в соответствии с синтаксисом оба следующих утверждения являются правильными:
WHERE ACOL = значение
и
WHERE значение = ACOL
Для предикатов, включающих символы операторов эквивалентности (= и <>), а также некоторые другие (например, LIKE), синтаксический анализатор SQL понимает оба способа и трактует их как эквивалентные. Другие операторы вызовут исключение или неопределенную ошибку при перестановке левой и правой части предиката.
В случае "реверсивных" типов порядок размещения операндов в предикате является вопросом стиля. При этом по опыту автора можно сказать, что читаемость сложных предикатов SQL в исходных кодах клиента и PSQL является обратно пропорциональной количеству предикатов, представленных с проверяемым значением, размещенных справа от оператора, как во втором примере.
Например, множество предикатов в форме
<���выражение-или-константа> = COLUMNX
делают работу по исправлению ошибок и пересмотру кода каторжным трудом по сравнению с
COLUMNX = <���выражение-или-константа>
Важно принимать дополнительные "усилия", чтобы сделать все выражения совместимыми.
Массивы вовсе не могут использоваться в предикатах поиска, поскольку SQL не имеет средств доступа к хранящимся в массивах данным. Выражения для столбцов BLOB являются весьма ограниченными, BLOB не может сравниваться на равенство ни с другим BLOB, ни с любым другим типом данных. Текстовый BLOB может использоваться в STARTING WITH и с некоторыми ограничениями в предикатах LIKE и CONTAINING. Некоторые внешние функции могут работать с типами BLOB - см. функции BLOB В приложении 1.
Строки могут проверяться любыми операторами сравнения, хотя такие операторы, как <, >, >= и <=, не часто являются полезными.
Условия упорядочения и группирования
Когда выходное поле создается в выражении, оно может быть использовано для установления условий упорядочения или группирования набора. При этом синтаксис правил для выражений в ORDER BY и GROUP BY различается, также существуют различия между версиями 1.0.x и 1.5.
На поле, созданное во время выполнения с использованием выражения, не может быть ссылок как на условие в предложении ORDER BY по его алиасу. Оно может быть использовано с помощью ссылки на его номер в наборе - то есть на его позицию в строке, считая единицей позицию самого левого выходного поля. Например, следующее
SELECT
MEMBER_ID,
LAST_NAME || ', ' || FIRST_NAME AS FULL_NAME,
JOIN_DATE
FROM MEMBERSHIP
ORDER BY 2;
создает список, упорядоченный по полю, полученному в результате конкатенации.
В версии 1.5 и более поздних в наборах, отличных от UNION, условие упорядочения может быть выражением, возвращающим значение, которое может оказаться осмысленным для упорядочения. Например, предложение ORDER BY В следующем операторе вызывает функцию, которая возвращает длину столбца описания и использует ее для упорядочения выходного набора от большего к меньшему:
SELECT DOCUMENTED, TITLE, DESCRIPTION FROM DOCUMENT
ORDER BY STRLEN(DESCRIPTION) DESC;
В SQL оператор GROUP BY используется для собирания наборов данных и иерархической их организации или суммирования.
Во всех версиях Firebird вы можете выполнять иерархическое группирование, основанное на вызове внешней функции (UDF), однако в версии 1.0.x вы не можете использовать порядковый номер выходного столбца в качестве условия группирования. Firebird 1.5 добавляет возможность использования в GROUP BY порядкового номера, а также несколько других типов выражений, включая выражения подзапросов.
Другие изменения в Firebird 1.5 ужесточают отдельные правила группирования, убирая поддержку некоторых неправильных вариантов синтаксиса группирования, которые были допустимы в Firebird 1.0.x.
Правила и взаимодействия выражений для группирования и упорядочения иногда являются сложными в реализации. Эти темы подробно обсуждаются в главе 23.
Следующий пример для версии 1.5 запрашивает в таблице MEMBERSHIP и выводит статистику, показывающую количество участников, объединенных в каждом месяце:
SELECT
MEMBER_TYPE,
EXTRACT(MONTH FROM J0IN_DATE) AS MONTH_NUMBER,
/* 1, 2, и т.д. */
F_CMONTHLONG(JOIN_DATE) AS SMONTH,
/* UDF, возвращающая месяц в виде строки */
COUNT (*) AS MEMBERS_JOINED
FROM MEMBERSHIP
GROUP BY
MEMBER_TYPE, EXTRACT(MONTH FROM JOIN_DATE);
Выражения CHECK в DDL
Применение выражений не ограничивается только DML; мы уже видели их использование в определении таблицы для описания вычисляемых столбцов. Каждый раз, когда вы определяете ограничение CHECK для таблицы, столбца или домена, вы применяете выражения. По своей природе ограничение CHECK выполняет проверку на одно или более значений - тестирует предикат. Вот пример, где проверяется номер сотового телефона участника, который должен начинаться с нуля, если номер вообще присутствует:
ALTER TABLE MEMBERSHIP
ADD CONSTRAINT CHECK_CELLPHONE _NO
CHECK (CELLPHONE_NO IS NULL OR CELLPHONE_NO STARTING WITH '0');
Выражения в PSQL
Процедурный язык для триггеров и хранимых процедур PSQL широко использует выражения для управления потоком выполнения. PSQL предоставляет структуры IF(<���предикат>) THEN и WHILE(<���предикат>) DO. Любой предикат, который может быть использован в условии поиска, также может быть предикатом для условия управления потоком в программе.
Читать дальшеИнтервал:
Закладка: