- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - Хелен Борри
Шрифт:
Интервал:
Закладка:
ALTER INDEX имя-индекса INACTIVE;
Когда большая пакетная операция закончится, реактивируйте и пересоздайте индексы:
ALTER INDEX имя-индекса ACTIVE;
Разбиение больших пакетовК сожалению, вы не можете отключить индексы, поддерживающие первичные и внешние ключи, без удаления соответствующих ограничений. Часто бывает нереальным удаление таких ограничений по причине цепных зависимостей. По этой и другим причинам рекомендуется разумное разделение задачи для компенсации ухудшения сбалансированности индекса и генерации необоснованно большого количества новых страниц базы данных.
При помещении в базу данных большого количества данных в пакете предпочтительным является разбиение их на группы и подтверждение работы приблизительно через каждые 5000-10 000 строк. Фактический размер оптимального разбиения будет меняться в зависимости от размера строки и размера страниц базы данных. Оптимальные группы могут быть меньше или больше указанного диапазона.
! ! !
СОВЕТ. Когда вам нужно разделять огромные пакеты, часто хранимые процедуры являются способом это сделать. Вы можете использовать локальные переменные-счетчики, сообщения о событиях и возвращать значения для сохранения вызова процедуры с целью синхронизации с вызовами клиента.
. ! .
Операции DML и события изменения состояния
Firebird включает некоторые особенности, которые могут быть использованы при проектировании базы данных для реагирования на операции DML, которые изменяют состояние данных, - а именно выполнение операторов INSERT, UPDATE и DELETE.
Предложения действия ссылочной целостности
Триггеры ссылочной целостности являются модулями компилированного кода, создаваемыми ядром сервера, когда вы объявляете ограничение ссылочной целостности для ваших таблиц. Включив предложения действия ON UPDATE и ON DELETE В объявление ограничения FOREIGN KEY, вы можете задать одно из группы действий, которое будет выполняться при наступлении соответствующего события DML. Подробности см. в главе 17.
Пользовательские триггеры
В пользовательских триггерах (тех, которые вы пишете сами, используя язык PSQL) у вас есть возможность точно задать, что происходит, когда сервер получает запрос на добавление, изменение или удаление строк таблицы. Пользовательские триггеры
могут применяться не только для изменения и удаления, но также и для добавления.
Триггеры могут включать обработку исключений, обратные связи и (для Firebird 1.5) пользовательские планы запросов.
Фазы событий DMLСинтаксис триггера разделяет пользовательские действия DML на две фазы: первая
фаза появляется до (BEFORE) события, а вторая после (AFTER) события.
* Фаза BEFORE дает возможность управлять преобразованием значений, которые являются входными в операторе DML, и определять значения по умолчанию гораздо более гибкими способами, чем это позволено в стандартном SQL-ограничении DEFAULT. Фаза BEFORE завершается перед тем, как начинают проверяться любые ограничения столбца, таблицы или ограничения целостности.
* В фазе AFTER ответные действия могут быть выполнены над другими таблицами. Обычно такие действия включают добавления, изменения или удаления данных других таблиц с использованием переменных NEW и OLD для обеспечения контекста текущей строки и операции. Фаза AFTER начинается после применения всех ограничений собственной таблицы. Триггеры AFTER не могут изменять значения в текущей строке собственной таблицы.
Табл. 20.1 описывает шесть фаз/событий пользовательских триггеров.
Таблица 20.1. Шесть фаз/событий пользовательских триггеров
Добавление
Изменение
Удаление
BEFORE INSERT
BEFORE UPDATE
BEFORE DELETE
AFTER INSERT
AFTER UPDATE
AFTER DELETE
Контекстные переменные NEW и OLDСервер делает доступными для триггеров два набора контекстных переменных. Один состоит из всех значений полей текущей строки, какими они были перед последним помещением этой строки в базу данных. Идентификаторы этого набора состоят из слова "OLD.", за которым следует идентификатор столбца. Аналогичным образом все новые значения имеют префикс "NEW." перед каждым идентификатором столбца. Разумеется, "OLD." не имеет смысла в триггерах добавления, a "NEW." бессмысленно использовать в триггерах удаления.
Триггеры многих действийВ Firebird 1.5 и выше вы можете писать триггеры с условной логикой для всех событий (добавление, изменение и удаление) для одной из фаз- BEFORE или AFTER - в одном модуле триггера. Это долгожданное улучшение, которое уменьшает кодирование триггеров на две трети.
Несколько триггеров на событиеДругой полезной возможностью является использование нескольких триггеров для каждой комбинации фаза/событие. Синтаксис CREATE TRIGGER включает ключевое слово POSITION, принимающее целый аргумент, который может быть использован для установки начинающегося с нуля порядка, в котором будут выполняться триггеры для одной фазы.
Подробные инструкции, синтаксис и языковые расширения для создания триггеров см. в главе 31.
Пора дальшеDML проявляет свою реальную мощь в возможности использовать выражения при поиске хранимых данных и преобразовании абстрактных данных в выходные, которые имеют смысл для конечного пользователя как информация. В следующей главе рассматривается логика использования выражений SQL вместе с внутренними и внешними функциями, которые вы можете использовать для создания простых или сложных алгоритмов для выполнения необходимых вам преобразований.
ГЛАВА 21. Выражения и предикаты.
В алгебре выражение типа а + b = с может иметь решение "истина" или "ложь" при подстановке значений в a, b и с. Альтернативный вариант - если задано два значения из a, b, c, мы можем вычислить отсутствующее значение. Это и является выражением SQL - формула подстановки.
Выражения SQL предоставляют формальные компактные методы для вычисления, преобразования и сравнения значений. В этой главе мы подробно рассмотрим выражения в SQL Firebird.
В конце этой главы приведено много информации по внутренним функциям SQL, доступным в Firebird для создания выражений, а также по большинству общих внешних функций.
Выражения
Хранение данных в простом, наиболее абстрактном виде - вот что делают базы данных. Язык поиска - в случае Firebird это обычно SQL - вместе с ядром сервера базы данных предоставляют целый арсенал готовых формул, в которые во время выполнения можно подставлять фактические данные для преобразования фрагментов абстрактных данных в информацию, имеющую смысл для человека.
Для простого примера возьмем таблицу MEMBERSHIP, которая имеет столбцы FIRST_NAME, LAST_NAME и DATE_OF_BIRTH. Для получения списка, содержащего полное имя и дату рождения, мы можем использовать оператор, содержащий выражения для преобразования хранимых данных:
SELECT
FIRST_NAME ||' '|| LAST_NAME AS FULL_NAME,
EXTRACT (MONTH FROM DATE_OF_BIRTH) ||'/'|| EXTRACT (DAY FROM DATE_0F_BIRTH)
AS BIRTHDAY
FROM MEMBERSHIP
WHERE FIRST_NAME IS NOT NULL AND LAST_NAME IS NOT NULL
ORDER BY 2;
Во время отправления запроса на сервер мы не знаем, какие значения хранятся в базе данных. Однако мы знаем, на что они должны быть похожи (семантика их значений и типы данных), для нас этого достаточно, чтобы сконструировать выражения для поиска списка в том виде, который будет для нас иметь смысл.
В этом одном операторе мы используем три вида выражений SQL.
* Для первого поля FULL NAME используется оператор конкатенации (в SQL два символа вертикальной черты 11) для создания выражения, которое объединяет два поля базы данных, разделенные пробелами в одно.
* Для второго поля BIRTHDAY используется функция для выделения сначала месяца, а затем дня месяца из поля даты. В том же выражении опять используется оператор конкатенации для объединения вместе выделенных чисел в качестве даты рождения. День отделяется от месяца наклонной чертой.
* В качестве условия поиска предложение WHERE использует другой вид выражения- логический предикат - для проверки подходящих строк в таблице. Строки, которые не удовлетворяют этой проверке, не помещаются в выходной набор.
В этом примере выражения были использованы:
* для преобразования найденных данных в выходные столбцы;
* для задания условий поиска в предложении WHERE оператора SELECT. Тот же подход может быть использован для условий поиска операторов UPDATE и DELETE.
Другие контексты, где могут использоваться выражения:
* для задания условий проверки данных в ограничениях CHECK;
* для определения вычисляемых (COMPUTED BY) столбцов в операторах CREATE TABLE и ALTER TABLE;
* для преобразования или создания входных данных в процессе их сохранения в таблице при использовании операторов INSERT или UPDATE;
* для упорядочения или группирования выходных наборов;

