Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Тут можно читать онлайн Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство БХВ-Петербург, год 2006. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
  • Автор:
  • Жанр:
  • Издательство:
    БХВ-Петербург
  • Год:
    2006
  • Город:
    Санкт-Петербург
  • ISBN:
    5-94157-609-9
  • Рейтинг:
    4/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

Рассмотрены вопросы, необходимые разработчику для создания клиент-серверных приложений с использованием СУБД Firebird, явившейся развитием СУБД Borland Interbase 6. Содержится обзор концепций и моделей архитектуры клиент/сервер, а также практические рекомендации по работе с клиентскими библиотеками Firebird. Детально описаны особенности типов данных SQL, язык манипулирования данными (Data Manipulation Language, DML), а также синтаксис и операторы языка определения данных ( Data Definition Language, DDL). Большое внимание уделено описанию транзакций и приведены советы по их использованию при разработке приложений. Описано программирование на стороне клиента и сервера написание триггеров и хранимых процедур, создание и использование событий базы данных, обработка ошибок в коде на сервере и многое другое. Материал сопровождается многочисленными примерами, советами и практическими рекомендациями.

Для разработчиков баз данных

Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - читать онлайн бесплатно полную версию (весь текст целиком)

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

Интервал:

Закладка:

Сделать

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

SELECT

D1.XD,

D1.PARENTID,

D1.DESCRIPTION AS DEPARTMENT,

D2.DESCRIPTION AS PARENT_DEPT

FROM DEPARTMENT D1

LEFT JOIN DEPARTMENT D2

/* левое соединение обращается к корню дерева, ID 100 */

ON Dl.PARENTID = D2.ID;

На рис. 22.6 проиллюстрировано, как выбираются записи потомков в реентерабельном обращении к таблице DEPARTMENT.

Рис 226 Внутренние курсоры для простого реентерабельного соединения Простой - фото 37

Рис. 22.6. Внутренние курсоры для простого реентерабельного соединения Простой двухуровневый результат показан на рис. 22.7.

Результат этого запроса очень простой - одноуровневая денормализация. Операции получения древовидного результата для таблиц такого вида часто являются рекурсивными, они используют хранимые процедуры для реализации и управления рекурсией [79] В "SQL for Smarties" Joe Celco предлагает интересные решения для хранения и поддержки древовидных структур в реляционных базах данных (Morgan Kaufmann, 1999). .

Рис 227 Результат простого реентерабельного соединения Подзапросы - фото 38

Рис. 22.7. Результат простого реентерабельного соединения

Подзапросы

Подзапрос - это специальный вид выражения, которое фактически является запросом SELECT к другой таблице, включенным в спецификацию основного запроса. Выражение включенного запроса называют подзапросом, вложенным запросом, встроенным запросом, а иногда (ошибочно) Sub-SELECT.

В Firebird версии 1.5 и выше выражения подзапроса используются тремя способами:

* для получения одной строки или многострочного входного набора для операции INSERT (его синтаксис описан в разд. "Оператор INSERT" главы 20);

* для задания в процессе выполнения выходного столбца только для чтения для запроса SELECT;

* для получения значений или условий для предикатов поиска.

В версиях Firebird после 1.5 появляется четвертый вариант подзапросов- виртуальная таблица, который кратко обсуждается в главе 24.

Задание столбца при использовании подзапроса

Выходной столбец времени выполнения может быть задан запросом одного столбца из другой таблицы. Выходному столбцу должен быть назначен новый идентификатор, который для завершенности синтаксиса может быть отмечен необязательным ключевым словом AS (см. разд. "Наследуемые поля и алиасы столбцов"главы 21).

Вложенный запрос всегда должен иметь условие в предложении WHERE для ограничения вывода одним столбцом из одной строки (называется скалярным запросом); иначе вы увидите подобное сообщение об ошибке: "Multiple rows in singleton select" (Запрос, который должен вернуть одну строку, вернул множество строк).

Следующий запрос использует подзапрос для получения выходного столбца.

SELECT

LAST_NAME,

FIRST_NAME,

ADDRESS1,

ADDRESS2,

POSTCODE,

(SELECT START_TIME FROM ROUTES

WHERE POSTCODE = '2261' AND DOW = 'MONDAY') AS START_TIME

FROM MEMBERSHIP

WHERE POSTCODE = '2261';

Этот подзапрос указывает одно значение POSTCODE для получения значения поля START_TIME транспортного маршрута (таблица ROUTES). Столбцы POSTCODE в главном запросе и в подзапросе могут быть заменены параметрами. Чтобы сделать запрос более общим и более полезным, мы можем использовать коррелированные подзапросы.

Коррелированные подзапросы

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

В следующем примере связываемые столбцы в главном запросе и в подзапросе являются коррелированными; здесь использованы алиасы таблиц для устранения какой- либо неясности:

SELECT

M.LAST_NAME,

M.FIRST_NAME,

M.ADDRESS1,

M.ADDRESS2,

M.POSTCODE,

(SELECT R.START_TIME FROM ROUTES R

WHERE R.POSTCODE = M.POSTCODE AND M.DOW = 'MONDAY') AS START_TIME

FROM MEMBERSHIP M

WHERE . . .

Этот запрос возвращает одну строку для каждого выбранного элемента, независимо от того, существует ли соответствие между полями POSTCODE обеих таблиц. Если нет соответствия, то поле START_TIME будет иметь значение NULL.

Подзапрос или соединение?

Запрос из предыдущего примера может быть составлен с использованием левого соединения вместо подзапроса:

SELECT

M.LAST_NAME,

M.FIRST_NAME,

M.ADDRESS1,

M.ADDRESS2,

M.POSTCODE,

R. START_TIME

FROM MEMBERSHIP M LEFT JOIN ROUTES R

ON R.POSTCODE = M.POSTCODE

WHERE M.DOW = 'MONDAY';

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

Разница в стоимости может стать значительной, если коррелированный запрос будет использован вместо внутреннего соединения:

SELECT

M.LAST_NAME,

M.FIRST_NAME, M.ADDRESS1,

M.ADDRESS2,

M.POSTCODE,

R.START _Т1МЕ

FROM MEMBERSHIP M

JOIN ROUTES R

ON R.POSTCODE = M.POSTCODE

WHERE M.DOW = 'MONDAY';

Внутреннее соединение не требует просмотра каждой строки исследуемого потока, потому что оно отбрасывает любую строку исследуемого потока (ROUTES), которая не соответствует условию поиска. В противоположность этому контекст коррелированного подзапроса меняется с каждой строкой, и ни при каких условиях не исключает из процесса сканирования несовпадающее поле POSTCODE. Следовательно, коррелированный подзапрос должен быть выполнен для каждой строки в наборе.

Если выходной набор данных потенциально большой, посмотрите, насколько важна необходимость выполнить включающий поиск. Хорошо продуманный коррелированный запрос полезен для малых наборов. Не существует никаких численных оценок для выбора одного или другого. Как обычно, тестирование в реальных условиях - единственно надежный способ решить, что лучше работает для ваших конкретных потребностей.

Когда не надо использовать подзапросы

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

Поиск с использованием подзапроса

Использование существующих предикатов в подзапросах- особенно предиката EXISTS О- обсуждалось в главе 21. Подзапросы могут также быть использованы другими способами в предикатах условий поиска в предложениях WHERE и группирования.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Хелен Борри читать все книги автора по порядку

Хелен Борри - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ отзывы


Отзывы читателей о книге Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ, автор: Хелен Борри. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x