Читать интересную книгу Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - Хелен Борри

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать

81

Поскольку база данных примера не имеет таблиц без индексов, некоторые примеры в этом разделе используют специально описанные неиндексированные версии таблиц EMPLOYEE, PROJECT и DEPARTMENT, названные EMPLOYEE1, PROJECT1 и Departments соответственно. Скрипт с именем NO_INDEXES.SQL для создания этих таблиц может быт загружен с http://www.apress.com.

82

Другой причиной использования алиасов при задании запросов и планов является то, что, скорее всего, подобная согласованность будет поддерживаться в следующих версиях Firebird.

83

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

84

Оптимизатор InterBase, Firebird 1.0 и 1.5 считает составные индексы более селективными, чем они есть на самом деле. В этом виновата особенность подсчета селективности, которая производится целиком для всего ключа. В Firebird 2.0 селективность составных индексов учитывается отдельно по каждому сегменту составного ключа, что позволяет избежать сильных проколов в оптимизации запросов. - Прим. науч. ред.

85

Подобное дополнительное условие может привести к тому, что вообще никакие индексы не будут использоваться. Более правильным в случае множества условий поиска является "отключение" низкоселективного индекса для отдельного столбца путем превращения условия сравнения в вычисляемое: для числовых столбцов - where field+0 = value, для строковых - where field || '' = value. - Прим. науч. ред.

86

В этом случае также желателен и триггер BEFORE UPDATE. - Прим. перев.

87

Theo Haerder and Andreas Reuter, "Principles of Transaction-Oriented Database Recovery", ACM Computing Surveys 15(4) (1983): 287-317.

88

Andreas Reuter and Jim Gray, Transaction Processing Concepts and Techniques (San Francisco, С A: Morgan Kaufmann, 1993).

89

Программисты API. смотрите в TP В константу isc_tpb_no_auto_undo.

90

Спасибо, Ann Harrison!

91

В оригинале не совсем верно выбраны термины. Никакой "таблицы", конечно, нет. Есть битовый массив, который меняется при изменении состояния транзакций и который копируется в память (частично) при старте транзакций SNAPSHOT. Также TIP не может быть "раздут", поскольку битовый массив просто растет в размерах при старте каждой новой транзакции и строится заново при очередном восстановлении (restore). Размер TIP равен Next Transaction / 4 (в байтах). - Прим. науч. ред.

92

Здесь и далее в тексте практически не упоминается важный параметр Oldest Snapshot Transaction (OS Г). - Прим, науч. ред.

93

Хорошо понимать цикл жизни транзакций в Firebird, если вы работаете и с другими реляционными СУБД, например, с PostgreSQL, которая имитирует многоверсионную архитектуру Firebird.

94

Во всех версиях Firebird и в InterBase до версии 7.1 sweep срабатывает, когда расстояние между OIT и Oldest Snapshot Transaction (а не OAT) становится больше sweep interval (см. разд. "Другие переключатели gstat" главы 18). В Firebird 2.0 срабатывание sweep будет зависеть именно от разницы OAT-OIT. - Прим. науч. ред.

95

OST - это на самом деле номер транзакции, которая была активной на момент старта OAT. - Прим. науч. ред.

96

Возможно, здесь имеются в виду внешние ключи с опцией ON UPDATE/DELETE CASCADE. В этом случае при изменении мастер-записи автоматически модифицируются записи-детали. Ни в каких других случаях "зависимые" таблицы не обновляются сервером. - Прим. науч. ред.

97

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

98

Для энтузиастов Borland опубликовал документ "Embedded SQL Guide" (Руководство по встраиваемому SQL) как часть комплекта документации по InterBase. Версии этого тома также доступны в формате PDF на некоторых сайтах - найдите через Google "EmbedSQL.pdf".

99

То же, "API Guide" (Руководство по API). APlGuide.pdf.

100

SET TRANSACTION, как COMMIT и ROLLBACK, не является оператором, выполняемым на сервере. Будучи оператором Embedded SQL он преобразуется утилитой gpre (или isql) в вызовы Firebird API (isc_start_transaction...). - Прим. науч. ред.

101

Для большинства этих реализаций была выполнена трансляция заголовочного файла С Firebird в соответствующий язык высокого уровня для предоставления средств API Firebird (или InterBase) для этого языка. Если вы планируете разрабатывать программы с использованием API, хорошим решением будет поиск в Интернете существующих трансляций заголовочного файла.

