|
С использованием реляционной алгебры и языка составить запросы, позволяющие выбрать:
1. Файлы, которые имеют нескольких пользователей из разных отделов.
2. Программы, которые работают только с одним файлом.
3. Файлы, которые имеют одно и тоже имя, но расположены на различных серверах и используются сотрудниками разных отделов.
4. Файлы, с которыми работают сотрудники всех отделов.
5. Файлы, пользователями которых являются сотрудники только одного отдела.
6. Программы, которые работают со всеми серверами.
7. Отделы, сотрудники которых не работают ни с одним файлом. То есть отделы, в которых нет ни одного сотрудника, работающего с каким-нибудь файлом.
8. Отделы, сотрудники которых работают со всеми серверами.
9. Серверы, с которыми работают сотрудники только одного отдела.
Ниже приводятся решения перечисленных задач.
1. Файлы, которые имеют нескольких пользователей из разных отделов.
а) R5=R2 R4 – добавили к R2 информацию об отделе пользователя файла.
б) Для ответа на вопрос нужно сделать тета-соединение отношения R5 самого с собой (для удобства обозначим копию R5 через R'5) при сложном условии несовпадения сотрудников и отделов для каждого файла, а потом спроектировать на атрибут "Название файла".
R6=ПНазвание файла (R5 R5.Название файла=R'5.Название файла Λ R5.Сотрудник <> R'5.Сотрудник Λ R5.Отдел <> R5.ОтделR'5),
где знак <> означает знак неравенства.
2. Программы, которые работают только с одним файлом.
а) Найдем программы, которые работают с более чем одним файлом (соединим R2 с самим собой, т.е. с его копией R'2)
R5=ПНазвание программы (R2 R2.Название программы=R'2.Название программы Λ R2.Название файла <> R'2.Название файла R'2)
б) Общий список работающих программ (при проекции повторяющиеся строки удаляются)
R6= ПНазвание программы(R2)
в) Вычтем из общего списка работающих программ те программы, к-рые работают со многими файлами – это и будет результат:
R7= R6 – R5
3. Файлы, которые имеют одно и тоже имя, но расположены на различных серверах и используются сотрудниками разных отделов.
а) Выделим файлы с одинаковыми именами, но расположенные на различных серверах:
R5= ПНазвание файла(R3 R3.Название файла = R'3.Название файла Λ R3.Название сервера <> R’3.Название сервера R'3)
б) Выделим файлы, используемые сотрудниками разных (более одного) отделов. Для этого сначала добавим к R2 номер отдела сотрудника
R6= R2 R4
Теперь сделаем тета-соединение R6 с самим собой (R'6- копия R6)
R7= ПНазвание файла (R6 R6. Название файла=R'6. Название файла Λ R6.Отдел <> R'6.Отдел R'6)
Получили список файлов, которые используют сотрудники разных отделов.
в) Используя операцию пересечения R5 и R7, найдем общее для них подмножество файлов, которые имеют одинаковое имя, расположены на различных серверах и используются сотрудниками разных отделов:
R8= R5 R7
4. Файлы, с которыми работают сотрудники всех отделов.
R5=R2 R4 – добавили к R2 информацию об отделе пользователя файла.
R6= ПНазвание файла, Отдел (R5) – список файлов и отделов, в которых работают с этими файлами.
R7=ПОтдел(R4) – список всех отделов.
R8= (R6 ÷ R7) – операция деления дает список файлов, с которыми работают во всех отделах.
5. Файлы, пользователями которых являются сотрудники только одного отдела.
R5=R2 R4 – добавили к R2 информацию об отделе пользователя файла.
R6=ПНазвание файла (R5 R5.Название файла=R'5.Название файла Λ R5.Отдел <> R5.ОтделR'5) – файлы, используемые несколькими (более одного) отделами.
R7= ПНазвание файла (R2) – все используемые файлы.
R8=R7 - R6 – файлы, используемые только одним отделом.
6. Программы, которые работают со всеми серверами.
R5=R2 R3 – добавили к R2 информацию об названии сервера.
R6= ПНазвание программы, Название сервера(R5) – список пар "программа-сервер".
R7= ПНазвание сервера(R3) – список всех серверов.
R8= R6 ÷ R7 – результат.
7. Отделы, сотрудники которых не работают ни с одним файлом. То есть отделы, в которых нет ни одного сотрудника, работающего с каким-нибудь файлом.
R5=R2 R4 – добавили к R2 информацию об отделе пользователя файла.
R6= ПОтдел(R5) – список отделов, сотрудники которых работают с файлами.
R7= ПОтдел(R4) - общий список отделов.
R8=R7 - R6 – результат, т.е. отделы, сотрудники которых не работают ни с одним файлом.
8. Отделы, сотрудники которых работают со всеми серверами.
а) R5=R2 R3 – добавили к R2 атрибут "Название сервера".
б) R6=R5 R4 – добавили к R5 атрибут "Отдел". Т.е. теперь отношение R6 имеет схему:
R6(Название программы, Название файла, Сотрудник, Название сервера, Отдел).
в) R7= ПНазвание сервера, Отдел (R6) – список пар "сервер-отдел".
г) R8=ПНазвание сервера(R3) – список всех серверов.
д) R9= R7 ÷ R8 – список отделов, которые работают со всеми серверами, что и требуется получить.
Этот результат можно записать сразу без промежуточных пошаговых записей:
R9= ПНазвание сервера, Отдел (R2 R3 R4) ÷ ПНазвание сервера(R3)
9. Серверы, с которыми работают сотрудники только одного отдела.
а) R5=R2 R3 – добавили к R2 информацию об атрибуте "Название сервера".
б) R6=ПНазвание сервера (R5 R5.Название сервера=R'5.Название сервера Λ R5.Отдел <> R5.ОтделR'5) – это список серверов, с которыми работают сотрудники более чем одного отдела.
в) R7=ПНазвание сервера(R3) – список всех серверов.
г) R8=R7 - R6 – список серверов, с которыми работают сотрудники только одного отдела, что и требуется определить.
Дата добавления: 2015-07-08; просмотров: 613 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
ПРИМЕРЫ ПРИМЕНЕНИЯ РЕЛЯЦИОННОЙ АЛГЕБРЫ | | | Жизненный цикл приложения баз данных |