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

 

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

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

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 103 104 105 106 107 108 < 109 > 110 111 112 113 114 115 .. 161 >> Следующая

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

221

Соединения вида «один к одному» со скрытыми фильтрами соединения в обоих направлениях

На рис. 7.19 показан редкий случай соединения вида «(ноль или один) к (нулю или одному)», которое фильтруется в обоих направлениях. Если соединения вида «один к одному» — это движение под гору в обоих направлениях, то эти соединения — спуск круто под гору в обоих направлениях. Если только данные не повреждены (например, в одной из таблиц какие-либо данные отсутствуют), то этот редкий случай, вероятно, подразумевает, что существует или должна существовать еще и третья таблица, представляющая расширенный набор этих перекрывающихся наборов. Если вы найдете или создадите такую таблицу, то те же аргументы, что и ранее, будут говорить в пользу комбинирования ее с одной или обеими таблицами поднаборов.

Рис. 7.19. Соединение вида «(ноль или один) к (нулю или одному)»

Соглашения для изображения соединений вида «один к одному»

Полезно иметь определенные договоренности о едином изображении диаграмм запросов. Такие соглашения помогают развивать интуицию, единообразно представляя ключевую информацию. Односторонние стрелки всегда указывают вниз. На рис. 7.20 показано два альтернативных варианта, хорошо подходящих для соединений вида «один к одному», лежащих под корневой детальной таблицей. В первом варианте особенно подчеркивается двухсторонняя стрелка, узлы на концах которой размещены на одном уровне. Во втором варианте подчеркивается обычное направление ссылок — вниз от корневой детальной таблицы. Любой из вариантов хорош, если вы помните, что соединения вида «один к одному» в каком-то смысле с обеих сторон указывают вниз.

Рис. 7.20. Диаграммное изображение соединений вида «один к одному», лежащих под корневой детальной таблицей

Для этого случая, когда обе таблицы, участвующие в соединении, находятся под корнем, помните, что если равноправные таблицы используют общий первич-
222

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

ный ключ, то связь сверху с Tl по закону транзитивности точно так же может относиться и к Т2, если только она не ведет к некоторому альтернативному уникальному ключу по Tl, который в Т2 не используется. Это неявный случай циклического соединения, показанный в варианте Б на рис. 7.2.

На рис. 7.21 показаны альтернативные диаграммы соединений вида «один к одному» двух корневых детальных таблиц (такие таблицы находятся сверху, и с ними нет соединений), когда хотя бы одно из направлений соединения характеризуется главным коэффициентом соединения, меньшим 1,0. И снова вы можете подчеркнуть характер соединения либо горизонтальным расположением, либо указать, какая из таблиц больше (и какое из направлений соединения «круче под гору»), поместив узел с большим главным коэффициентом соединения выше. Узел с большим главным коэффициентом соединения представляет таблицу, большая часть строк которой участвует в этом соединении вида «(ноль или один) к (нулю или одному)».

Рис. 7.21. Альтернативные способы диаграммного изображения для корневых детальных таблиц с отношением «(ноль или один) к (нулю или одному)»

Рисунок 7.22 иллюстрирует случай, схожий с рис. 7.21, но с узлами с точным соотношением «один к одному», обозначающими таблицы, которые всегда соединяются успешно. И снова вы можете подчеркнуть эквивалентность направлений соединения, расположив узлы рядом по горизонтали. Или же выберите направление, которое позволит изобразить дерево более сбалансированным, чтобы оно лучше помещалось на страницу, поместив узел с более длинными ветвями выше. В этом случае выбор значит мало, если вы помните, что оба направления ведут «под гору», независимо от того, как расположены на диаграмме.

Т5 Тб Tl ТЗ Т4

К

T-

А

Т8 T9

Т2

Л\

Tl ТЗ Т4

Л

Т5 Тб Т7 Т8 T9

Рис. 7.22. Альтернативные способы диаграммного изображения корневых детальных таблиц с точным отношением «один к одному»

Внешние соединения

Практически всегда смысл и назначение внешнего соединения — предотвращение потери нужной информации из таблицы, находящейся в начале соедине-
Необычные диаграммы соединений

223

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

Фильтрованные внешние соединения

Рассмотрим рис. 7.23, где внешнее соединение производится с таблицей с фильтрующим условием. Во внешнем случае, то есть случае, когда для строки Tl нет подходящей строки из Т2, база данных назначает в результирующей строке каждому столбцу Т2 значение null. Таким образом, кроме Т2. Некоторый_столбец IS NULL, практически любое фильтрующее условие для Т2 приведет к исключению результирующей строки, которая создается во внешнем случае внешнего соединения.

Рис. 7.23. Внешнее соединение с фильтрованным узлом

Даже такие условия, какT2.Unpaid_Flад != 'Y' или NOTТ2.Unpaid_Flад = 'Y', которые, как вы ожидаете, должны быть истинными во внешнем случае, на самом деле истинными не являются.
Предыдущая << 1 .. 103 104 105 106 107 108 < 109 > 110 111 112 113 114 115 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100