Администрирование базы данных
Основные задачи администрирования базы данных – обеспечение надежного и эффективного функционирования системы БД, адекватности содержания БД информационным потребностям пользователей, отображения в БД актуального состояния ПО.
Администрирование БД возлагается на администратора (или персонал администрирования, если система БД велика). В задачи администратора входит выполнение нескольких групп функций:
- Администрирование предметной области: поддержка представления БД на концептуальном уровне архитектуры СУБД (общем для всех приложений); адекватное отображение в БД изменений, происходящих в ПО. Последнее требование может подразумевать реструктуризацию (изменение схемы) БД и последующее приведение содержимого БД в соот-ветствие с новой схемой.
- Администрирование БД: поддержка представления БД в среде хранения, эффективная и надежная эксплуатация системы БД. Если на этом уровне проводится реорганизация БД (с целью повышения эффективности работы), то она заключается в следующем:
- изменения в структуре хранимых данных, например, выведение в отдельную таблицу редко используемых данных;
- изменения способов размещения данных в памяти, например:
- разбиение таблицы на части для распределения её по различным фи-зическим носителям с целью распараллеливания доступа к ней;
- построение кластеров (раздел 4.5);
- изменение физических параметров среды хранения, например, размера блока данных в пространстве памяти.
- изменения используемых методов доступа к данным, например, построение индексов или введение хеширования (раздел 4.5).
- Администрирование приложений: поддержка представлений БД для различных групп пользователей механизмами внешнего уровня СУБД. При изменении концептуальной схемы БД или схемы хранения может потребоваться внесение соответствующих изменений в приложения.
- Администрирование безопасности данных: предоставление пользователям прав на доступ к БД и настройка системных средств защиты от несанкцио-нированного доступа.
В состав СУБД обычно включаются вспомогательные средства (различные утилиты), упрощающие администрирование БД.
Словарь-справочник данных
Словарь-справочник данных (ССД) – это программная система, предназначенная для централизованного хранения и использования описания объектов БД (метаданных). Иногда ССД называют каталогом данных. Эта система содержит сведения:
- о владельцах объектов данных, пользователях ресурсов данных и полномочиях их доступа;
- о составе и структуре базы данных;
- об ограничениях целостности;
- о вспомогательных объектах и компонентах информационной системы.
ССД обеспечивает непротиворечивость метаданных, единую точку зре-ния на базу данных всего персонала разработчиков, администраторов и пользователей системы. Метаданные в словаре–справочнике реляционной СУБД обычно организованы в виде набора таблиц и представлений.
Словарь БД служит для поддержки функционирования компонентов программного обеспечения – СУБД и прикладных программ, работающих с БД. Словарь содержит сведения об организации БД, её составе и структуре, описание данных: форматы представления, структуру, методы доступа, способы размещения данных в памяти и т.п. Информация в словаре представлена в виде, удобном для программного использования.
Справочник БД содержит сведения о семантике данных, способах их идентификации, источниках данных и т.п. Справочник предназначен глав-ным образом для документирования разработки БД и справочного обслуживания её пользователей. Информация в справочнике представлена в виде, удобном для восприятия человеком.
Множества метаданных словаря и справочника в значительной мере пересекаются. Более того, они могут реализовываться совместно: во многих РСУБД словарь состоит из таблиц (table), содержащих описание объектов БД, а справочник реализуется с помощью представлений (view) над таблицами словаря.
Далее мы познакомимся с теми механизмами, с помощью которых в СУБД организуется хранение данных и доступ к ним.
"В действительности всё выглядит иначе, чем на самом деле". | |
Станислав Ежи Лец, польский поэт, участник Сопротивления |
Язык SQL. Изучение одной из современных СУБД по выбору - Microsoft SQL Server
Введение в SQL
SQL (Structured Query Language) - это сокращенное название структурированного языка запросов, предоставляющего средства создания и обработки данных в реляционных БД. Независимость от специфики компьютерных технологий, а также поддержка SQL лидерами промышленности в области технологии реляционных баз данных сделали его основным стандартным языком БД.
Все языки манипулирования данными, созданные до появления реляционных БД, разработанные для многих СУБД, были ориентированы на операции с данными, представленными в виде логических записей файлов. Разумеется, это требовало от пользователя детального знания организации хранения данных и серьезных усилий для указания того, какие данные необходимы, где ни размещаются и как их получить. Рассматриваемый язык SQL ориентирован на операции с данными. представленными в виде логически взаимосвязанных Совокупностей таблиц-отношений. Важнейшая особенность структур этого языка состоит в ориентации на конечный результат обработки данных, а не на процедуру этой обработки. SQL сам определяет, где находятся данные, индексы и даже какие наиболее эффективные последовательности операций следует использовать для получения результата, поэтому не надо указывать эти детали в запросе к БД.
Появление теории реляционных БД дало толчок к разработке ряда языков запросов, которые можно отнести к двум классам:
алгебраические языки, позволяющие выражать запросы средствами специализированных операторов, применяемых к отношениям;
языки исчисления предикатов, представляющие собой набор правил для записи выражения, определяющего новое отношение из заданной совокупности существующих отношений. Следовательно, исчисление предикатов есть метод определения того отношения, которое желательно получить, как ответ на запрос из отношений, уже имеющихся в БД.
В 1987 году SQL стал стандартом языков для профессиональных реляционных СУБД и начал внедряться во все распространенные системы. Это связано с рядом следующих моментов. Постоянный рост быстродействия, а также снижение энергопотребления, размеров и стоимости компьютеров привели к резкому расширению возможных рынков их сбыта, круга пользователей, разнообразия типов и цен. Естественно, что расширился спрос на разнообразное программное обеспечение. В борьбе за покупателя фирмы, производящие программное обеспечение, стали выпускать на рынок все более интеллектуальные, а значит, объемные программные комплексы. Приобретая их. многие организации и отдельные пользователи часто не могли разместить их на собственных ЭВМ. Для обмена информацией и ее распространения были созданы сети ЭВМ, где обобщающие программы и данные стали размещать на специальных файловых серверах.
СУБД, работающие с файловыми серверами, позволяют множеству пользователей разных ЭВМ, расположенных достаточно далеко друг от друга, получать доступ к одним и тем же БД. При этом упрощается разработка различных автоматизированных систем управления организациями, учебных комплексов, информационных и других систем, где множество сотрудников или учащихся должны использовать общие данные и обмениваться создаваемой в процессе работы информацией. Однако при таком подходе вся обработка запросов из программ или с терминалов пользовательских ЭВМ на них и выполняется, поэтому для реализации даже простого запроса необходимо считывать из файлового сервера или записывать на сервер целые файлы, а это ведет к конфликтным ситуациям и перегрузке сети, Для исключения указанных недостатков была предложена технология клиент/сервер, однако при этом нужен единый язык общения с сервером - и в его качестве был выбран SQL.
Реализация в SQL концепции операций, ориентированных на табличное представление данных, позволила создать компактный язык с небольшим набором предложений. SQL может использоваться как для выполнения запросов, так и для построения прикладных программ. В нем существуют:
предложения определения данных - определение БД, а также определение и уничтожение таблиц и индексов;
запросы на выбор данных - предложение SELECT;
предложения модификации данных - добавление, удаление и изменение данных;
предложения управления данными - предоставление и отмена привилегий на доступ к данным, управление транзакциями и другие.
Кроме того. SQL предоставляет возможность выполнять в этих предложениях:
- арифметические вычисления, включая разнообразные функциональные преобразования, обработку текстовых строк и выполнение операции сравнения значений арифметических выражений и текстов;
- упорядочение строк или столбцов при выводе содержимого таблиц на печать или экран дисплея;
- создание представлений, позволяющих пользователям интерпретировать данные без увеличения их объема в БД;
- сохранение выводимого по запросу содержимого таблицы, нескольких таблиц или представления в другой таблице;
- группирование данных и применение к этим группам таких операций, как среднее, сумма, максимум, минимум, число элементов и т.п.
Стандарт SQL определяется ANSI (американским национальным институтом стандартов) и в данное время также принимается isq (международной организацией по стандартизации). Однако большинство коммерческих программ БД расширяют SQL без уведомления ANSI, добавляя различные другие особенности в этот язык которые, как они считают, будут весьма полезны. Иногда это несколько нарушает стандарт языка, хотя хорошие идеи имеют тенденцию развиваться и вскоре становятся стандартами.
Язык SQL является основой многих СУБД, т.к. он отвечает за физическое структурирование и запись данных на диск, а также за физическое чтение данных с диска и позволяет принимать SQL-запросы от других компонентов СУБД и пользовательских приложений. Таким образом, SQL является мощным инструментом, который обеспечивает пользователям, программам и вычислительным системам доступ к информации, содержащейся в реляционных БД.
Основные достоинства языка SQL заключается в следующем:
- стандартность языка SQL - как уже было сказано, его использование в программах стандартизировано международными организациями;
- независимость от конкретных СУБД - все распространенные СУБД используют SQL, т.к. реляционную БД и программы, которые с ней работают, можно перенести с одной СУБД на другую с минимальными доработками;
- возможность переноса с одной вычислительной системы я другую - СУБД может быть ориентирована на различны, вычислительные системы, однако приложения, созданные с помощью SQL, допускают использование как для локальных БД так и для крупных многопользовательских систем;
- реляционная основа языка - SQL является языком реляционных БД, поэтому он стал популярным тогда- когда популярной стала реляционная модель представления данных. Табличная структура реляционной БД хорошо понятна, поэтому язык SQL является простым и легким для изучения;
- возможность создания интерактивных запросов - SQL обеспечивает пользователям немедленный доступ к данным, при этом в интерактивном режиме можно получить результат запроса за очень короткое время без написания сложной программы возможность программного доступа к БД - язык SQL может быть легко использован в приложениях, которым необходимо обращаться к БД. Одни и те же операторы SQL используются как для интерактивного, так и для программного доступа, поэтому части программ, содержащие обращения к БД, можно вначале проверить в интерактивном режиме, а затем встраивать в программу;
- обеспечение различного представления данных - с помощью SQL можно предусмотреть такую структуру данных, что тот или иной пользователь будет видеть различные представления данных. Кроме того, данные из разных частей БД могут быть скомбинированы и представлены пользователю в виде одной простой таблицы, а значит, представления можно использовать для усиления защиты БД и ее настройки под конкретные требования отдельных пользователей;
- возможность динамического изменения и расширения структуры БД - язык SQL даже во время обращения к содержимому позволяет манипулировать структурой БД. Это большое преимущество перед языками статического определения данных, которые запрещают доступ к БД во время изменения ее структуры. Таким образом, SQL обеспечивает гибкость с точки зрения приспособленности БД к изменяющимся требованиям предметной области, не прерывая при этом работу приложения, выполняющую в реальном масштабе времени;
- поддержка архитектуры клиент/сервер - SQL одно из лучших средств для реализации приложений на платформе клиент/сервер. При этом SQL служит связующим звеном между клиентской системой, взаимодействующей с пользователем, и серверной системой, управляющей БД, позволяя каждой из них сосредоточиться на выполнении своих прямых функций
Необходимо сказать, что хотя SQL и задумывался как средство работы конечного пользователя, в конце концов он стал настолько сложным, что превратился в инструмент программиста. Вопросы создания приложений обработки данных с использованием SQL рассматриваются в конце данной главы.
В SQL определены два подмножества языка:
· SQL-DDL (Data Definition Language) - язык определения структур и ограничений целостности баз данных. Сюда относятся команды создания и удаления баз данных; создания, изменения и удаления таблиц; управления пользователями и т.д.
· SQL-DML (Data Manipulation Language) - язык манипулирования данными: добавление, изменение, удаление и извлечение данных, управления транзакциями
Здесь не дается строгое описание всех возможностей SQL-92. Во-первых, ни одна СУБД не поддерживает их в полной мере, а во-вторых, производители СУБД часто предлагают собственные расширения SQL, несовместимые друг с другом. Поэтому мы рассматриваем некое подмножество языка, которое дает общее представление о его специфике и возможностях. В то же время, этого подмножества достаточно, чтобы начать самостоятельную работу с любой СУБД. Более формальный (и более полный) обзор стандартов SQL сделан в статье С. Д. Кузнецова "Стандарты языка реляционных баз данных SQL: краткий обзор",журнал СУБД N 2, 1996 г. Ознакомится с русским переводом стандарта SQL можно на сервере Центра информационных технологий, сравнительное описание различных версий языка (для СУБД Sybase SQL Server, Sybase SQL Anywhere, Microsoft SQL Server, Informix, Oracle Server) приводится в книге Дж.Боуман, С.Эмерсон, М.Дарновски "Практическое руководство по SQL", Киев, Диалектика, 1997.
Следует также отметить, что в отличие от "теретической" терминологии, используемой при описании реляционной модели (отношение, атрибут, кортеж), в литературе при описании SQL часто используется терминология "практическая" (соответственно - таблица, столбец, строка). Здесь мы следуем этой традиции.
Все примеры построены применительно к базе данных publications, содержащей сведения о публикациях (как печатных, так и электронных), относящихся к теме данного курса. Структуру этой базы данных можно посмотреть здесь, ее проектирование описано в разделе 5.4, доступ к ней для практических занятий можно получить через Internet посредством СУБД Leap (реляционная алгебра) или СУБД PostgreSQL. (язык SQL).
Типы данных SQL.
· Символьные типы данных - содержат буквы, цифры и специальные символы.
o CHAR или CHAR(n) -символьные строки фиксированной длины. Длина строки определяется параметром n. CHAR без параметра соответсвует CHAR(1). Для хранения таких данных всегда отводится n байт вне зависимости от реальной длины строки.
o VARCHAR(n) - символьная строка переменной длины. Для хранения данных этого типа отводится число байт, соответствующее реальной длине строки.
· Целые типы данных - поддерживают только целые числа (дробные части и десятичные точки не допускаются). Над этими типами разрешается выполнять арифметические операции и применять к ним агрегирующие функции (определение максимального, минимального, среднего и суммарного значения столбца реляционной таблицы).
o INTEGER или INT- целое, для хранения которого отводится, как правило, 4 байта. (Замечание: число байт, отводимое для хранения того или иного числового типа данных зависит от используемой СУБД и аппаратной платформы, здесь приводятся наиболее "типичные" значения) Интервал значений от - 2147483647 до + 2147483648
o SMALLINT - короткое целое (2 байта), интервал значений от - 32767 до +32768
· Вещественные типы данных - описывают числа с дробной частью.
o FLOAT и SMALLFLOAT - числа с плавающей точкой (для хранения отводится обычно 8 и 4 байта соответсвенно).
o DECIMAL(p) - тип данных аналогичный FLOAT с числом значащих цифр p.
o DECIMAL(p,n) - аналогично предыдущему, p - общее количество десятичных цифр, n - количество цифр после десятичной запятой.
· Денежные типы данных - описывают, естественно, денежные величины. Если в ваша система такого типа данных не поддерживает, то используйте DECIMAL(p,n).
o MONEY(p,n) - все аналогично типу DECIMAL(p,n). Вводится только потому, что некоторые СУБД предусматривают для него специальные методы форматирования.
· Дата и время - используются для хранения даты, времени и их комбинаций. Большинство СУБД умеет определять интервал между двумя датами, а также уменьшать или увеличивать дату на определенное количество времени.
o DATE - тип данных для хранения даты.
o TIME - тип данных для хранения времени.
o INTERVAL - тип данных для хранения верменного интервала.
o DATETIME - тип данных для хранения моментов времени (год + месяц + день + часы + минуты + секунды + доли секунд).
· Двоичные типы данных - позволяют хранить данные любого объема в двоичном коде (оцифрованные изображения, исполняемые файлы и т.д.). Определения этих типов наиболее сильно различаются от системы к системе, часто используются ключевые слова:
o BINARY
o BYTE
o BLOB
· Последовательные типы данных - используются для представления возрастающих числовых последовательностей.
o SERIAL - тип данных на основе INTEGER, позволяющий сформировать уникальное значение (например, для первичного ключа). При добавлении записи СУБД автоматически присваивает полю данного типа значение, получаемое из возрастающей последовательности целых чисел.
В заключение следует сказать, что для всех типов данных имеется общее значение NULL - "не определено". Это значение имеет каждый элемент столбца до тех пор, пока в него не будут введены данные. При создании таблицы можно явно указать СУБД могут ли элементы того или иного столбца иметь значения NULL (это не допустимо, например, для столбца, являющего первичным ключом).