Раздел 1. Концепция систем баз данных 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Раздел 1. Концепция систем баз данных



Введение

Концепция баз данных (БД) открыла новую эру в развитии информационных систем. Она пришла на смену традиционным файловым системам и позволила поднять системы управления информацией на качественно новый уровень. Начав свой путь с 60-х годов прошлого столетия со сложных сетевых систем, реализуемых в рамках универсального языка программирования, БД в течение 10 лет превратились в самостоятельные программные продукты со своими встроенными языковыми средствами управления, своей теорией и практическим воплощением в коммерческих проектах.

Концепция БД имеет два направления своего развития:

Ø теория и практика построения баз данных;

Ø теория и практика построения систем управления базами данных.

Кроме того, необходимо различать два термина, связанных с данными:

Ø управление базами данных;

Ø управление информацией.

Управление базами данных – это формальная дисциплина в области информатики, опирающаяся на различные модели данных (сетевые, иерархические, реляционные, объектно-ориентированные и др.), в соответствии с которыми упаковываются и управляются посредством формализованных правил данные пользователя и определения этих данных (метаданные). При этом параллельно решаются такие важные проблемы БД, как целостность данных, ограничение доступа к данным, восстановление данных после аварийных и конфликтных ситуаций, возникающих в процессе эксплуатации системы.

Управление информацией, напротив, является более всеохватывающей и более размытой моделью. Управление базами данных используется в области управления информацией наряду со многими другими моделями обеспечения доступа к данным, отличающимися от концепции БД. Примерами таких моделей управления информацией являются:

Ø гипертекст, в котором пользователь имеет возможность доступа к различным типам данных, следуя специальным указателям исходного текста;

Ø файловые системы (плоские файлы), которые до сегодняшнего времени хранят значительную долю данных пользователя (организации). Хотя операционные системы обеспечивают управление файлами, они не обладают характеристиками, которые делали бы их похожими на системы БД.

Соотношение между понятиями у правление базами данных и управление информацией показано на рис. 1.

Система баз данных (СБД) - это такая среда хранения и управления данными, которая удовлетворяет следующим требованиям:

Ø данные должны иметь формат, известный как прикладной программе, которая их использует, так и вычислительной системе. Этот формат определяется с помощью словаря данных (данные о данных);

Ø данные должны храниться, извлекаться и модифицироваться только с помощью специальной программы, называемой системой управления базами данных (СУБД);

Ø данные должны быть субъектом управления транзакциями, т.е. субъектом некоторого формального множества правил, которые обеспечивают целостность данных во время и после завершения операций над ними. Управление транзакциями особенно важно, когда множество пользователей и прикладных программ одновременно осуществляют доступ к данным.

 

 

 


Рис. 1. Соотношение между управлением базами данных и управлением информацией

Рабочая программа

1.1. Цели и задачи дисциплины

Целью преподавания дисциплины является обучение студентов основам построения информационных систем с использованием концепции баз данных (БД), технологиям моделирования и построения БД для современных средств вычислительной техники, необходимых при выполнении проектов БД в учебной и производственной сфере.

Задача курса – создать теоретическую базу для дисциплин, изучаемых в последующих семестрах.

Дисциплина «Базы данных» опирается на дисциплины математического, программного и аппаратного циклов, читаемых в 1–4-м семестрах. Для успешного освоения курса студенты должны знать основы построения информационных систем, моделирования и структуризации данных, алгоритмизации задач и проектирования программ, уметь программировать на алгоритмических языках высокого уровня.

1.2. Требования к уровню освоения содержания дисциплины

В результате изучения курса студенты должны знать:

Ø принципы организации и архитектуры систем баз данных;

Ø основные поколения моделей данных;

Ø современные методы и средства разработки и синтеза моделей данных предметных областей и автоматизированных систем обработки информации и управления;

Ø современные методики синтеза и оптимизации структур баз данных;

Ø современные методы обеспечения целостности данных;

Ø основные конструкции языков манипулирования данными;

