С.Д. Кузнецов - Основы баз данных (1121716), страница 7
Текст из файла (страница 7)
(Иначе было бы невозможно, например, получить имя руководителя отдела с известным номером.) Чтобы информационная система могла эффективно выполнять свои базовые функции, необходимо обеспечить многоключевой доступ к файлу служАШие по уникальным ключам (ключ называется уникальным, если его значения гарантированно различны во всех записях файла) слу имя и СЛУ НОМЕР. Очевидно, что в противном случае для выполнения наиболее часто используемых операций получения данных о конкретном служащем понадобится последовательный просмотр в среднем половины записей файла. Кроме того, должна обеспечиваться возможность эффективного выбора всех записей с общим значением слу Отл нсмеР, т. е. доступ по неуникальному ключу.
Если не поддерживать специальный механизм доступа, то для получения данных об отделе в целом в общем случае потребуется полный просмотр файла. требуемая общая структура файла служлл(ие показана на рис. 1.6. Но даже в этом случае, чтобы получить численность отдела или обгци й размер зарплаты, система должна будет выбрать все записи о служащих указанною отдела и посчитать соответствуклцие общие значения. Таким образом, мы видим, что при реализации даже такой простой информационной системы на базе файловой системы возникают следующие затруднения: 2В Лекция 1 Эволюция устройств внешней памяти и программных систем управления данными Рис. 1.6. Структура файла слухлщие на уровне приложения (случай одного файла) ° требуется создание достаточно сложной надстройки для многоключе- вого доступа к файлам; ° возникает существенная избыточность данных (для каждого служаще- го повторяется имя руководителя его отдела); ° требуется выполнение массовой выборки и вычислений для получения суммарной информации об отделах.
Кроме того, если в ходе эксплуатации системы потребуется, например, обеспечить операцию выдачи списков служащих, получающих указанную зарплату, то либо придется при выполнении каждой такой операции полностью просматривать файл, либо нужно будет реструктурировать файл служдщие, объявляя ключевым и поле слзг здрп. Для улучшения ситуации можно было бы поддерживать два много- ключевых файла: слъ'щдщие и отделы. Первый файл должен был бы содер- жатЬ ПОЛЯ СЛУ ИМЯ, СЛУ НОМЕР, Еятг Стлт, СЛУ ЗДРП И СЛУ ОтД НОМЕР, а второй — 0тд МОМЕЕ, От~ рух (номер удостоверения служащего, являющегося руководителем отдела)„ОТД Елу здрп (общий размер зарплаты служагцих данного отдела) и Отд РАзмеР (обтцее число служащих в отделе).
Структура этих файлов показана на рис. !.7. Введение этих двух файлов позволило бы преодолеть большинство неудобств, перечисленных в предыдущем абзаце. Каждый из файлов содержал Рис. 1.7. Структура файла служдщие и отделы на уровне приложения (случай двух файлов) 29 Основы баз данных Курс бы только не дублируемую информацию, не возникала бы необходимость в динамических вычислениях суммарной информации по отделам. Но заметим, что при таком переходе наша информационная система должна обладать некоторыми новыми особенностями, сближающими ее с СУБД.
Целостность данных Теперь система должна «знать», что она работает с двумя информационно связанными файлами (это шаг в сторону схемы базы данных), должна иметь информацию о структуре и смысле каждого поля. Например, системе должно быть известно, что у полей СЛУ ОТД номеР в файле СлужАЩИЕ и ОТД Номер в файле Отделы один и тот же смысл — номер отдела. Кроме того, система должна учитывать, что в ряде случаев изменение данных в одном файле должно автоматически вызывать модификацию второго файла, чтобы общее содержимое файлов бьио согласованным. Например, если на работу принимается новый служащий, то нужно добавить запись в файл СЛУЖАЩИЕ,атакжедолжнымобразомизменитьполяОтд Слу ЗАРПиОтд РАЗ- меР в записи файла Отделы, соответствующей отделу этого служащего.
Более точно, система должна руководствоваться следующими правилами: 1, если в файле СлужАЩИЕ содержится запись со значением поля слу Отд номеР, равным и, то и в файле отделы должна содержаться запись со значением поля Отд НОМЕР, также равным гд 2. если в файле ОТДЕЛЫ содержится запись со значением поля Отд уук, равным м, то и в файле служлщие должна содержаться запись со значением поля СЛУ НОМЕР, также равным а; в следующих лекциях мы увидим, что правила (!) и (2) являются частными случаями общего правила ссмлочной цедосаности: поле слу Отд номеР содержит «ссылки» на записи таблицы ОТДЕЛЫ, и поле ОТД РУК содержит «ссылки» на записи таблицы служАЩие; 3. при любом корректном состоянии информационной системы значение поля отд СЛУ зАРп любой записи отд к файла отделы должно быть равно сумме значений поля СЛУ ЗАЕЛ всех тех записей файла служлщие, в которых значение поля слу отд номеР совпадает со значением поля ОТД НОМЕР записи отд К; 4.
при любом корректном состоянии информационной системы значение поля Отд РАзмеР любой записи отд к файла Отделы должно быть равно числу всех тех записей файла СЛУЖАЩИЕ, в которых значение поля слу Отд номеР совпадает со значением поля Отд номеР записи отд к; вследующихлекцияхмыувидим,что правила(3) и(4) представляют собой примеры общих ограничений целостности базы данных. Понятие согласованности„или целостности, данных является ключевым понятием баз данных.
Фактически, если информационная система 30 Лекция 1 Эволюция устройств внешней памяти и программных систем управления данными (даже такая простая, как в нашем примере) поддерживает согласованное хранение данных в нескольких файлах, можно говорить о том, что она поддерживает базу данных (БД).
Если же некоторая вспомогательная система управления данными позволяет работать с несколькими файлами, обеспечивая их согласованность, можно назвать ее системой управления базами данных (СУБД). Уже только требование поддержания согласованности данных в нескольких файлах не позволяет при построении информационной системы обойтись библиотекой функций: такая система должна обладать некоторыми собственными данными (их принято называть метаданными), определяющими целостность данных.
В нашем примере информационная система должна отдельно сохранять метаданные о структуре файлов СЛУЖАЩИЕ и ОТДЕЛЫ, а также правила, определяющие условия целостности данных в этих файлах (принято считать, что правила также составляют часть металанных). Языки запросов Но обеспечение целостности данных — это далеко не все, что обычно требуется от СУБД. Начнем с того, что даже в нашем примере пользователю информационной системы будет не слишком просто получить, например, общую численность отдела, в котором работает Петр Иванович Сидоров.
Придется сначала узнать номер отдела, в котором работает указанный служащий, а затем установить численность этого отдела. Было бы гораздо проще, если бы СУБД позволяла сформулировать такой запрос на языке, более близком полыователям. Такие языки называются языками запросов к базам данных. Например, на языке запросов БОь наш запрос можно было бы выразить в следующей форме (залрос1): ВЕЬЕОТ ОТД РАЗМЕР ГНОМ СЛУЖАЩИЕ, ОТДЕЛЫ ХНЕКЕ ОЛУ ИМЯ = 'ПЕТР ИВАНОВИЧ СИДОРОВ' АЫО ОЛУ ОТД НОМЕР = ОТД НОМЕР; Это пример запроса на языке Б( ) с «лолусоедиленяелт»: с одной стороны, запрос адресуется к двум файлам — СЛУЖАЩИЕ и ОТДЕЛЫ, но с другой стороны, данные выбираются только из файла ОТДЕЛЫ. Условие СЛУ ОТД НОМЕР = ОТД НОМЕР всего лишь «ограничивает» интересующий нас набор записей об отделах до одной записи, если Петр Иванович Сидоров действительно работает на данном предприятии.
Если же Петр Иванович Сидоров не работает на предприятии, то условие ОЛУ ИМЯ 'ПЕТР ИВАНОВИЧ СИДОРОВ' НЕ будет удовлетворяться ни для одной записи файла служАЖИЕ, и поэтому запрос выдаст пустой результат. 31 Основы баз данных Курс Возможна и другая формулировка того же запроса (залрос2): ВЕЧЕСТ ОТД РАЗМЕР ГНОМ ОТДЕЛЫ ХНЕЯЕ ОТД НОМЕР (ВЕЬЕСТ СЛУ ОТД НОМЕР ГНОМ СЛУЖАЩИЕ ХНЕЕЕ СЛУ ИМЯ = 'ЛЕТР ИВАНОВИЧ СИДОРОВ' ); Это пример запроса на языке В()Е с вложенным подзапросом.
Во вложенном подзапросе выбирается значение поля слу отд номеР из записи файла СлужАщие, в которой значение поля Слу имЯ равняется строковой константе 'летР ивАнович сидовов'. Если такая запись существует, то она единственная, поскольку поле СЛУ иМЯ является уникальным ключом файла служАЩие. Тогда результатом выполнения подзапроса будет единственное значение — номер отдела, в котором работает Петр Иванович Сидоров. Во внешнем запросе это значение будет ключом доступа к файлу отделы, и снова будет выбрана только одна запись, поскольку поле отд номеР является уникальным ключом файла отделы. Если же на данном предприятии Петр Иванович Сидоров не работает, то подзапрос выдаст пустой результат, и внешний запрос тоже выдаст пустой результат. Приведенные примеры показывают, что при формулировке запроса с использованием В )Е можно не задумываться о том, как будет выполняться этот запрос.
Среди метаданных базы данных будет содержаться информация о том, что поле слу имя является ключевым лля файла служАщие (т. е. по заданному значению имени служащего можно быстро найти соответствующую запись или убедиться в том, что запись с таким значением поля слу имя в файле отсутствует), а поле отд номеР— ключевое дяя файла отделы (и более того, оба ключа в соответствующих файлах являются уникальными), и система сама воспользуется этим. Можно формально доказать, что формулировки запрос! и запрос2 эквивалентны, т. е. вне зависимости от состояния данных всегда производят один и тот же результат. Наиболее вероятным способом выполнения запроса в обеих формулировках будет выборка записи из файла служАщие со значением поля слу имя, равным строке петР ивАнович сидовов, взятие из этой записи значения поля Слу отд НОМЕР и выборка из таблицы отделы записи с таким же значением поля отд ном. Если же, например, возникнет потребность в получении списка сотрудников, не соответствующих занимаемой должности, то достаточно обратиться к системе с запросом (залросЗ): 32 Лекция 1 Эволюция устройств внешней памяти и программных систем управления данными ЭЕКЕСТ СЛУ ИМЯ, СЛУ НОМЕР РКСМ СЛУЖАЩИЕ ЯНЕКЕ ГЛУ СТАТ = "НЕТ".
и система сама выполнит необходимый полный просмотр файла СЛУЖАЩИК, поскольку поле с1пг стдт не является ключевым, н другого способа выполнения не существует. Транзакции, журнализация и многопользовательский режим Далее, представим себе, что в первоначальной реализации информационной системы, основанной на использовании библиотек расширенных методов доступа к файлам, обрабатывается операция принятия на работу нового служащего. Следуя требованиям согласованного изменения файлов, информационная система вставляет новую запись в файл слУжАщие и собирается модифицировать соответствующую запись файла Отдклы (или вставлять в этот файл новую запись, если служащий является первым в своем отделе), но именно в этот момент происходит (например) аварийное выключение питания компьютера.