Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика и ВТ Брукшир.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.07 Mб
Скачать

9.3.5Вопросы реализации

Теперь, когда мы познакомились с основными реляционными операциями, рассмотрим заново общую структуру системы базы данных. Вспомните, что данные базы в действительности хранятся на запоминающем устройстве. Чтобы освободить программиста от подробностей фактической реализации хранения, предусмотрена система управления базой данных, которая позволяет писать приложения в терминах модели базы данных, такой как рассмотренная реляционная модель. В обязанности СУБД входит получение команд в терминах реляционной модели и преобразование их в действия, проводимые в действительной структуре хранения. Это делается за счет предоставления набора процедур, которые приложение может использовать как абстрактные инструменты. Таким образом, СУБД, основанная на реляционной модели, будет включать процедуры для выполнения операций SELECT, PROJECT и JOIN, которые можно вызвать из приложения при помощи синтаксической структуры, совместимой с базовым языком. В этом смысле приложения можно создавать, считая, что данные хранятся в простой табличной форме реляционной модели.

Полезно представить, как система управления базой данных могла бы записывать данные в базу и как устройство хранения могло бы воздействовать на работу СУБД. Например, простейший способ, при помощи которого СУБД может реализовать отношение — записать его в виде последовательного файла, в котором каждая строка является логической записью. Однако эта стратегия подразумевает, что выполнение операции SELECT потребует последовательного поиска в файле, а этот процесс в больших отношениях занимает много времени. Поэтому СУБД, вероятнее, будет хранить отношения как индексированный файл или применять методы хэширования для обеспечения быстрого доступа к данным. Например, если индексировать отношение EMPLOYEE из рис. 9.5 по идентификационному номеру сотрудника, то информацию об определенном сотруднике можно будет быстро разыскать оператором SELECT, зная его идентификационный номер. Эти вопросы очень важны при разработке, и решение часто зависит от того, как будет использоваться база данных. Дело в том, что основные структуры данных и файловые структуры являются строительными блоками, из которых создаются системы управления базами данных.

И, наконец, необходимо заметить, что в современных системах управления базами данных операции SELECT, PROJECT и JOIN не обязательно присутствуют в своей первоначальной форме. Чаще они образуют операции, которые являются комбинациями этих базовых шагов. Пример тому — язык SQL.

9.3.6Язык sql

Язык под названием SQL (Structured Query Language — язык структурированных запросов) широко используется программистами, создающими приложения для работы с базами данных в терминах реляционной модели. Одна из причин его популярности состоит в том, что он стандартизирован Национальным институтом стандартизации США. Другая причина — этот язык был создан и распространен компанией IBM, что гарантирует всестороннюю проверку и испытание.

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

Начнем с того, что запросы, включающие комбинации операций SELECT, PROJECT и JOIN, можно выразить одним оператором языка SQL. Кроме того, хотя кажется, что запрос на SQL выражается в императивной форме, в действительности он является описательным оператором. Вы должны читать оператор SQL как описание нужной информации, а не как последовательность действий. Важность этого подхода состоит в том, что SQL освобождает программистов от сложностей разработки алгоритмов для управления отношениями — им нужно просто описать желаемую информацию.

В качестве примера оператора SQL возьмем наш последний запрос, то есть состоящий из трех шагов алгоритм, для получения всех идентификационных номеров и соответствующих отделов. На SQL весь запрос можно выразить одним оператором:

select Emplld. Dept from ASSIGNMENT, JOB where ASSIGNMENT.Jobld = JOB.Jobld and ASSIGNMENT.TermDate = '*'

Как показывает этот пример, в каждом операторе SQL может быть три предложения: select, from и where. Грубо говоря, такой оператор — это запрос на применение операции JOIN ко всем отношениям, перечисленным в предложении from, выбор операцией SELECT тех строк, которые удовлетворяют условиям в предложении where, и последующий выбор при помощи операции PROJECT строк в предложении select. (Обратите внимание, что терминология в некотором смысле перевернута, то есть предложение select в операторе SQL идентифицирует атрибуты, используемые в операции PROJECT.) Приведем несколько простых примеров.

Оператор

select Name. Address from EMPLOYEE

получает список имен и адресов всех сотрудников, присутствующих в отношении EMPLOYEE. Заметьте, что это простая операция PROJECT. Оператор

select Emplld, Name. Address, SSN

from EMPLOYEE

where Name = 'Мери Кларк'

получает всю информацию из строки, относящейся к Шери Кларк в отношении EMPLOYEE. В действительности это операция SELECT. Оператор

select Name, Address

from EMPLOYEE

where Name = 'Шери Кларк'

получает имя и адрес Шери Кларк из отношения EMPLOYEE. Это комбинация операций SELECT и PROJECT. Оператор

select EMPLOYEE.Name. ASSIGNMENT.StartDate

from EMPLOYEE. ASSIGNMENT

where EMPLOYEE.EmplId = ASSIGNMENT.EmplId

получает список имен всех сотрудников и даты начала их работы. Обратите внимание, что это результат применения операции JOIN к отношениям EMPLOYEE и ASSIGNMENT и последующего выбора операциями SELECT и PROJECT подходящих строк и атрибутов, что указано предложениями where и select.

Завершим раздел обзором операторов SQL, которые помимо выполнения запросов позволяют определять структуру отношений, создавать отношения и модифицировать их содержимое. Далее приведены примеры операторов insert into, delete from и update.

Оператор

insert into EMPLOYEE

values C42Z12'. 'Сью Барт', 'ул. Красивая. 33'.

444 661 111')

добавляет в отношение EMPLOYEE строку с данными значениями;

delete from EMPLOYEE where Name = 'Джерри Смит'

удаляет строку, относящуюся к Джерри Смит, из отношения EMPLOYEE; a

update EMPLOYEE

set Address = 'пр. Наполеона. 1812'

where Name = 'Джо Бейкер'

изменяет адрес в строке, связанной с Джо Бейкером, в отношении EMPLOYEE.