Ø методы организации баз данных на носителях информации;

должны уметь:

Ø применять современную методологию для исследования и синтеза информационных моделей предметных областей;

Ø применять современную систему управления базами данных для реализации проекта БД;

Ø применять современные языки манипулирования и описания данных;

должны иметь представление о тенденциях и перспективах развития современных систем управления базами данных.

1.3. Объем дисциплины и виды учебной работы

Вид учебной работы Всего часов Семестр
 
Общая трудоемкость дисциплины    
Аудиторные занятия    
Лекции    
Лабораторные работы (ЛР)    
Самостоятельная работа    
Контрольная работа   +
Вид итогового контроля   Экзамен

1.4. Содержание дисциплины

1.4.1. Разделы дисциплины, виды и объем занятий

Раздел дисциплины Лекции (часов) ЛР (часов)
1 Концепция систем баз данных    
2 Архитектура систем баз данных    
3 Данные и модели данных    
4 Системы управления базами данных    
5 Реляционная модель данных    
6 Реляционные структуры данных    
7 Ограничения целостности    
8 Операции реляционных баз данных    

1.4.2. Содержание разделов дисциплины

Раздел 4. Системы управления базами данных (СУБД)

Определение СУБД. Характеристики СУБД. Инструментальные средства СУБД. Классификация моделей данных и СУБД.

Язык определения данных и язык манипулирования данных. Объектно-ориентированные СУБД и базы данных. Средства разработки приложений.

Раздел 5. Реляционная модель данных (РМД)

Определение реляционной модели данных. Достоинства и недостатки РМД. 13 правил Кодда для реляционной модели. Расширенная реляционная модель данных. Перспективы развития РМД.

Лабораторный практикум

№ раздела Наименование лабораторных работ Количество часов
    Моделирование предметной области  
    Управляющий центр СУБД  
    Конструирование таблиц  
    Типы и свойства атрибутов  
    Конструирование запросов на языке QBE  
    Конструирование запросов на языке SQL  
    Конструирование форм и отчетов  
    Макросы и их разработка  

 

Содержание контрольной работы

 

Выполнить задание, выданное преподавателем, предварительно изучив теоретический материал. Задание состоит в следующем:

Ø разработать схему реляционной базы данных (не менее трех таблиц);

Ø реализовать базу данных в среде реляционной СУБД Access (возможно использование другой СУБД, поддерживающей реляционную модель данных);

Ø заполнить базу данных реальными данными (10–15 записей в каждой таблице);

Ø сконструировать запросы к базе данных различных типов и разной степени сложности (не менее 10 запросов). Обязательными для конструирования являются следующие типы запросов:

· запрос на выборку (SELECT);

· запрос на создание таблицы (SELECT … INTO);

· запрос на добавление одной записи (INSERT … VALUES);

· запрос на добавление множества записей (INSERT … SELECT);

· запрос на удаление (DELETE);

· запрос на изменение (UPDATE);

· перекрестный запрос (TRANSFORM);

· запрос с группированием (… GROUP BY);

· запрос с вычислениями по горизонтали и по вертикали;

· запрос с подзапросом (SELECT … WHERE … (SELECT …));

· запрос с параметрами (PARAMETERS).

Примечание: отдельные типы запросов могут быть реализованы в рамках одного запроса, например параметрическим может быть любой из вышеперечисленных запросов, аналогично любой тип запроса может содержать в себе такие операции, как группирование, упорядочивание, вычисления по горизонтали (расширение), вычисления по вертикали (подведение итогов), подзапрос.

Контрольная работа должна содержать:

Ø титульный лист;

Ø формулировку контрольного задания;

Ø схему базы данных;

Ø тексты запросов на русском языке;

Ø тексты запросов на языке реляционной алгебры;

Ø тексты запросов на языке SQL с подробными комментариями;

Ø результаты выполнения запросов;

Ø ответы на контрольные вопросы.

Контрольная работа выполняется в рукописном или машинописном виде.

