Введение в системы БД (542480), страница 56
Текст из файла (страница 56)
Выбрать номера деталей, поставляемых поставщиком в Лондоне. Выбрать номера деталей, поставляемых поставщиком в Лондоне для проекта в Лондоне. Найти все пары названий городов, для которых поставщик из первого города по- ставляет детали для проекта во втором городе. Выбрать номера деталей, поставляемых для всех проектов поставщиком из того же города, в котором находи~ся проект. Найти все номера проектов, детали для которых поставляются по крайней мере одним поставщиком не из того же города. Выбрать все пары номеров деталей, в которых обе детали поставляются одним и тем же поставщиком. 6.31.
6.32. 6.33. 6.34. 6.35. 6.36. 6.37. 6.38. 6.39. 6.40. 6.4!. 6.42. 6.43. 6.44. 6.45. 6.46. 6.47. 6.48. 6.49. 6.50. Выбрать названия проектов, детали для которых поставляются поставщиком с но- мером '51'. Определить цвета деталей, поставляемых поставщиком с номером ' Я1'. Установить номера деталей, поставляемых для какого-либо проекта в Лондоне. Выбрать номера проектов, в которых используется по крайней мере одна деталь, имеющаяся у поставщика с номером 'Б1'. Определить номера поставщиков по крайней мере одной детали, поставляемой по крайней мере одним поставщиком, который поставляет по крайней мере одну красную деталь.
Выбрать номера поставщиков со статусом, меньшим, чем статус поставщика с номером 'Я1'. Определить номера проектов, находящихся в городе, который указан первым в ал- фавитном списке городов. Выбрать номера проектов, для которых среднее количество поставляемых деталей с номером 'Р1' больше, чем наибольшее количество любых деталей, поставляемых для проекта с номером 'Л '. Определить номера поставщиков детали с номером 'Р1' для некоторого проекта в количестве, большем среднего количества деталей с номером 'Р1' в поставках для этого проекта.
Найти номера проектов, для которых поставщиками из Лондона не поставляются красные детали. Определить номера проектов, детали для которых полностью поставляются по- ставщиком с номером 'Б1'. Определить номера деталей, поставляемых для лондонских проектов. Установить номера поставщиков одной и той же детали для всех проектов. Выбрать номера проектов, в состав которых входят как минимум все типы деталей, поставляемые поставщиком с номером '51'.
Установить все города, в которых находится по крайней мере один поставщик, одна деталь или один проект. Определить номера деталей, поставляемых либо лондонским поставщиком, либо для лондонского проекта. Найти все пары типа "номер поставщика — номер детали", причем только такие, в которых данный поставщик не поставляет данную деталь. Выбрать все пары номеров поставщиков (скажем, Ях и Яу), причем такие, что оба эти поставщика поставляют в точности одно и то же множество деталей. (Выражаю благодарность г-ну Фатма Мили (Раппа Мрй) из Оклендского университета (Рочестер, Мичиган), предложившему эту задачу.) Подготовить в виде бинарного отношения "сгруппированную" версию всех поставок, в которой для каждой лары "номер поставщика — номер детали" показан соответствующий номер проекта и количество поставленных деталей.
Получить "разгруппированную" версию отношения из предыдущего упражнения. гзо Часть 11. Реляционная модель Список литературы 6.3. гз1 Глава 6. Реляционная алгебра 6.1. 6.2. Сог!й Е.Е. Ке!айопа! Сошр!екепекк ог" Рака Ваке БцЫап8цайек 1п Капда)! Е Кцкбп (ей) й Раса Ваке Букгегпк, Соцгап! Сошрц!ег Бс!епсе Бушрок!а Бебек 6.— Епй!ец ооб С1!Йк, Ь13.: Ргепбсе-На!1, 1972. В этой статье Кодд впервые дает формальное определение операторов исходной версии реляционной алгебры (определения операторов приводились также в [5.5], однако они были неполными и менее формальными).
Эта статья обладает одним недостатком. В ней "для удобства объяснения" предполагается, что атрибуты отношений упорядочены слева направо и, следовательно, могут быть идентифицированы по своему порядковому номеру. (Тем не менее Кодд говорит, что на практике лучше использовать имена, а не порядковые номера. То же самое он говорил в [5.1].) В этой статье ничего не сказано об операторе КЕИАИЕ и не рассмотрен вопрос о наследовании типа результата. Возможно, вследствие этих упущений те же критические замечания применимы сегодня ко многим рассуждениям в литературе по реляционной алгебре, к БО(.-продуктам и (в меньшей степени) к стандартам языка БО(.. Другие комментарии к этой статье можно найти в главе 7, в частности в разделе 7.4. Замечание.
В [3.3] описана так называемая алгебра А с "сокращенным набором инструкций'*, которая позволяет систематически определять более сложные операторы в виде определенной комбинации небольшого числа примитивных операторов.Фактически в [3.3] показано, что вся функциональность оригинальной алгебры Кодда может быть получена с помощью всего лишь двух примитивных операторов — гецоче и пог. Рагчеп Н, (итйш8 ак Апг]ген Мазеп). Абчепгцгек !и Ке1аг)оп1апг! д Ваге Сьй Ке!а!юла! ВагаЬаке 1в'г11!пйк 1985 — ! 989, — Кеайп8, Макал АгЫ]коп-%ек1еу, 1990, Это серия коротких статей, в которых в оригинальном, развлекательном и информативном стиле исследуются различные стороны реляционной модели и реляционных СУБД.
Ниже перечислены названия этих статей. 1. ТЬе )чаш!п8 ог Со!цшпк (Наименования столбцов) 2. !п Ргайе о( Мапза8е (О пользе супружества) 3. ТЬе Кеук о(гйе К!пйбогп (Ключи от королевства) 4. СЬгка!гу (Рьшарство) 5. А Сопкгап! Рг!епг! (Верный друг) 6. ТаЫе Рее аль ТаЫе Вши(Таблица Чертовка и Таблица Пустышка) 7. 1п!о йе ()п)спозчп (В неведомое) Вагзчеп Н. апг! Ваге Сьй 1п!о 1Ье Огеа! Р(ч!бе ц Рагкгеп Н. апд Раке СЭ. Ке)а!юла) Ра1аЬаке 1н'г!г!п8к 1989 — 1991.
— Кеайп8, Макал Адйкоп-%ек)еу, 1992. В данной статье анализируется оригинальный оператор деления, определенный Коддом в [6.1], а также обобщение этого оператора, сделанное Холлом (На!1), Хитчкоком (Н)гсЬсос)г) и Тоддом (Тодд)[6.10], которое в отличие от определенного Коддом оригинального оператора деления позволяет делить любые отношения на любые другие отношения.
(Оригинальный оператор деления Кодда был определен только для таких делимых и делителей, заголовок делителя которых является подмножеством заголовка делимого.) В этой статье описаны трудности, возни- каюшие при использовании данных операторов для пустых отношений, причем ни один из них не позволил решить проблему, которую предполагалось решить первоначально (т.е. ни один из них не смог стать аналогом квантора общности, как того хотелось бы). Для преодоления трудностей предложены переделанные версии операторов деления (цЯша11 О!чкЫе" и "Огеа! РЫЫе"). Замечание.
Как видно из синтаксиса языка ТщоНа! О, эти два оператора различны. В частности, оператор Огеаг Рп Ые представляет собой (к сожалению) не вполне совместимое сверху вниз расширение оператора Яша!1 РЫЫе. В данной статье также предлагается не называть переделанные операторы "делением" (см. упр. 6.5). Для дальнейших ссылок приведем определение оригинального оператора деления Кодла.
Пусть даны отношения А и В с заголовками (Х, У] и (У) соответственно. (Х и У могут быть составными.) Тогда результатом вычисления выражения А Р191ОЕВУ В будет отношение с заголовком (Х) и телом, состоящим из всех кортежей (Х:х), таких, что кортеж (Х: х, У:у) содержится в теле отношения А для всех кортежей (У:у), содержащихся в отношении В. Другими словами, результат состоит из тех значений атрибута Х из отношения А, для которых соответствующие значения атрибута У (в отношении А) содержат все значения атрибута У в отношении В.
6.4. С.). Раге. Оцога Оцейез (в трех частях) К Разе С.)., Рагчеп Н., апг! Мсбочегап Р. Ке(аг!опа! Ра1аЬазе %г1!!пйз 1994-1997. — Кеаб)пй, Макал Аг!б!зоп-%ез!еу, 1998. Квота-запрос — это запрос, в котором указывается желаемый предел для кардинаяьности результирующего отношения. Например, это может быть запрос "Найти три самые тяжелые детали". На языке ТагоНа! 0 его можно записать следующим образом. Р ОУОТА ( 3, ОЕЯС ИЕ1ОНТ ) Это выражение является сокращенной записью следующего оператора. ( ( ЕХТЕБО Р АВО СОНЕТ ( ( Р НЕНАМЕ ИЕТОНТ АЯ ИТ ) ГНЕВЕ ИТ > ИЕ1ОНТ ) АЯ (( НЕА91ЕН ) ИНКИ 8 йЕА91ЕН < 3 ) ( АВЬ ВОТ 8 НЕА91ЕН ) (Здесь имена ИТ н 4 НЕА91ЕН могут быть произвольными.) Если взять за основу наши обычные данные, то результат будет состоять из деталей с номерами 'Р2', 'РЗ' и 'Р6'.
Данная статья состоит из трех частей. В ней детально анализируются квота- запросы, а также предлагается несколько синтаксических сокращений как для записи этих запросов, так и для других целей. 6.5. Сагеу МЗ. апб Коззшапп Р. Оп Яау!пй 'ЕпоцЕЬ А!геаг!у' 1п ЯО(. К Ргос. 1997 1пк СопГ. Оп Мапайешепг ог Рага.
— Тосзоп, Аг!х., Мау, 1997. Еше одна работа, посвященная квота-запросам. В отличие от [6.4), здесь основное внимание уделяется вопросам реализации, а не моделирования. Запрос "Найти три самые тяжелые детали" в контексте этой статьи будет выглядеть так. НЕВЕСТ * РВОМ Р ОНОЕН ВУ ИЕ1ОНТ ОЕЯС ВТОР АРТЕН 3; Часть И. Реляционная я!адель 6.6. 6.7. 6.8. 6.9. Проблема подобного подхода состоит в том, что операция БТОР АРТЕК применяется к результату выполнения оператора ОЕРЕЕ ВТ, который [как видно из раздела "Свойства отношений" главы 5) является не отношением, а массивом или списком. Следовательно, окончательный результат, по-видимому, также не будет отношением, а значит, будет нарушено свойство замкнутости. Зтот вопрос в данной статье не обсуждается.
Разумеется, полученный результат можно снова преобразовать в отношение, но тогда мы столкнемся с еше одной проблемой, поскольку результат выполнения оператора ЯТОР АРТЕК в общем случае непредсказуем. Например, если взять за основу наши обычные данные и в предыдущем БО[.-запросе заменить строку БТОР АРТЕК 3 строкой ЯТОР АРТЕК 2, то результат выполнения этого запроса будет неопределенным, Оператор БТОР АРТЕК был реализован в исследовательском прототипе компании ! ВМ и, таким образом, может получить распространение в продуктах! ВМ, а затем попасть в стандарт языка БОЬ (мы надеемся, что не раньше, чем будут решены указанные выше проблемы). Оо!басе!п К.С. апб Бсгпаб А.3. ТЬе МасА!МБ Васа Мапайепсеш Бумеш П Ргос.