Введение в системы БД (542480), страница 220
Текст из файла (страница 220)
Однако, к сожалению, создатели языка Я Н. пошли по пути объединения резулыпатав этих логически отдельных запросов в одну результирующую таблицу!'3 В рассматриваемом примере таблица результатов могла бы выглядеть так. Этот результат действительно можно считать таблицей (во всяком случае, Я Н: таблицей), но вряд ли каким-то атнаигением. Обратите внимание, что строки по поставщикам (они содержат )чу(.).-значения в столбце Р()) и строки по деталям (они содержат ЗЗ Эта отдельная таблица могла бы рассматриваться как "внешнее объединение" (следует отметить, крайне странная форма внешнега абьединснияб результатов.
Должна быть ясно (см главу l8), чта даже в ее нашчснее странной форме операция "внешнего объединения" нг является приемлемой реляционной операцией. 838 Часть )г. дополнительные аспекты Х1)).).-значения в столбце Я$) имеют совершенно различные интерпретации.
Значения ТОТОТУ различаются в зависимости от того, относятся ли они к строкам по поставщикам или к строкам по деталям. Так каким же может быть предикат для такого "отношения"? Отметим, что ЬПЛЛ.-значения в этом результате представляют еще и некоторый другой вид "отсутствующей информации". Они, определенно„не означают, что "значение неизвестно" или "значение не используется", но что конкретно онн означают, совершенно неясно.
Замечание. В языке БО). предоставляется возможность отличить эти новые МЛ.(.- значения от других видов, но детали такой процедуры весьма утомительны. Пользователь вынужден рассматривать выполнение операции с таблицей как последовательность операций, обрабатывающих по одной строке. Здесь мы опускаем подробности, однако некоторое представление можно получить, рассмотрев следующий пример (он показывает, что приведенный выше пример с опцией 6ЮОР1И6 БЕТЕ на практике может выглядеть несколько иначе). НЕВЕСТ САЯЕ 6КООР1И6 (Б$) — см. приложение А по САБЕ ИНЕИ 1 ТНЕИ '?????' ЕЬЯЕ Я$ АЯ Я$, САЯЕ ОКОУР1И6 (Р$) — см.
приложение А по САБЕ ИНЕИ 1 ТНЕИ '!)))!!' НАБЕ Р$ АЯ Р$, ЯОМ(ОТУ) АЯ ТОТОТУ ГНОМ ЯР 6КООР ВУ 6КООР1И6 БЕТЕ ( (Я$), (Р$) ) Возвратимся к предложению ОКООР ВУ. Две другие опции предложения 6КООР ВУ, КОЕ)ЛР и СОВЕ, по сути являются сокрашениями для определенных сочетаний в предло- жении 6ЮОР1И6 БЕТЕ. Сначала рассмотрим опцию КОЬВВР. НЕВЕСТ Б$, Р$, ЯОМ(ОТУ) АЯ ТОТОТУ ГНОМ ЯР 6КООР ВУ КОЬВОР ( Б$, Р$ ) ! Предложение 6КООР ВХ в данном случае будет равносильно следующему. 6ЮОР ВУ 6КООР1И6 ЯЕТЯ ( (Я$,Р$), (Я$), () ) Другими словами, этот запрос объединяет формулировки запросов 4, 2 и !.
Результат его выполнения выглядит так. Глава 21. Поддержка принятия решений 839 Термин КОБУР (накопить) принят из-за того, что в данном примере количества "накапливаются" для каждого поставщика (т.е. накапливаются "по размерности постав- шика"; см. приведенный ниже подраздел "Многомерные базы данных"). В общем, предложение ОКООР ВХ КОЬБОР (А,В, ... Е), или, проще говоря, 'накопить по размерности А", означает "сгруппировать по всем следующим сочетаниям".
(А,В, ...,Е) (А,В, ...) (А,В) (А) () ° Обратите внимание, что в общем случае выполняется много отдельных "накоплений по размерности А" (это зависит от того, как перечислены в списке КОЬЕОР другие столбцы). Также отметим, что предложения ОКОВЕ ВХ КОЬЕОР (А,В) и ОЮОР ВХ КОЬ1ЛР (В,А) имеют различные значения, т.е. предложение 6ЮОР ВХ КОЬЬОР (А, В) не симметрично относительно А и В. А теперь рассмотрим опцию СОВЕ.
В качестве примера возьмем следующее. ЯЕЬЕСТ Я(), Р(), ЯОИ(ОТХ) АЯ ТОТОТХ ГЮИ ЯР 6ЮОР ВХ СОВЕ ( Я)), Р() ) Предложение ОКООР ВХ здесь будет логически эквивалентно предложению, приведенному ниже. ОКООР ВХ 6КООРХИ6 ЯЕТЯ ( (Я((,Р()), (Я()), (Р()), () ) Другими словами, этот запрос объединяет формулировки всех четырех запросов: 4, 3, 2 и ). Результат его выполнения выглядит так. Бесполезный термин СОВЕ (куб) был принят из-за того, что в терминологии технологии ОЕАР, по крайней мере в многомерной, значения данных могут восприниматься как хранимые в ячейках многомерного массива или гиперкуба. В нашем слу- 840 Часть Р'.
Дополнительные аспекты чае значения данных — это количества; "куб" имеет лишь два измерения — измерение поставщиков и измерение деталей (такой "куб" лучше бы назвать плоскостью!); эти два измерения имеют неравные размеры (так что данный "куб" даже не является квадратом; скорее, это прямоугольник). Но как бы то ни было, предложение 6ЕООР ВУ СОВЕ (Е,В, ... 2) означает "сгруппировать по всем возможным подмножествам множества (А,В, ..., Е)". Любое предложение 6ЕООР ВУ может включать произвольные сочетания опций 6ЕООР166 ЯЕТЯ, ЕОЕЕОР и СОВЕ. Многокоординатные таблицы Продукты ОЕАР часто отображают результаты запросов не в виде ЯО(,-таблиц, а в виде многокоординатных таблиц или перекрестных таблиц (егозя гаЬо!айоп, или сокращенно — сгоззгаЬ).
Вновь рассмотрим запрос 4. (" Определить общее количество поставок по поставщикам и деталям"). Ниже представлены результаты его выполнения в виде многокоординатной таблицы. Отметим, кстати, что количества детали с номером 'Р1' для поставщиков с номерами 'Я3' и 'Я4' показаны (корректно) как нуль. В языке ЯО(., напротив, лля этих количеств мы бы получили Н()! !.-значения (см. главу !Е). В действительности таблица, которая выдается в языке ЯО!.
в ответ на запрос 4, не содержит строк для ('Я3', 'Р1') или ('Я4', 'Р1'), поэтому создать из нее многокоординатную таблицу — отнюдь непростая задача. Эта многокоординатная таблица, безусловно, предоставляет более компактный и наглядный способ представления результата выполнения запроса 4. Кроме того, она несколько похожа на реляционную таблицу. Обратите внимание, что количество столбцов в этой "табчице" зависит ат рванины» данных, а точнее, для каждого вида детали имеется один столбец, и поэтому структура многокоординатной таблицы и значение строк зависят от реальных данных. Следовательно, многокоординатная таблица — это не отношение, а отчет; точнее — отчет, который отформатирован, как простой массив. (Отношения имеют предикат, который можно вывести из предикатов отношений, производными которых они являются.
Однако "преднкат" лля многокоординатной таблицы (если сделать допущение, что таковой существует) не может быть производным от предикатов соответствующих отношений, поскольку, как мы убедились, многокоординатная таблица зависит от значений данных.) О многокоординатных таблицах, подобных показанной выше, часто говорят, что они имеют два нзиеренил; в данном случае это поставщики и детали. Измерения обрабатываются, как будто это независииые переменные, а "ячейки" на пересечениях содержат значения соответствующих эависииых переменных. Дальнейшие пояснения изложены в подразделе "Многомерные базы данных".
Ниже приведен другой пример многокоординатной таблицы, которая представляет собой результат примера с опцией СОВЕ. 841 Глава 21. Поддержка принятия решений В крайнем справа столбце содержатся итоги по строкам, т.е. итоги для указанных поставщиков по всем деталям. В нижней строке содержатся итоги по столбцам, т.е. итоги для указанных деталей по всем поставщикам. В крайней справа нижней ячейке содержатся общий итог, который предо~валяет итог по с~роке итогов по столбцам или итог по столбцу итогов по строкам. Многомерные базы данных До сих пор предполагалось, что ОЕАР-данные хранятся в обычной базе данных, использующей язык БО1 (не считая того, что пару раз мы все же касались терминологии и концепции "многомерных баз данных"), Фактически мы неявно описывали так называемую систему КОЕАР (" реляционную ОЕАР").
Однако многие считают, что использование системы МОЕАР (" многомерной ОЕАР'*) — более перспективный путь. В атом подразделе принципы построения систем МОЕАР будут рассмотрены подробнее. Система МОЕАР подразумевает ведение многомерных баз данных, в которых данные концептуально хранятся в ячейках многомерного массива. Замечание. Хотя и было сказано о "концептуальном*' хранении, в действительности физическая организация данных в МОЬАР очень похожа на их логическую организацию. Поддерживающая СУБД называется многомерной.
В качестве простого примера можно привести трехмерный массив, представляющий соответственно товары, заказчиков и периоды времени. Значение каждой отдельной ячейки может представлять общий объем указанного товара, проданного заказчику в указанный период времени. Как отмечалось выше, многокоординатные таблицы из предыдущего подраздела также могут считаться такими массивами. Если о совокупности данных имеется достаточно четкое представление, могут быть установлены и все существующие между данными связи.
Более того, "переменные'* такой совокупности (не в смысле обычных языков программирования), грубо говоря, могут быть разделены на зависимые и независимые. В предыдущем примере продукт, закаэчик и период времени можно считать независимыми переменными, а количество— единственной зависимой переменной. В общем случае независимые переменные — зто переменные, значения которых вместе определяют значения зависимых переменных (точно так, как, если воспользоваться реляционной терминологией, потенциачьный ключ является множеством столбцов, значения которых определяют значения остальных столбцов).
Следовательно, независимые переменные составляют размерность массива, с помощью которого организуются данные, а также образуют слону адресации для данного массива'4. Значения зависимых переменных, которые представляют реальные данные, сохраняются в ячейках массива. Ы Ячейки .массива адресуются символически, а нс числовыми индексалчи, колюрыс обычно ассоциируются с л~ассивалчи. 842 Часть )г. дополнительные аспекты Замечание. Различие между значениями независимых или "размерных" переменных и значениями зависимых или 'неразмерных" переменных иногда характеризуют как различие между размещением и содержанием.