Вопросы к контрольной работе

 

1. Основные этапы (поколения) развития систем баз данных и систем управления базами данных.

2. Как формулируется минимальное определение реляционной модели данных (РМД)?

3. Чем отличается таблица от отношения РМД?

4. Что такое модель данных?

5. Назначение и общая характеристика языка описания данных (ЯОД).

6. Схема данных и ее описание в СУБД Access.

7. Назначение и общая характеристика языка манипулирования данными (ЯМД).

8. Типы языков запросов к базе данных.

9. Что такое ограничения целостности данных?

10. В чем выражается замкнутость реляционной алгебры Кодда?

11. Какие операции включает в себя минимальная алгебра Кодда?

12. Какие реляционные операции реализованы в языке SQL?

13. В чем выражается сходство и различие между реляционной алгеброй и реляционным исчислением?

 

Определение базы данных

 

База данных – это совокупность взаимосвязанных данных, описывающих определенную часть реального мира, называемую предметной областью. Данные, содержащиеся в базе, характеризуются единым способом хранения и единым методом доступа, заложенным в систему управления базой данных. Это обеспечивает независимость данных от программ их использования. В основе любой системы управления базами данных (СУБД) лежит модель данных. Каждая модель данных (МД) имеет три составных части:

Ø множество допустимых структур данных, или просто – структуры;

Ø множество правил, ограничивающих допустимые значения данных, или просто – ограничения целостности;

Ø множество допустимых операций над данными, или просто – операции.

В зависимости от характеристик этих трех составных частей и получают свои названия различные модели данных. Наиболее известными моделями данных являются: сетевая, иерархическая, реляционная и объектно-ориентированная модели.

База данных называется реляционной, если она удовлетворяет двум требованиям:

Ø все данные представляются с точки зрения пользователя как реляционные таблицы и ничего. кроме таблиц;

Ø в распоряжении пользователя имеется набор операций, обеспечивающих выполнение основных действий над данными: добавление, удаление, изменение и выборка.

Реляционные таблицы

 

Реляционной считается такая таблица, в каждом столбце которой хранится неделимое, с точки зрения СУБД, значение, принадлежащее некоторому только одному множеству значений, называемому Доменом.

Например, таблица Студент состоит из множества записей, состоящих из одних и тех же столбцов (полей): НомерЗачетки, Фамилия, Имя, Отчество, ДатаРождения, НомерГруппы, Хобби, СемПоложение, СредБалл. В каждом столбце каждой записи этой таблицы размещается простое значение, например, <990601, Патрикеева, Алиса, Федоровна, 28.02.1982, 943, Плавание, Не замужем, 4,56>.

Элементы реляционной таблицы имеют следующие названия:

Ø Заголовок -список полей таблицы (схема таблицы);

Ø Степень – количество полей в заголовке (арность таблицы);

Ø Тело – все строки с данными, входящими в таблицу;

Ø Мощность – количество строк в теле таблицы (кардинальное число).

Каждая таблица представляет собой некоторый объект предметной области. Например, Сотрудник, Дисциплина, Товар, Клиент, Покупатель, Договор, Ведомость, Больничный лист, Посещение поликлиники, Землетрясение, Операция и т. д.

Каждая строка таблицы представляет собой отдельный экземпляр объекта и состоит из одного и того же множества полей-столбцов, при этом каждое поле имеет смысл некоторого свойства объекта. Например, Табельный номер, Фамилия, Дата рождения - сотрудника; Название дисциплины, Артикул, Стоимость – товара; Номер, Дата заключения – договора; Дата, Место, Мощность, Ущерб – землетрясения и т. д.

Каждое поле таблицы определено только на одном множестве значений, называемом Доменом. При этом на одном и том же домене может быть определено много полей. Например, поля Дата рождения сотрудника и Дата землетрясения определяются на домене Дата, Стоимость товара – на домене Деньги. Кроме того, каждое поле имеет и ряд других свойств-характеристик, значения которых определяются предметной областью.

