Покажем, как можно использовать рассмотренные ранее
выражения и операции реляционной алгебры в практической эксплуатации
различных баз данных.
Пусть для примера в нашем распоряжении имеется фрагмент какой-то коммерческой базы данных:
Поставщики (Код поставщика, Имя поставщика, Город поставщика);
Инструменты (Код инструмента, Имя инструмента, …);
Поставки (Код поставщика, Код детали);
Подчеркнутые имена атрибутов являются ключевыми (т. е. идентификационными) атрибутами, причем каждый в своем отношении.
Предположим, что к нам, как разработчикам этой базы
данных и хранителям информации по этому вопросу, поступил заказ получить
наименования поставщиков (Имя Поставщика) и место их расположения
(Город Поставщика) в случае, когда эти поставщики не поставляют
каких-либо инструментов с родовым именем «Плоскогубцы».
Чтобы в нашей, возможно, весьма обширной, базе данных
определить всех поставщиков, отвечающих этому требованию, запишем
несколько выражений реляционной алгебры.
1. образуем естественное соединение отношений
«Поставщики» и «Поставки» для того, чтобы сопоставить с каждым
поставщиком коды поставляемых им деталей. Новое отношение – результат
применения операции естественного соединения – для удобства дальнейшего
применения обозначим через r1.
Поставщики × Поставки ≔ r1 (Код поставщика, Имя поставщика, Город поставщика, Код поставщика, Код инструмента);
В скобках мы перечислили все атрибуты
отношений, участвующих в этой операции естественного соединения. Мы
видим, что атрибут «Код поставщика» дублируется, но в итоговой записи
операции каждое имя атрибута должно присутствовать только один раз, т.
е.:
Поставщики × Поставки ≔ r1 (Код поставщика, Имя поставщика, Город поставщика, Код инструмента);
2. снова образуем естественное соединение,
только на этот раз отношения, получившегося в пункте один и отношения
Инструменты. Делаем это для того, чтобы с каждым кодом инструмента,
получившемуся в предыдущем пункте, – сопоставить имя этого инструмента.
r1 × Инструменты [Код инструмента, Имя инструмента] ≔ r2 (Код поставщика, Имя поставщика, Город поставщика, Код инструмента, Код инструмента, Имя инструмента);
Получившийся результат обозначим r2, дублирующиеся атрибуты исключаем:
r1 × Инструменты [Код инструмента, Имя инструмента] ≔ r2 (Код поставщика, Имя поставщика, Город поставщика, Код инструмента, Имя инструмента);
Заметим, что из отношения Инструменты мы
берем только два атрибута: «Код инструмента» и «Имя инструмента». Чтобы
это осуществить мы, как можно заметить из записи отношения r2,
применили унарную операцию проекции: Инструменты [Код инструмента, Имя
инструмента], т. е., если бы отношение Инструменты было представлено в
виде таблицы, результатом этой операции проекции стали бы два первых
столбца с заголовками соответственно «Код инструмента» и «Имя
инструмента».
Интересно заметить, что два первых шага, нами уже
рассмотренных, являются достаточно общими, т. е. они могут быть
использованы и для реализации каких-либо других запросов.
А вот два следующих пункта, в свою очередь, представляют
собой конкретные шаги для достижения поставленной перед нами конкретной
задачи.
3. Напишем унарную операцию выборки по условию <«Имя инструмента» = «Плоскогубцы»> применительно к отношению r2,
полученному в предыдущем пункте. А к результату этой операции применим,
в свою очередь, унарную операцию проекции [Код поставщика, Имя
поставщика, Город поставщика], для того чтобы получить все значения этих
атрибутов, потому что именно эту информацию нам и требуется получить
исходя из заказа.
Итак:
(σ<Имя инструмента = «Плоскогубцы»> r2) [Код поставщика, Имя поставщика, Город поставщика] ≔ r3 (Код поставщика, Имя поставщика, Город поставщика, Код инструмента, Имя инструмента).
В результирующем отношении, обозначенном через r3,
оказались только те поставщики (со всеми своими опознавательными
данными), которые поставляют инструменты с родовым именем «Плоскогубцы».
Но нам в силу заказа необходимо выделить тех поставщиков, которые,
наоборот, не поставляют таких инструментов. Поэтому перейдем к
следующему действию нашего алгоритма и запишем последнее выражение
реляционной алгебры, которое и даст нам искомую информацию.
4. Сначала составим разность отношения «Поставщики» и отношения r3,
а после применения этой бинарной операции применим унарную операцию
проекции на атрибуты «Имя поставщика» и «Город поставщика».
(Поставщики \ r3) [Имя поставщика, Город поставщика] ≔ r4 (Код поставщика, Имя поставщика, Город поставщика);
Результат обозначили r4, в
это отношение и вошли как раз только те кортежи исходного отношения
«Поставщики», которые соответствуют условию нашего заказа.
Итак, мы показали, как можно с помощью выражений и
операций реляционной алгебры осуществлять всевозможные действия с
произвольными базами данных, выполнять различные заказы и т. п.
|