102

Фактически существуют две различные функции для запуска транзакции: isc_start_ transaction() используется в языках, которые поддерживают передачу переменного количества аргументов при вызове функций; isc_start_multiple() используется в языках, требующих статический список аргументов. isc_start_transaction() ограничивается одной транзакцией, которая может использовать до 16 баз данных, в то время как isc_start_multiple О запускает транзакции, обращающиеся к большему количеству баз данных или обращающиеся к переменному количеству баз данных, которое может превышать 16.

103

Тип isc_tr_handle является указателем void, определенным в заголовочном файле ibase.h, который расположен в каталоге /include в каталоге вашей инсталляции Firebird.

104

Если в будущем структура TPB изменится, эта константа также будет изменена, так что сервер легко сможет обрабатывать клиентов, скомпилированных в друrой версии.

105

Неанглийские версии файла сообщений не были доступны во время написания данной книги. Готовятся проекты трансляции. Если вас интересует локализованный файл сообщений, обратитесь к спискам сообщества Firebird. Сообщите, что вы заинтересованы в участии в проектах локализации!

106

Существует несколько неприятных исключений из этого правила. Например, ISC ERROR CODE: 335544321 "Arithmetic exception, numeric overflow, or string truncation" (Арифметическое исключение, числовое переполнение или усечение строки) объединяет такой широкий диапазон возможностей, что оно обычно вызывает состояние изумления даже у программиста, который допустил возможность появления такого исключения.

107

Если клиентская библиотека удаленного клиента находит локальную копию файла сообщений в известном "корневом" каталоге, Firebird 1.5 будет использовать именно ее и перекроет этот файл в каталоге сервера RootDirectory. Поскольку до сих пор не решено, является ли это желательной возможностью, то может быть разумным устранить зависимость от такого поведения в интересах будущей защиты. В любом случае файловые системы рабочих станций являются весьма уязвимыми при неправильном поведении пользователя.

108

По причине ограничения объема книги тема именованных курсоров затрагивается лишь слегка. Для работы с ними API предоставляет группу функций isc_dsql_*. Синтаксис оператора DECLARE CURSOR, полностью реализованный в ESQL, доступен в некоторых средах программирования DSQL. Описание использования именованных курсоров в модулях PSQL см. в главах 29 и 30.

109

Инструмент IBAnalyst (см. www.ibase.ru) выдаст все возможные предупреждения и рекомендации по поводу состояния транзакций на сервере. - Прим. науч. ред.

110

Выполнение backup никак не влияет на Transaction Inventory Page, a sweep может продвинуть вперед OIT, но не более того. - Прим. науч. ред.

111

В версии 1.5 возможна передача оператора DDL в строке EXECUTE STATEMENT. Делайте это только в особых случаях.

112

Только в отношении работы конкретного запроса SQL, выполненного из клиентского приложения, в "недрах" которого произошла ошибка. Работа, выполненная ранее другими запросами SQL в этой же транзакции, будет сохранена (если транзакция завершится по commit). - Прим. науч. ред.

113

Начиная с версии 1.5. существует возможность объединять несколько событий в одном триггере. Подробности см. в главе 31.

114

В версии 1.5 LEAVE заменяет недокументированный оператор BREAK, который был частично реализован в версии 1.0.x. Не используйте BREAK.

115

Эта процедура является очень скромным примером программирования в PSQL. В SQL существует лучший способ проверить существование строк, чем их подсчет. В главе 32 мы снова будем обсуждать эту процедуру, выполнив некоторые изменения в ней, чтобы показать это. Если вы посмотрите исходные коды процедуры в базе данных, вы также заметите, что операторы SUSPEND и EXIT щедро разбросаны в разных местах, где они не нужны. Операторы SUSPEND и EXIT имеют идентичное использование в выполняемой процедуре. При этом в процедурах выбора оператор SUSPEND применяется особо. Для ясности и эффективности документирования предпочтительно исключить использование SUSPEND в качестве синонима EXIT.

На этом сайте Вы можете читать книги онлайн бесплатно русская версия Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - Хелен Борри.
Книги, аналогичгные Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - Хелен Борри

Оставить комментарий