По своему содержанию реляционная база данных представляет собой множество реляционных таблиц, посредством которых в базе хранятся данные об объектах предметной области и связях между этими объектами.

Типы полей

 

Каждое поле определяет какое-либо свойство сущности (объекта) или связи. Тип поля – основная его характеристика, которая определяется исходя из природы значений, принимаемых полем как в реальной жизни, так и в процессе эксплуатации БД. Выбирая тип поля, необходимо учитывать диапазон допустимых для него значений, а также набор операций, которые потребуется применять к этим значениям в процессе выполнения запросов пользователя к БД. Например, СУБД Access 2000 имеет типы полей, представленные в табл. 1.

№ п/п Тип Описание
  Текстовый Цепочка алфавитно-цифровых символов длиной не более 255
  MEMO Текст переменной длины до 64000 байт
  Числовой Числовые значения (целые или вещественные числа)
  Дата/Время Дата и время
  Денежный Денежный (целые или вещественные числа)
  Счетчик Уникальное число, которое в каждой новой записи Access автоматически увеличивается на 1 или выбирается случайным образом
  Логический Логические значения (истина или ложь)
  Объект OLE OLE-объекты и иллюстрации
  Гиперссылка Строка, состоящая из букв и цифр, и представляющая адрес гиперссылки (текста или файла с текстом).

Таблица 1

Мастер подстановок

 

В список типов полей включена строка под названием Мастер подстановок…, которая не имеет непосредственного отношения к типу поля. При выборе этой строки запускается специальная утилита Создание подстановки, с ее помощью можно сконструировать список значений для быстрого ввода данных в поле. Список значений может быть фиксированным или формироваться из данных, имеющихся в БД.

Таким образом, использование Мастера подстановок позволяет добиться двух преимуществ при ведении БД:

1) ускорения ввода значений за счет выбора их из списка;

2) повышения уровня целостности вводимых данных за счет выбора из списка, а не ручного ввода.

 

Свойства полей

Свойство формат поля

 

Формат определяет внешний вид значения поля при отображении его на экране. В Access имеются встроенные форматы для числовых полей, полей типа Дата/Время и логических полей (рис. 12).

 

а б

в

Рис. 12. Форматы полей типов: а) Дата/Время, б) Числовой, Денежный, Счетчик; в) Логический

Кроме того, можно создавать свои форматы отображения значений поля в таблице или форме с помощью форматных символов, например: #, 0. d, m.

Таблица 2

Свойство поля     Варианты значений Тип поля
Текстовый Мемо поле Числовой Дата/Время Денежный Логический OLE объект Гиперссылка Счетчик
                     
Размер поля …; 6 +   +           +
Число десятичных знаков Авто; 0..15     +   +        
Формат поля …; 6 + + + + + +   + +
Маска ввода L +     +          
Подпись Вводится + + + + + + + + +
Значение по умолчанию + + + + + +   +  
Условие на значение + + + + + +   +  
Подпись Вводится + + + + + +   +  
Обязательное поле Да; Нет + + + + + + + +  
Пустые строки Да; Нет + +              
Индексированное поле Да (Совпадения допускаются); Да (Совпадения не допускаются) Нет +   + + + +     +
Новые значения Последовательные, Случайные                 +
Сжатие Юникод Да; Нет + +              
Подстановка …; 6 +   + +   +      

Условные обозначения: … - построитель выражения; 6 - выбор из списка.

Все форматные символы применяются к своему типу поля, а именно: 0, #, $, %, E,.,, - для числовых полей; /, d, m, y – для полей даты;:, h, n, s, am/pm (a/p)– для полей времени; @, &, <, > - для текстовых полей;!, \, * - для любых полей.

Примеры.

1. Для отображения значения поля типа Дата/Время в виде 12 января 2000 г. следует задать формат dd mmmm yy г..

2. Для отображения значения числового поля в виде $1000.45 следует задать формат $#, число десятичных знаков 2, размер поля О динарное с плавающей точкой.

