Для манипулирования данными в спецификационном
языке для ER-модели достаточно селекции по данным и селекции по
связям, и обыкновенных теоретико-множественных операций
Для примера рассмотрим здесь одну из модификаций удобного языка
манипулирования данными - CABLE’a. (анг. «chaine based language» -
язык, основанный на цепочках).
Практически, запрос представляет собой процесс прохождения по
цепочке множеств сущностей и множеств связей, а в каждом звене этой
цепочки возможна селекция. Этот этап назовем этапом селекции, в
процессе селекции создается выборка нужной информации из базы
данных.
Второй этап представляет собой манипулирование выбранными данными.
На этом этапе выполняются одна или несколько из следующих операций
над выбранными данными: печать, удаление, модификация.
Относительно высокая мощность CABLED при всей его простоте
объясняется тем, что в ER-модели явным образом хранится информация о
связях между объектами реального мира.
Рассмотрим команды языка.
A) SELECT - создает выборку. Формат команды:
<Bbi6opKa>=SELECT <имя множества сущностей или
связей>.[<условие>]\...
Множества сущностей с множествами связей должны чередоваться. Если,
например, мы произвели селекцию по сущностям и перешли к множеству
связей, то предметом для селекции будут служить только связи, в
которые входят выбранные сущности, далее переходим к следующему
множеству сущностей и т.д.
B) Теоретико-множественные операции: объединение (union),
пересечение
(intersect) и разность (minus).
C) Команды, определяющие действия над данными, вошедшими в выборку:
DELETE <выборка> - удаление записей, входящих в выборку.
OUTPUT <выборка>.<список атрибутов через пробел> - вывод результата
запроса
Возможны также и другие действия над данными.
Команды действий не определяют операции над данными, и поэтому
определяются не моделью данных, а конкретной реализацией.
Пример запроса 1. Выдать ФИО всех преподавателей старше 40 лет.
S1= SELECT ПРЕПОДАВАТЕЛИ.возраст>4 0 OUTPUT Б1.ФИО
Пример запроса 2. Выдать ФИО всех преподавателей
физико-математического факультета, получающих зарплату больше 15000
рублей.
S1 = SELECT ФАКУЛЬТЕТЫ.название='ФМФ'\СОСТОЯТЬ_ИЗ\ КАФЕДРЫ \
БЫТЬ_СОТРУДНИКОМ.З/п>15000\ ПРЕПОДАВАТЕЛИ OUTPUT S1
Пример запроса 3. Выдать названия тех кафедр ФМФ, на которых нет сотрудников со стажем больше 20 лет.
51 = SELECT ФАКУЛЬТЕТЫ.название='ФМФ'\СОСТОЯТЬ_ИЗ\КАФЕДРЫ
52 = SELECT ПРЕПОДАВАТЕЛИ.Стаж>2 0\БЫТЬ_СОТРУДНИКОМ\КАФЕДРЫ minus
S1, S2
OUTPUT S1.название
Примечание. В S1 мы находим все кафедры ФМФ, а в S2 все кафедры, на
которых есть со - трудники со стажем больше 20 лет. Для решения
нашей задачи остается вычесть из множества S1 множество S2, что мы
и делаем.
Заметим также, что при удалении данных автоматически удаляются
связанные с ними слабые сущности и связи, т.е. поддерживается
ограничение на существование.
|