Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Тоу Д. -> "Настройка SQL. Для профессионалов" -> 100

Настройка SQL. Для профессионалов - Тоу Д.

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 94 95 96 97 98 99 < 100 > 101 102 103 104 105 106 .. 161 >> Следующая

202

7. Диаграммное изображение и настройка сложных SQL-запросов

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

Некоторые сложные запросы выходят за пределы любых форм, где используются подзапросы, представления или операции над множествами, например UNION и UNION ALL, диаграммное изображение которых я описывал. Обычно такие сложные запросы полностью функциональны и распространены, поэтому вам потребуется способ создавать для них диаграммы и оптимизировать, для чего нужно расширить предыдущие методы для простых запросов.

Необычные диаграммы соединений

Если в вашем запросе содержатся только простые таблицы (не представления), нет подзапросов и операций над множествами, таких, как UNION, всегда можно создать определенную диаграмму запроса, применив методы из главы 5. Ho иногда диаграмма обладает необычными характеристиками, которые не подходят ни к одному шаблону древовидных соединений, которые я описывал ранее. Я по очереди опишу такие отклонения и объясню, как справиться с каждым из них.

Для иллюстрации необычных ситуаций я буду приводить частичные диаграммы запросов, в которых те части диаграммы, которые не существенны для обсуждаемого вопроса, будут закрыты серыми облаками. Это привлечет внимание к наиболее важной части запроса и сделает пример более обобщенным. В качестве еще одного соглашения я буду рисовать связи с частями скелета соединения, скрытыми за облаками, серым цветом, если они не существенны для текущего обсуждения. Количество серых связей и даже их существование не имеют значения в этих примерах, они просто иллюстрируют потенциальное существование дополнительных соединений в реальных случаях. Иногда к скрытым частям скелета запроса будут вести связи, окрашенные черным. Существование черных связей важно для обсуждения, но скрытая часть скелета запроса — нет.

Графы циклических соединений

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

ПРИМЕЧАНИЕ -----------------------------------------------------------

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

203

Случай 1. Две главные таблицы с отношением «один к одному» совместно используют одну и ту же детальную таблицу

На рис. 7.1 показан первый случай, когда единственный внешний ключ соединяется с первичными ключами двух различных главных таблиц.

Рис. 7.1. Первый случай циклических диаграмм запросов

SQL-код для этого случая может выглядеть следующим образом:

SELECT ...

FROM ...Tl. ...72. ... ТЗ. ...

WHERE ... Tl.FKeyl = Т2.РКеу2 AND Tl.FKeyI = ТЗ.РКеуЗ AND Т2.РКеу2 = ТЗ.РКеуЗ ...

Здесь я назвал единственный внешний ключ таблицы Tl, который указывает на обе таблицы, FKeyl, а первичные ключи Т2 и ТЗ — РКеу2 и РКеуЗ, соответственно. Если все эти три соединения явно прописаны в SQL, то циклические связи очевидны, но обратите внимание, что одна из этих связей могла бы быть пропущена в запросе и отсутствующее условие соединения подразумевалось бы по условию транзитивности (если a = b и b = с, то а = с). Если бы одно из соединений было пропущено, то для того же запроса вы бы создали диаграмму в одной из трех форм, показанных на рис. 7.2.

Рис. 7.2. Тот же циклический запрос, на котором одно из условий соединения пропущено

Обратите внимание, что в вариантах этого запроса А и В догадаться о существовании отсутствующей стрелки можно на основе того факта, что у связи между Т2 и ТЗ острие стрелки есть на обоих концах, а стрелка на обоих концах подразумевает соединение «один к одному». Вариант С, с другой стороны, выглядит как самое простое дерево соединения, и вы бы ни за что не догадались, что в нем присутствует циклическое соединение, если бы не заметили, что Tl использует один и тот же внешний ключ для соединения с Т2 и с ТЗ.
204

7. Диаграммное изображение и настройка сложных SQL-запросов

Когда у вас есть таблицы с отношениями «один к одному», то циклические соединения, как на рис. 7.1, встречаются часто. Это не функциональная проблема, хотя дальше я перечислю вопросы, которые следует рассмотреть, когда встречается соединение такого типа. Вместо того чтобы рассматривать их как проблему, эти соединения можно считать удачной возможностью для оптимизации запроса. Если вы уже обработали Tl, то полезно иметь выбор — обращаться далее к Т2 или ТЗ, так как у какой-то из них может быть лучший коэффициент фильтрации, или же она может предоставить доступ к хорошим фильтрам ниже по дереву. Если вы в порядке соединения обрабатываете Т2 или ТЗ до Tl, то возможность провести соединение вида «один к одному» с противоположной таблицей (от Т2 к ТЗ или от ТЗ к Т2) также полезна. Это позволяет вам использовать любой фильтр, который может быть у второй таблицы, до соединения с Tl. Без горизонтальной связи вы могли бы соединять Т2 с ТЗ и наоборот только через Tl — вероятно, с более высокой стоимостью.
Предыдущая << 1 .. 94 95 96 97 98 99 < 100 > 101 102 103 104 105 106 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100