Свойство Маска ввода

 

Маска определяет содержимое и порядок ввода значения поля и тем самым, позволяет организовать ввод значений поля в наиболее удобном для пользователя виде. Например, ввод значения номера телефона целесообразно организовать по маске вида: (9999)99-99-99. В общем случае маска ввода может содержать до трех секций, разделенных символом точка с запятой (;), а именно: <собственно маска; признак; заполнитель>.

Секция 1 определяет собственно маску ввода и включает строку масочных символов, между которыми могут вставляться любые другие символы, например! (999) 999-9999, здесь символы! и 9 – это масочные символы, а символы (,) и - – это обычные символы. Чтобы отменить действие масочного символа, необходимо поставить перед ним символ \ (обратный слэш). Например \LL, здесь первый символ L является обычным символом, а второй – масочным.

Секция 2 определяет, сохраняет ли СУБД обычные символы маски в поле при вводе в него значения. Если используется значение 0 для этой секции, то все обычные символы первой секции маски (например, круглые скобки и тире в телефонной маске) сохраняются как значение поля; если используется значение 1, то СУБД сохраняет только введенные пользователем символы в соответствии с маской. По умолчанию система использует значение 1.

Секция 3 определяет символ – заполнитель пустых полей при вводе, который СУБД показывает в позициях, где нужно ввести собственно данные. Для этой секции можно использовать любой символ; чтобы показать пустую цепочку ввода, рекомендуется использовать символ, не входящий во вводимое значение, например знак подчеркивания (_). По умолчанию система использует символ пробела.

Практически в маске ввода может быть использована только первая секция.

Символы, наиболее часто используемые в Секции 1 маски ввода, приведены в табл. 3, а примеры масок ввода, используемых для ввода значений различных типов полей представлены в табл. 4.

 

Таблица 3

Символ Описание (функция)
Пусто Маска ввода не применяется
  Цифры от 0 до 9 (ввод обязателен, знак + или – не допустимы)
  Цифры или пробел (ввод не обязателен, знак + или – не допустимы)
# Цифры или пробел (ввод не обязательный, знак + или – допустимы, пустые символы преобразуются в пробелы)
L Буквы от A до Z или от А до Я (ввод обязателен)
? Буквы от A до Z или от А до Я (ввод не обязателен)
А Буква или цифра (ввод обязателен)
а Буква или цифра (ввод не обязателен)
& Любой символ или пробел (ввод обязателен)
C Любой символ или пробел (ввод не обязателен)
< или > Все вводимые за ним символы преобразуются к нижнему (все строчные) или верхнему регистру (все прописные)

Таблица 4

Маска ввода Варианты вводимых значений
(00000) 0-00-00 (09234) 3-34-57
(9999) 999-999 (0912) 214-667; () 555-024; (095) 21- 44
(000) AAA-AAAA (206) 555-TELE; (301) ВПМ-206а
#999 -20; 229; -100; +1; 0; 2000
>L????L?000L0 GREENGR339M3; MAY R 452B7
>L0L 0L0 T2F 8M4; А3В 7С1
00000-9999 98115-; 98115-3007; 12345-11
>L<?????????????? Maria; Рязань; Гагарин
РГРТА 000-&&-0000 РГРТА 555-5а-5555; РГРТА 123-Fa-1234
>L\L00000-0000 DL51392-0493; ПL12345-1234

 

Языки запросов

 

Как правило, при проектировании РБД получается множество реляционных таблиц, каждая из которых содержит данные о некотором простом объекте ПО. В процессе эксплуатации БД пользователю чаще всего требуется получать данные из многих таблиц, соединенные вместе и отобранные по определенным признакам (отфильтрованные данные). Для эффективного получения таких данных в распоряжении пользователя СУБД имеется набор команд, объединенных под общим названием Язык Манипулирования Данными (ЯМД) (Data Definition Language DDL). Наибольшее применение и практическое развитие получили 2 вида таких языков:

