Тема_1 (1122328), страница 5
Текст из файла (страница 5)
Кузнецов. Базы данных.53 Технология БД. ФунПотребности информационных систем (14)Целостность данных (4)Понятие согласованности, или целостности, данных являетсяключевым понятием баз данных.Фактически, если в ИС поддерживается согласованное хранениеданных в нескольких файлах, можно говорить о том, что в нейподдерживается база данных (БД).Если же некоторая вспомогательная система управления даннымипозволяет работать с несколькими файлами, обеспечивая ихсогласованность, можно назвать ее системой управления базамиданных (СУБД).Требование поддержки согласованности данных в нескольких файлахне позволяет при построении ИС обойтись библиотекой функций: такаясистема должна обладать некоторыми собственными данными (ихпринято называть метаданными), определяющими целостностьданных.В нашем примере ИС должна отдельно сохранять метаданные оструктуре файлов СЛУЖАЩИЕ и ОТДЕЛЫ, а также правила,определяющие условия целостности данных в этих файлах (принятосчитать, что правила также составляют часть метаданных).03.09.2009С.Д.
Кузнецов. Базы данных.54 Технология БД. ФунПотребности информационных систем (15)Языки запросов (1)Но обеспечение целостности данных – это далеко невсе, что обычно требуется от СУБД.Начнем с того, что даже в нашем примерепользователю ИС будет не слишком простополучить, например, общую численность отдела, вкотором работает Петр Иванович Сидоров.Придется сначала узнать номер отдела, в которомработает указанный служащий, а затем установитьчисленность этого отдела.Было бы гораздо проще, если бы СУБД позволяласформулировать такой запрос на языке, болееблизком пользователям.Такие языки называются языками запросов к базамданных.03.09.2009С.Д.
Кузнецов. Базы данных.55 Технология БД. ФунПотребности информационных систем (16)Языки запросов (2)На языке запросов SQL наш запрос можно было бы выразить вследующей форме (запрос 1):SELECT ОТД_РАЗМЕРFROM СЛУЖАЩИЕ, ОТДЕЛЫWHERE СЛУ_ИМЯ = ‘ПЕТР ИВАНОВИЧ СИДОРОВ’ ANDСЛУ_ОТД_НОМЕР = ОТД_НОМЕР;Это пример запроса на языке SQL с «полусоединением»: cодной стороны, запрос адресуется к двум файлам –СЛУЖАЩИЕ и ОТДЕЛЫ, но с другой стороны, данныевыбираются только из файла ОТДЕЛЫ.Условие СЛУ_ОТД_НОМЕР = ОТД_НОМЕР всего лишь«ограничивает» интересующий нас набор записей об отделахдо одной записи, если Петр Иванович Сидоров действительноработает на данном предприятии.Если же Петр Иванович Сидоров не работает на предприятии,то условие СЛУ_ИМЯ = ‘ПЕТР ИВАНОВИЧ СИДОРОВ’ небудет удовлетворяться ни для одной записи файлаСЛУЖАЩИЕ, и поэтому запрос выдаст пустой результат.03.09.2009С.Д.
Кузнецов. Базы данных.56 Технология БД. ФунПотребности информационных систем (17)Языки запросов (3)Возможна и другая формулировка того же запроса (запрос 2):SELECT ОТД_РАЗМЕРFROM ОТДЕЛЫWHERE ОТД_НОМЕР =(SELECT СЛУ_ОТД_НОМЕРFROM СЛУЖАЩИЕWHERE СЛУ_ИМЯ = ‘ПЕТР ИВАНОВИЧ СИДОРОВ');Это пример запроса на языке SQL с вложенным подзапросом.Во вложенном подзапросе выбирается значение поля СЛУ_ОТД_НОМЕРиз записи файла СЛУЖАЩИЕ, в которой значение поля СЛУ_ИМЯравняется строковой константе ‘ПЕТР ИВАНОВИЧ СИДОРОВ’.Если такая запись существует, то она единственная, поскольку полеСЛУ_ИМЯ является уникальным ключом файла СЛУЖАЩИЕ.Тогда результатом выполнения подзапроса будет единственное значение –номер отдела, в котором работает Петр Иванович Сидоров.Во внешнем запросе это значение будет ключом доступа к файлуОТДЕЛЫ, и снова будет выбрана только одна запись, поскольку полеОТД_НОМЕР является уникальным ключом файла ОТДЕЛЫ.Если же на данном предприятии Сидоров не работает, то подзапросвыдаст пустой результат, и внешний запрос тоже выдаст пустой результат.03.09.2009С.Д.
Кузнецов. Базы данных.57 Технология БД. ФунПотребности информационных систем (18)Языки запросов (4)Приведенные примеры показывают, что при формулировкезапроса с использованием SQL можно не задумываться о том,как будет выполняться этот запрос.Среди метаданных базы данных будет содержатьсяинформация о том, что поле СЛУ_ИМЯ является ключевым дляфайла СЛУЖАЩИЕ (т. е. по заданному значению именислужащего можно быстро найти соответствующую запись илиубедиться в том, что запись с таким значением поля СЛУ_ИМЯв файле отсутствует), а поле ОТД_НОМЕР – ключевое дляфайла ОТДЕЛЫ (и более того, оба ключа в соответствующихфайлах являются уникальными), и система сама воспользуетсяэтим.Можно формально доказать, что формулировки запрос 1 изапрос 2 эквивалентны, т.
е. вне зависимости от состоянияданных всегда производят один и тот же результат.03.09.2009С.Д. Кузнецов. Базы данных.58 Технология БД. ФунПотребности информационных систем (19)Языки запросов (5)Наиболее вероятным способом выполнения запроса в обеихформулировках будет выборка записи из файла СЛУЖАЩИЕсо значением поля СЛУ_ИМЯ, равным строке ‘ПЕТРИВАНОВИЧ СИДОРОВ’, взятие из этой записи значения поляСЛУ_ОТД_НОМЕР и выборка из таблицы ОТДЕЛЫ записи стаким же значением поля ОТД_НОМ.Если же, например, возникнет потребность в получении спискасотрудников, не соответствующих занимаемой должности, тодостаточно обратиться к системе с запросом (запрос 3):SELECT СЛУ_ИМЯ, СЛУ_НОМЕРFROM СЛУЖАЩИЕWHERE СЛУ_СТАТ = ‘НЕТ’;Тогда система сама выполнит необходимый полный просмотрфайла СЛУЖАЩИЕ, поскольку поле СЛУ_СТАТ не являетсяключевым, и другого способа выполнения не существует.03.09.2009С.Д.
Кузнецов. Базы данных.59 Технология БД. ФунПотребности информационных систем (20)Транзакции, журнализация и многопользовательский режим (1)Далее, представим себе, что в первоначальной реализацииинформационной системы, основанной на использованиибиблиотек расширенных методов доступа к файлам,обрабатывается операция принятия на работу нового служащего.Следуя требованиям согласованного изменения файлов,информационная система вставляет новую запись в файлСЛУЖАЩИЕ и собирается модифицировать соответствующуюзапись файла ОТДЕЛЫ (или вставлять в этот файл новую запись,если служащий является первым в своем отделе), но именно в этотмомент происходит (например) аварийное выключение питаниякомпьютера.Очевидно, что после перезапуска системы ее база данных будетнаходиться в рассогласованном состоянии (точно будут нарушеныдва последние правила ), а может быть, и оба первые правила.Потребуется выяснить это (а для этого нужно явно проверитьсоответствие данных в файлах СЛУЖАЩИЕ и ОТДЕЛЫ) ипривести данные в согласованное состояние.03.09.2009С.Д.
Кузнецов. Базы данных.60 Технология БД. ФунПотребности информационных систем (21)Транзакции, журнализация и многопользовательский режим (2)Проверку и коррекцию можно выполнить, например,следующим образом.Сгруппировать записи файла СЛУЖАЩИЕ по значениямполя СЛУ_ОТД_НОМЕР.Для каждой группы проверить, существует ли в файле ОТДЕЛЫ запись,значение поля ОТД_НОМ которой равняется значению поляСЛУ_ОТД_НОМЕР записей данной группы; если такой записи в файле ОТДЕЛЫ нет, то исключитьгруппу из файла СЛУЖАЩИЕ и перейти к обработкеследующей группы; иначе посчитать число записей в группе и вычислитьсуммарное значение заработной платы; обновить полученными значениями поля ОТД_РАЗМЕР иОТД_СЛУ_ЗАРП соответствующей записи файла ОТДЕЛЫ иперейти к обработке следующей группы.03.09.2009С.Д.
Кузнецов. Базы данных.61 Технология БД. ФунПотребности информационных систем (22)Транзакции, журнализация и многопользовательский режим (3)Настоящие СУБД берут такую работу на себя, поддерживаятранзакционное управление и журнализацию изменений базы данных.Прикладная система не обязана заботиться о поддержке корректностисостояния базы данных, хотя и должна знать, какие цепочки операцийизменения данных являются допустимыми.Представим теперь, что в информационной системе требуетсяобеспечить параллельную (например, многотерминальную) работу сбазой данных служащих и отделов.Если опираться только на использование файлов, то для обеспечениякорректности на все время модификации любого из двух файловдоступ других пользователей к этому файлу будет блокирован.Таким образом, зачисление на работу Петра Ивановича Сидоровасущественно затормозит получение информации о служащем ИванеСидоровиче Петрове, даже если они работают в разных отделах.Настоящие СУБД обеспечивают гораздо более тонкую синхронизациюпараллельного доступа к данным.03.09.2009С.Д.
Кузнецов. Базы данных.62 Технология БД. ФунОсновные функции и компоненты СУБД (1)СУБД как независимый системный компонент (1)До сих пор мы не вычленяли СУБД из состава информационнойсистемыЗдесь видны два дефекта.Во-первых, очевидно, что СУБД должна поддерживать достаточно развитуюфункциональность. Повторять эту функциональность в каждой ИСнеразумно. С другой стороны, неясно, каким образом можно обеспечитьготовый к использованию компонент СУБД, который можно было бывстраивать в информационные системы.Во-вторых, уже должно быть понятно, что набор файлов можно назватьбазой данных только при наличии метаданных.
На рисунке метаданныеявляются принадлежностью информационной системы, и поэтому,например, файлы СЛУЖАЩИЕ и ОТДЕЛЫ можно эффективно использоватьтолько через нашу гипотетическую систему регистрации служащих.03.09.2009С.Д. Кузнецов. Базы данных.63 Технология БД. ФунОсновные функции и компоненты СУБД (2)СУБД как независимый системный компонент (2)Предположим, что предприятию нужна еще и информационнаябухгалтерская система.Очевидно, что для ее работы также потребуются данные ослужащих и отделах.При показанной выше организации системы возможны дваварианта выполнения задачи, ни один из которых не являетсяудовлетворительным.Теоретически можно «внедрить» бухгалтерскую систему в составсистемы регистрации сотрудников.