Теория и практика построения баз данных (1088289), страница 64
Текст из файла (страница 64)
Вывести имена студентов, записанных хотя бы на один предмет. ЗАПИСЬ ЕноиерСтудента] Этот запрос похож на первый, но здесь оператор проектирования действу- ет на отношение ЗАПИСЬ. Результатом является следующая таблица: Как и в предыдущем примере, одинаковые строки были удалены. Вывести номера студентов. не записанных ни на один предмет. СТУДЕНТ [Личнийноиер] - ЗАПИСЬ ЕноиерСтудеита] Это выражение представляет собой разность между проекциями двух от- ношений: проекция ПУДЕНТ ЕЛичныйНонер] содержит номера всех студен- тов, а проекция ЗАПИСЬ [НоиерСтудента] содержит номера студентов, запи- санных на какие-либо предметы. Их разность — это номера студентов, не записанных ни на один предмет.
Результатом является следующая таблица: 299 реляционная алгебра 299 250 Звв джонс БЕЙКЕР Глава 8. Основы построения реляционных баз данных 4. Вывести номера студентов, записанных на предмет '80445', ЗАПИСЬ ННЕЯЕ НазввниеПредиета = '80445' ЕНанерСтудентз] Это выражение выделяет соответствующие кортежи и затем проектирует их на атрибут НомерСтудента, Результатом является следующая таблица: 5. Вывести имена студентов, записанных на предмет 'В0445 СТУДЕНТ ЛО[Н (ЛнчннйНоиер = НомерСтудентв) ЗАПИСЬ БАНЕРЕ НазввннеПредметз = '80445' (СТУДЕНТ Иия] Чтобы дать ответ на этот запрос, требуются данные цз обеих таблиц— и СТУДЕНТ, и ЗАПИСЬ. В частности, из таблицы СТУДЕНТ берутся имена студентов, а условие «записагг на предмет В0445» проверяется по таблице ЗАПИСЬ.
Поскольку необходимы оба отношения, их нужно соединить. К результату соединения таблиц СТУДЕНТ и ЗАПИСЬ применяется операцгш выборки, за которой следует проектирование на имена студентов. Результатом является следующая таблица: Как уже отмечалось ранее, у двух или более отношений, входящих в выражение, могут оказаться атрибуты с одинаковыми именами, Поэтому для определенности перед именем атрибута может указываться имя отношения, Так, в нашем примере делается проекция на атрибут СТУДЕНТ.Имя. В данном случае префикс служит лишь для демонстрации, поскольку в рассматриваемое выражение не входят какие-либо другие отношения, имеющие атрибут Имя.
Однако когда имена атрибутов повторяются (например, атрибут НазваниеПредмета имеется в отношениях ЗАПИСЬ и ЗАНЯТИЯ), запись с префиксом оказывается необходимой. Рассмотрим следующую задачу. 6. Вывести названия предметов, на которые записагг студент Паркс, и распи саине занятий по этим предметам. Чтобы ответить на этот вопрос, мы должны свести воедино данные из трех отношений.
Из таблицы СТУДЕНТ мы возьмем учетный номер студента Пар- кса, из таблицы ЗАПИСЬ вЂ” предметы, на которые записан этот студент, а из таблицы ЗАНЯТИЯ вЂ” расписание занятий по этим предметам. СТУДЕНТ ННЕЯЕ Имя - 'ПАРКС' 30!Н (Пнчнийнонер - НонерСтудентв) ЗАПИСЬ ЗО!М (ЗАПИСЬ.Назввннедредметв = ЗАНЯТИЯ.НвзваннеПредмета) ЗАНЯТИЯ (ЗАНЯТИЯ.НазввниеПредметв, Время] Это выражение выделяет кортеж студента по фамилии Паркс из отношения СТУДЕНТ и соединяет его с соответствующими кортежами отношения ЗАПИСЬ. Результат соединяется с соответствующими кортежами отноше- ния ЗАНЯТИЯ.
Наконец, берется проекция, которая выделяет названия пред- метов и время проведения занятий. Результат имеет следуюший вид: Есть другие способы представления этого запроса, эквивалентные этому. Один из них выглядит так; СТУДЕНТ ]0!Н (ЛнччнйНомер = НоиерСтудента) ЗАПИСЬ 30[и (ЗАПИСЬ.НвзввннеПредметв = ЗАНЯТИЯ.НвзввннеПведметв) РРТ7НВ7 ННЕЯЕ Имя = 'ПАРКС' [ЗАНЯТИЯ.Название.
Вреия] Это выражение отличается от первого тем, что выборка данных о студенте с фамилией Паркс не выполняется до тех пор, пока не будут выполнены все соединения. Если предположить, что компьютер будет выполнять операции именно в таком порядке, это выражение будет вычисляться медленнее, чем предыдушее, так как придется соединять большее количество кортежей.
Такие различия являются большим недостатком реляционной алгебры. С точки зрения пользователя, эквивалентные запросы должны занимать одинаковое количество времени (и, следовательно, стоить одинаково). Представьте себе недоумение пользователя, если один и тот же запрос в одной форме стоит $1,17, а в другой — 34 436. Для неискушенного пользователя такая разница в стоимости будет представляться просто чьей-то прихотью. 7. Для всех студентов (включая тех, кто не записан ни на один предмет) вывести номера курсов, иа которых они учатся, и аудиторий, в которых они занимаются.
Поскольку результат должен содержать данные обо всех студентах, в данном запросе необходимо использовать внешнее соединение. Синтаксис прямолинеен: СТУДЕНТ ЕЕРТ ОРТЕЯ 30[К (ЛичннйНоиер = НоиерСтудентв) ЗАПИСЬ (ЗАПИСЬ. НазваннеПреднета = ЗАНЯТИЯ.НазввниеПредиета) ЛР!Н ЗАНЯТИЯ (Курс, Аудитория] В результирующей таблице помимо прочего указано, на каких курсах учатся студенты Гласс и Рассел, не записанные ни на один предмет: 300 Глава 8. О . Основы построения реляционных баз данных Вопросы !группы 301 Резюме При построении реляционной базы данных требуется решить песк . несколько задач.
выделить й р, бходимо описать структуру базы данных для СУБД. 3 д я, атем нужно файловое пространство и заполнить базу данных информацией. В реляционной модели данные представл ютс б б ф я я и о ра атываются в фо ме таблип, называемых отношениями. Столб б ф Р тол цы та лиц называются атрибутами, а строки — кортежами. Термины таблица, столбец и строка, а т к файл, поле и запис рока, а также термины ение,атри ут и кор- ф, г сь являются синонимами терминов отпош, 6 теж соответственно. Использование те мин р а ключ может привести к неоднозначности, так как на На ст ии стадии проектирования и реализации он упо б, тре ляется в различных значениях.
а стадии проектирования этим термином обозначается логический клю, один или несколько ат либ тов, а я логическии ключ, то есть ко атри утов, однозначно интерпретируюших строку. На ста- дии реализации этим термином обозначае с ф т я физическии ключ, то есть структу- моьке ра данных, используемая для повышения производительн . Л т быть, а может и не быть физическим клю; ф ости.
огический ключ лючом; физический ключ также мо- жет, но не обязан быть логическим ключ,, В ом. этан книге под словом ключ мы подразумеваем логический ключ, а под словом инд — ф ом ин екс — физический ключ. Поскольку для описания ст к ы б ..., ционру тур ~ базы данных мы используем реляцион- ную модель, нам нет необходимости осуществлять какие-либо п б какие-ли о преобразования Есть два способа с елать р ализации. * ы просто описываем име|ощуюся структ л СУБД. д лать это: представить описание в виде текстового !)!Э!.-фай- ла или воспользоваться г аф сл чаях ля С рафическими средствами описания даннь . В б , у д УБД описываются таблипы, столбцы, ин ек аф ° ° 1х. о оих ли и другие элементы управления. , индексы, ограничения, па о,инек,, р- ля базь Помимо описания ст кт ы базы ру ур ' данных, разработчики должны выделить для азы данных пространство на физическом носителе.
В м ских систем м осителе. многопользовательс емах это может быть важно для эффективной работы СУБД, Наконец, база данных заполняется информацией, для чег , д. чего используются с едства, п е о- ставляемые производителем СУБД, и:,, и- телем, или и то и другое. , или программы, разработанные произво и- диЕсть четыре категории языков манипулирования данными: реляционная алгеб- ~ ые на прео разования, и за- ра, реляционное исчисление, языки, ориентированные б просы по образцу. Реляционная алгебра состоит иа набо а еля ио желаемого ез льтат . , с помощью которых можно манипулировать отношениями для получе р у а. Реляционная алгебра является процедурной. Язык, .у ния оптированные на п еоб а ной.
зыки, ори- и еоб азовани н рео разования, предоставляют непроцедурны б е спосо ы для р р я абора отношений в желаемый результат. Наиболее асп ост а- нецный пример — это язык 5ЯЕ. Существует три способа доступа к реляционной базе данных. Один из них со- стоит в том, чтобы использовать средства для гене а и о С Д м . торои способ — использовать язык запросов и преобразова- нии; наиболее популярным языком такого ро а .
5О!.. Т д является О . ретий способ предполагает доступ через прикладные программы. Прикладные программы могут взаимодействовать с СУБД че ф нкций, а так ать с Д через вызовы фу ", также с помощью методов объектов или спе г б ли специальных команд базы л,ииплх, транслируемых предварительным компилятором. Реляционная модель о!пюптирована на обработку одного отношения за один прием, но большинство плыков программирования обрабатыва|от за один прием только одну строку.