Ø SQL (Structure Query Language) – язык структурированных запросов, основанный на Реляционной алгебре;

Ø QBE (Query By Example) – графический язык запросов по образцу, основанный на Реляционном исчислении.

Оба эти языка являются реляционно полными, т.е. любой запрос, построенный на одном языке, может быть построен и на другом языке. Фундаментом для разработки этих языков является реляционная алгебра, которая состоит из набора операторов, использующих отношения в качестве операндов и возвращающих отношение в качестве результата. Такое свойство реляционной алгебры называется замкнутостью. Это позволяет строить вложенные реляционные выражения по аналогии с обычной числовой алгеброй. Кодд Е.Ф. впервые предложил ряд операторов реляционной алгебры для манипулирования данными, размещенными в отношениях (1970 г.).

Однако правильным является и утверждение о том, что операции реляционной модели данных, а следовательно и языки запросов, основаны на реляционном исчислении. Другими словами, алгебра и исчисление представляют собой два подхода к построению операторов работы с отношениями. Например, операцию объединения двух отношений на языке реляционной алгебры можно представить как R ÈS, а на языке реляционного исчисления как {t |(t Î R) Ú(t Î S)}, где t - это некоторый кортеж результирующего отношения такой, что логическое выражение, стоящее после знака |, равно истине.

Основы реляционной алгебры

Примеры запросов на языке реляционной алгебры

 

Рассмотрим ряд примеров записи запросов к базе данных РАСПИСАНИЕ на языке реляционной алгебры.

1. Получить список названий дисциплин, изучаемых на специальности 2204:

((РАСПИСАНИЕ JOIN ДИСЦИПЛИНА) WHERE ШифрСпец = '2204') [НазваниеДисц] или

p НазваниеД (s ШифрСпец = '2204' (РАСПИСАНИЕ «ДИСЦИПЛИНА)).

В этом запросе выполняются следующие операции:

· соединение таблиц РАСПИСАНИЕ и ДИСЦИПЛИНА по полю ШифрДисц, так как в таблице РАСПИСАНИЕ нет поля НазваниеДисц;

· затем над результатом соединения выполняется операция селекции, т.е. отбираются только те записи, поле ШифрСпец которых имеет значение 2204;

· и, наконец, выполняется операция проекции, которая оставляет в результирующем множестве записей единственное поле НазваниеДисц.

2. Получить список аудиторий, свободных в понедельник в 15 ч. 20 мин. и вмещающих не менее 100 человек:

((АУДИТОРИЯ where Вместимость >=100) [НомерАуд]) except ((((РАСПИСАНИЕ join ЗАНЯТИЕ) join ПАРА) where ВремяНач = '15:20' and НомерДня = 1) [НомерАуд]).

В этом запросе выполняются следующие операции:

· селекция из таблицы АУДИТОРИЯ тех записей, поле Вместимость которых имеет значение не менее 100;

· проекция предыдущего результата на поле НомерАуд, в результате получается список всех номеров аудиторий заданной вместимости;

· соединение таблицы РАСПИСАНИЕ с таблицей ЗАНЯТИЕ по полю НомерЗан, в результате чего получается список всех строк расписания, в которых присутствуют поля НомерПары и НомерДня;

· соединение предыдущего результата с таблицей ПАРА по полю НомерПары, в результате чего получается множество строк расписания с полем ВремяНач;

· селекция предыдущего результата, в результате которой из него исключаются все строки, не удовлетворяющие предикату ВремяНач = '15:20' and НомерДня = 1, то есть список занятий в указанное время;

· проекция предыдущего результата по полю НомерАуд, таким образом, в результате второй цепочки операций мы получаем множество аудиторий, которые заняты в расписании в указанное время и день;

· вычитание множества аудиторий, полученных на предыдущем шаге из множества аудиторий, полученных на втором шаге, в результате получаем искомый список аудиторий.

3. Получить список номеров и старост групп, занятия которых проходят хотя бы раз в заданной аудитории, например 346:

((ГРУППА join РАСПИСАНИЕ) where НомерАуд = '346') [НомерГруппы, Староста].

В этом запросе выполняются следующие операции:

· соединение таблицы ГРУППА с таблицей РАСПИСАНИЕ, в результате которого получается множество строк занятий, расширенных полями из таблицы ГРУППА;

· селекция предыдущего результата для аудитории с номером 346, в результате получаем расписание занятий, проходящих в аудитории 346;

· проекция предыдущего результата на поля НомерГруппы и Староста, таким образом, получается искомое множество групп и их старост.

4. Получить расписание занятий для заданного преподавателя с указанием дня недели, номера аудитории, номера группы и времени начала:

((((((ПРЕПОДАВАТЕЛЬ where ИмяПрепод = 'Макаров Н.П.') [ШифрПрепод]) join РАСПИСАНИЕ) join ЗАНЯТИЕ) join ПАРА) join ДЕНЬ) [НазваниеДня, ВремяНач, НомерАуд, НомерГруппы].

В этом запросе выполняются следующие операции:

· селекция таблицы ПРЕПОДАВАТЕЛЬ по фамилии преподавателя, в результате чего выбирается одна запись, соответствующая заданной фамилии (если нет однофамильцев);

· проекция предыдущего результата на поле ЩифрПрепод, в результате получается единственное значение шифра преподавателя;

· последовательное соединение предыдущего результата с таблицами РАСПИСАНИЕ по полю ШифрПрепод, ЗАНЯТИЕ по полю НомерЗан, ПАРА по полю НомерПары, ДЕНЬ по полю НомерДня, в результате получается множество строк расписания занятий для заданного преподавателя;

· проекция предыдущего результата на указанные в запросе поля.

5. Получить расписание лекционных занятий с указанием аудитории, преподавателя и дисциплины:

(((((РАСПИСАНИЕ join ВИДЗАН) where НазваниеВидаЗан = 'Лекции')[НомерАуд, ШифрПрепод, ШифрДисц]) join ПРЕПОДАВАТЕЛЬ) join ДИСЦИПЛИНА)[НомерАуд, ИмяПрепод, НазваниеДисц].

В этом запросе выполняются следующие операции:

· соединение таблицы РАСПИСАНИЕ с таблицей ВИДЗАН по полю ШифрВидЗан, в результате получается множество строк расписания с добавленными полями таблицы ВИДЗАН;

· селекция предыдущего результата по значению поля НазваниеВидаЗан, равного 'Лекции', в результате получается множество лекционных занятий;

· проекция предыдущего результата на поля, требующиеся на выходе запроса, то есть НомерАуд, ШифрПрепод, ШифрДисц;

· соединение проекции с таблицами ПРЕПОДАВАТЕЛЬ и ДИСЦИПЛИНА соответственно по полям ШифрПрепод и ШифрДисц с целью получения доступа к полям ИмяПрепод и НазваниеДисц;

· проекция предыдущего результата на поля, затребованные в исходном запросе.

6. Решение предыдущего примера нельзя считать оптимальным, так как первое соединение возвращает много лишних записей. Эффективность запроса будет выше, если на первое место поставить операцию селекции по виду занятий. Эта перестановка позволяет на первом шаге отсечь все другие виды занятий, кроме лекций, и тем самым намного сократить мощность результата соединения, выполняющегося на втором шаге:

((((РАСПИСАНИЕ join (ВИДЗАН where НазваниеВидаЗан = 'Лекции'))[НомерАуд, ШифрПрепод, ШифрДисц]) join ПРЕПОДАВАТЕЛЬ) join ДИСЦИПЛИНА)[НомерАуд, ИмяПрепод, НазваниеДисц].

На этом примере можно сделать вывод о том, что при конструировании запроса на языке реляционной алгебры могут быть несколько вариантов решения, эффективность которых может сильно различаться между собой. Из множества вариантов решения следует выбирать тот, который с самых первых операций максимально уменьшает количество записей, участвующих в последующих операциях. При этом следует учитывать и состав записей в таблицах. Так запрос в примере 7 будет тем эффективнее запроса в примере 6, чем меньший процент во множестве видов занятий занимают лекции.

7. Подсчитать общее количество часов в расписании для каждого преподавателя:

GROUP ((РАСПИСАНИЕ join ПРЕПОДАВАТЕЛЬ) [ИмяПрепод]) BY (ИмяПрепод) ADD COUNT(*)*2 AS ВсегоЧасов.

В этом запросе выполняются следующие операции:

· соединение таблицы РАСПИСАНИЕ с таблицей ПРЕПОДАВАТЕЛЬ по полю ШифрПрепод;

· проекция предыдущего результата на поле ИмяПрепод;

· группирование записей, относящихся к одному и тому же преподавателю в одну группу, вычисление для каждой такой группы общего количества записей и удвоение результата, так как каждое занятие состоит из двух часов.

Таким образом, получается таблица, состоящая из двух столбцов: ИмяПрепод и ВсегоЧасов и количества записей, равного количеству преподавателей занесенных в таблицу РАСПИСАНИЕ. В запросе использованы вычисления по вертикали и по горизонтали.

8. Подсчитать среднее количество студентов в группе для каждой специальности:

GROUP ГРУППА BY (ШифрСпец) ADD AVG (КоличСтудентов) AS СредКоличСтуд.

В этом запросе для каждой специальности образуется группа записей, для которой вычисляется среднее значение поля КоличСтудентов и полученное значение добавляется к списку полей результата, то есть снова получаем таблицу из двух полей и количеством записей равного количеству специальностей.

9. Получить список аудиторий, вместимость которых позволяет разместить в них группу 144:

АУДИТОРИЯ where Вместимость >= ((ГРУППА where НомерГруппы = 144)[КоличСтудентов]).

В данном примере использован вложенный запрос, который вычисляет количество студентов в группе 144. Здесь можно отметить некоторую некорректность использования результата реляционной операции как скалярного выражения в предикате внешней операции селекции. Однако подобного рода вложенные запросы реализованы в практическом языке манипулирования данными SQL.

Типы запросов к БД

 

В СУБД Access построить запрос можно в одном из двух режимов:

Ø режим конструктора (ручное конструирование, языки QBE или SQL);

Ø режим мастера (автоматизированное конструирование).

В свою очередь, в режиме конструктора можно использовать одновременно один из двух языков: QBE или SQL. Это очень удобно для изучения тех или иных элементов одного языка с помощью другого, так как при внесении изменений в запрос на одном из этих языков они немедленно вносятся и на другом. Таким образом, можно утверждать, что конструктор запросов СУБД Access содержит в себе преобразователь текста запроса с языка QBE на язык SQL и наоборот. Однако следует заметить, что язык SQL, в отличие от QBE, помимо средств манипулирования данными, предназначенных для выполнения операций выборки, удаления, изменения и добавления данных, содержит еще средства определения данных, предназначенных для создания новых структур данных (таблиц, индексов, представлений и т.д.), их модификации и удаления. В СУБД Access использование эти средств называется управляющим запросом и в данном пособии не рассматривается.

В СУБД Access используется так называемый JET SQL, который содержит некоторые отличия и ограничения по сравнению со стандартным ANSI SQL.

Запросы, связанные с манипулированием данными, можно разделить на следующие типы:

Ø запрос на выборку ( SELECT ) – создает динамическое отношение с использованием большинства рассмотренных выше реляционных операций, при определенных ограничениях его можно редактировать; этот тип запроса является основой для конструирования большинства других типов запросов;

Ø запрос на создание новой таблицы ( SELECT … INTO ) – аналогичен запросу на выборку с единственным отличием, что результат запроса запоминается в новой таблице и отрывается от своего источника, т.е. является статическим; результат этого з



Поделиться:


Последнее изменение этой страницы: 2016-12-30; просмотров: 338; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.218.172.210 (0.137 с.)