- •Основные определения. Информация. Данные. База данных. Предметная область. Объект. Атрибут. Субд.
- •Функции субд
- •Трехуровневая архитектура бд. Уровни представления бд. Внешний, концептуальный, внутренний уровни. Теоретические основы проектирования бд. Этапы концептуального проектирования.
- •Модели представления данных. Сетевая и иерархическая модели. Преимущества и недостатки. Отношения между объектами.
- •Иерархическая
- •Сетевая
- •Модели представления данных. Реляционная модель. Основные понятия: атрибут, домен, кортеж (запись), ключ. Фундаментальные свойства отношений.
- •Основные операции реляционной алгебры – выборка, проекция, декартово произведение, объединение, разность.
- •Операция выборки
- •Операция проекции
- •Декартово произведение
- •Операция объединения
- •Операция разности
- •Дополнительные операции реляционной алгебры – – соединение, пересечение, деление.
- •Соединение
- •Операция пересечения
- •Операция деления
- •Функциональные зависимости и их свойства. Понятие реляционной целостности.
- •10. Нормализация отношений. Цель нормализации. Аномалии в отношениях. Ненормализованные отношения. Первая нормальная форма.
- •11. Нормализация отношений. Вторая и третья нормальные формы. Аномалии в отношениях.
- •12. Нормализация отношений. Нормальная форма Бойса - Кодда.
- •13. Нормализация отношений. Четвертая нормальная форма. Понятие многозначной зависимости.
- •14. Нормализация отношений. Пятая нормальная форма. Понятие зависимости соединения.
- •15. Предметная область информационной системы. Объекты и связи. Классификация связей. Теоретические основы проектирования бд. Этапы концептуального проектирования.
- •16. Семантическое моделирование данных. Семантическая модель Сущность - Связи(er).
- •6.2. Семантическое моделирование данных, er-диаграммы
- •6.2.1. Семантические модели данных
- •6.2.2. Основные понятия модели Entity-Relationship (Сущность-Связи)
- •6.2.3. Нормальные формы er-схем
- •6.2.4. Более сложные элементы er-модели
- •6.2.5. Получение реляционной схемы из er-схемы
- •17. Понятия транзакции в субд. Свойства асид. Проблемы параллельного выполнения транзакции. Понятие блокировки, методы управления параллельностью.
- •18. Язык структурированных запросов sql. Основные положения.
- •19. Язык структурированных запросов sql. Установка критериев выбора.
- •20. Язык структурированных запросов sql. Обобщение данных с помощью агрегатных функций.
- •21. Язык структурированных запросов sql. Формирование вывода запросов. Упорядочивание вывода полей.
- •Упорядочивание вывода полей
- •Упорядочивание с помощью многочисленных столбцов
- •Упорядочивание агрегатных групп
- •22. Язык структурированных запросов sql. Объединение таблиц.
- •23. Язык структурированных запросов sql. Соотнесенные подзапросы.
- •24. Язык структурированных запросов sql. Ввод, удаление и изменение значений в таблице. Создание таблицы.
- •25. Microsoft sql Server 2000. Основные концепции технологии «клиент-сервер», структура хранения данных, файлы и группы файлов. Основные объекты базы данных.
- •26. Microsoft sql Server 2000. Создание базы данных с помощью Enterprise Manager. Работа с таблицами. Ограничения целостности.
- •Ограничения целостности
- •26. Microsoft sql Server 2000. Создание базы данных с помощью Enterprise Manager. Работа с таблицами. Ограничения целостности.
- •Работа с таблицами
- •Ограничения целостности
- •27. Администрирование sql Server 2000. Терминология. Создание ролей и пользователей в бд.
- •Терминология
- •Системный администратор
- •Владелец базы данных
- •28. Microsoft sql Server 2000. Резервное копирование и восстановление. Экспорт и импорт данных.
- •29. Microsoft sql Server 2000. Создание и использование хранимых процедур и пользовательских функций.
- •31. Тенденции развития бд. Хранилища данных. Основные свойства. Архитектура, схемы хд. Понятие метаданных. Информационные потоки в хранилищах данных.
- •1. Современные информационные системы
- •Метаданные
29. Microsoft sql Server 2000. Создание и использование хранимых процедур и пользовательских функций.
Хранимые процедуры являются механизмом, с помощью которого можно создавать подпрограммы, работающие на сервере и управляемые его процессами. Подобные подпрограммы могут быть активизированы вызывающим их приложением. Кроме того, они могут быть вызваны правилами, поддерживающими целостность данных, или триггерами.
Хранимые процедуры очень полезны, поскольку они работают непосредственно на сервере. Применение подобных процедур очень хорошо укладывается в модель клиент/сервер. Так как система SQL Server управляет базами данных, она является лучшим местом для выполнения хранимых процедур, работающих с данными.
Хранимые процедуры могут возвращать значения. Внутри процедур можно выполнять сравнение вводимых пользователем значений с заранее установленной в системе информацией. Хранимые процедуры применяют в работе мощные аппаратные решения SQL Server. Они ориентированы на базы данных и тесно взаимодействуют с оптимизатором SQL Server. Это позволяет получить высокую производительность при обработке данных.
В хранимые процедуры можно передавать значения и получать посредством них результаты работы, совершенно не обязательно имеющие отношение к рабочей таблице. Хранимая процедура может вычислить результаты в процессе работы.
В самом общем случае хранимые процедуры обладают следующими преимуществами:
Высокая производительность. Является результатом расположения хранимых процедур на сервере. Сервер — как правило, более мощная машина, поэтому время выполнения процедуры на сервере значительно меньше, чем на рабочей станции. Кроме того, информация из базы данных и хранимая процедура находятся в одной и той же системе, поэтому на передачу записей по сети время практически не затрачивается. Хранимые процедуры имеют непосредственный доступ к базам данных, что делает работу с информацией очень быстрой.
Преимущество разработки системы в архитектуре клиент/сервер. Заключается в возможности раздельного создания программного обеспечения клиента и сервера. Это преимущество является ключевым при разработке, и благодаря ему можно значительно уменьшить время, необходимое для окончания проекта. Код, работающий на сервере, может разрабатываться отдельно от кода клиентской части. При этом компоненты серверной части могут совместно использоваться компонентами стороны клиента.
Уровень безопасности. Хранимые процедуры могут выступать в качестве инструмента улучшения безопасности. Можно создать хранимые процедуры, осуществляющие операции добавления, изменения, удаления и отображения списков, и, таким образом, получить контроль над каждым из аспектов доступа к информации.
Усиление правил сервера, работающих с данными. Это одна из самых важных причин применения интеллектуального ядра баз данных. Хранимые процедуры позволяют применять правила и другую логику, помогающую контролировать вводимую в систему информацию.
Хранимые процедуры, работающие в динамических инструкциях SQL, дают ряд преимуществ:
Хранимые процедуры компилируются при первом выполнении и сохраняются в системной таблице текущей базы данных. При компилировании они оптимизируются. При этом выбирается самый лучший способ доступа к информации таблицы. Подобная оптимизация учитывает реальное положение данных в таблице, доступные индексы, загрузку таблицы и т. д. Откомпилированные хранимые процедуры могут значительно улучшить производительность системы.
Хранимые процедуры могут быть выполнены либо на локальной машине, либо на удаленной системе SQL Server. Это дает возможность активизировать процессы на других машинах и работать не только с локальными базами данных, но и с информацией на нескольких серверах.
Прикладные программы, написанные на таком языке высокого уровня, как С или Visual Basic, могут также вызывать хранимые процедуры, что обеспечивает оптимальное решение по распределению нагрузки между программным обеспечением клиентской части и SQL Server.
Для создания хранимой процедуры применяется инструкция create procedure. По умолчанию, выполнить созданную процедуру может только владелец базы данных. Он же может изменить разрешение доступа и позволить другим пользователям работать с этой процедурой. Имя хранимой процедуры может быть длиной до 128 символов, включая символы # и ##.
Синтаксис определения процедуры:
CREATE PROCEDURE] имя_процедуры [; число]
[{@параметр тип__данных] [VARYING]
[= значение__по_умолчанию] [OUTPUT]
]
[, ... n]
[WITH
{
RECOMPILE |
ENCRYPTION |
RECOMPILE, ENCRYPTION
}
[FOR REPLICATION]
AS
инструкции_SQL
Рассмотрим некоторые параметры этой команды:
имя_процедуры — имя процедуры должно удовлетворять правилам для идентификаторов, его длина не может превышать 128 символов; для локальных временных процедур перед именем используется знак #, а для глобальных временных процедур — знаки ##
число — необязательное целое число, используемое для группировки нескольких процедур под одним именем
@ параметр тип_данных — список имен параметров процедуры с соответствующим типом данных для каждого; таких параметров может быть до 1024; в качестве значения параметра разрешается передавать null; могут использоваться все типы данных — никаких ограничений нет; в качестве выходного параметра (используется ключевое слово output или varying) можно использовать тип данных cursor
varying — ключевое слово, определяющее, что в качестве выходного параметра используется результирующий набор — только для типа cursor
значение_по_умолчанию — используется в случае, когда при вызове процедуры параметр пропущен; должно быть константой и может включать символы.маски (%, _, [] и ^) и значение null
with recompile — ключевые слова, показывающие, что SQL Server не будет записывать план процедуры в кэш, а будет создавать его каждый раз при выполнении
with encryption — ключевые слова, показывающие, что SQL Server будет зашифровывать процедуру перед записью в системную таблицу syscomments
for replication — ключевые слова, показывающие, что эта процедура создается только для репликации; несовместимы с ключевыми словами WITH RECOMPILE
as — начало определения текста процедуры
инструкции_SQL — любой набор допустимых инструкций SQL, ограниченный только максимальным размером хранимой процедуры — 128 Кб; недопустимыми являются следующие операторы:
CREATE DEFAULT CREATE TRIGGER
CREATE PROCEDURE
CREATE RULE CREATE VIEW
После создания процедуры достаточно ввести ее имя в командную строку или окно SQL Server Query Analyzer и выполнить как обычную инструкцию. Если вызов хранимой процедуры следует за выполнением других инструкций, для ее активизации необходимо применять команду EXEC[UTE] имя_процедуры (при вызове хранимой процедуры первой в последовательности команд можно опустить ключевое слово ехес в инструкции ехес имя_процедуры. Ее можно просто вызвать по имени, и она будет выполнена автоматически).
Поскольку хранимая процедура является полноценным компонентом базы данных, то, создать новую процедуру можно только для текущей базы данных. При работе в SQL Server Query Analyzer установление текущей базы данных выполняется с помощью оператора use, за которым следует имя базы данных, где должна быть создана хранимая процедура. Внутрь хранимой процедуры может быть помещена любая инструкция Transact-SQL, за исключением инструкции create.
После создания в системе хранимой процедуры SQL Server компилирует ее и проверяет выполняемые внутри нее подпрограммы. При возникновении каких-либо проблем процедура отвергается. Перед повторной трансляцией ошибки должны быть устранены. В SQL Server 7.0 используется отложенное распознавание имен (delayed name resolution), поэтому если хранимая процедура содержит обращение к другой, еще нереализованной процедуре выводится предупреждение, но вызов несуществующей процедуры все же сохранится.
Если оставить в системе обращение к неустановленной хранимой процедуре, при попытке ее выполнения пользователь получит сообщение об ошибке.
Хранимые процедуры — это очень мощный инструмент, но максимальной эффективности можно добиться, только сделав их динамическими. Разработчик должен иметь возможность передавать внутрь хранимой процедуры значения, с которыми она должна работать.
Основными принципами применения параметров в хранимых процедурах являются:
Для процедуры может быть определен один или несколько параметров
Параметры используются в качестве именованных мест хранения данных точно так же, как переменные в языках программирования, таких как С или Visual Basic
Имя параметра обязательно предваряется символом @
Имена параметров являются локальными в той процедуре, где они определены
Параметры служат для передачи информации в процедуру при ее выполнении. Они помещаются в командной строке после имени процедуры.
В случае, если процедура имеет несколько параметров, они разделяются запятыми.
Для определения типа информации, передаваемой в качестве параметра, применяют системные типы данных
В SQL Server имеется огромное количество системных хранимых процедур. Все они начинаются с префикса sp_ и находятся в базе данных master. Созданные процедуры хранятся в соответствующей базе данных. При вызове любой хранимой процедуры, имя которой начинается с префикса sp_, SQL Server всегда производит поиск процедуры в следующем порядке:
1. В базе данных master.
2. В базе данных, указанной при вызове.
3. В текущей базе данных.
Чем чревато присвоение своей хранимой процедуре имени, начинающегося с префикса sp_? Во-первых, увеличением времени ее поиска — как минимум, надо "пройтись" по базе данных master. Во-вторых, если случайно имя процедуры совпадет с именем системной, то результатов выполнения такой процедуры вы никогда не увидите, поскольку она будет замаскирована одноименной процедурой из базы данных master. Это следует иметь в виду при присвоении имен хранимым процедурам.
Просмотр определения процедуры выполняется с помощью системной процедуры sp_helptext, а системная процедура sp_help позволяет вывести контрольную информацию о ней. Системные процедуры sp_helptext и sp_help используются и для просмотра таких объектов баз данных, как таблицы, правила и установки по умолчанию.
В SQL Server Query Analyzer хранимая процедура удаляется с помощью инструкции DROP PROCEDURE. С помощью одной такой инструкции может быть удалено несколько процедур. Имена удаляемых процедур указываются через запятую после ключевого слова drop procedure. Синтаксис:
DROP PROCEDURE имя_процедуры_1 [, ..., имя_процедуры_п]
Несколько версий процедуры не могут быть удалены селективно. Все версии с одинаковым именем удаляются одновременно. При этом в инструкции drop procedure имя процедуры указывается без номера версии.
В SQL Server 7.0 появилась возможность изменять хранимые процедуры и с помощью Transact-SQL без их предварительного удаления. Для этого служит команда alter procedure, ее синтаксис:
ALTER PROC[EDURE] имя_процедуры [; число]
[{@параметр тип_данных} [= значение_ло_умолчанию] [OUTPUT]
]
[, ... л]
[ WITH
{
RECOMPILE |
ENCRYPTION |
RECOMPILE, ENCRYPTION
[ FOR REPLICATION]
AS
инструкции_ SQL
Структура и параметры инструкции alter procedure идентичны структуре и параметрам инструкции create procedure.
Компиляция хранимой процедуры
Преимущество применения хранимых процедур для выполнения набора инструкций Transact-SQL состоит в том, что они компилируются при первом выполнении. В процессе компиляции инструкции Transact-SQL конвертируются из их первоначального символьного представления в исполняемую форму. Любые объекты, к которым происходит обращение в процедуре, также конвертируются в альтернативное представление. Например, имена таблиц конвертируются в их идентификаторы объекта, а имена столбцов - в их идентификаторы столбцов.
План выполнения создается точно так же, как и для выполнения одной инструкции Transact-SQL. Этот план содержит, например, индексы, применяемые для считывания строк из таблиц, к которым обращается процедура. План выполнения процедуры сохраняется в кэше и используется при каждом ее вызове.
Автоматическая повторная компиляция
Обычно план выполнения находится в кэше процедур. Это позволяет увеличить производительность при его выполнении. Процедура, однако, автоматически перекомпилируется при следующих обстоятельствах:
Процедура всегда перекомпилируется при начале работы SQL Server. Обычно это происходит после перезагрузки операционной системы и при первом выполнении процедуры после создания.
План выполнения процедуры автоматически перекомпилируется всегда, когда удаляется индекс таблицы, к которому обращается процедура. Поскольку текущий план обращается для считывания строк таблицы к индексу, который уже не существует, следует создать новый план выполнения. Запросы процедуры будут выполняться только в том случае, если он будет обновлен.
Компиляция плана выполнения происходит и в случае, если с этим планом, находящимся в кэше, в настоящее время работает другой пользователь. Для второго пользователя создается индивидуальная копия плана выполнения. Если бы первая копия плана не была занята, не понадобилось бы создания второй копии. Когда пользователь завершает выполнение процедуры, план выполнения доступен в кэше другому пользователю, имеющему соответствующее разрешение доступа.
Процедура автоматически перекомпилируется, если она удаляется и заново создается. Все копии плана выполнения в кэше удаляются, так как новая процедура может отличаться от старой версии и необходим новый план.
Для установки автоматического выполнения процедуры при загрузке SQL Server используют системную хранимую процедуру sp_Makestartup. Можно определить любое количество процедур, которые будут автоматически выполняться в начале работы. Синтаксис процедуры sp_makestartup:
SP_MAKESTARTUP имя_процедуры
Автоматически выполняемые в начале работы SQL Server процедуры активизируются после открытия и восстановления всех баз данных. Для просмотра списка процедур, автоматически выполняемых в начале работы, применяют системную процедуру sp_helpstartup. Чтобы запретить процедуре выполняться автоматически, применяют системную процедуру SP_UNMAKESTARTUP.
Набор инструкций Transact-SQL называется пакетом. Пакет может включать и хранимые процедуры. Правила или синтаксис для применения инструкций Transact-SQL в пакете применяются к следующему списку объектов:
Процедуры
Правила
Установки по умолчанию
Триггеры
Представления
Синтаксис, в основном, состоит из набора ограничений, определяющих типы инструкций, используемых в пакетах. Большинство ограничений составляют инструкции, которые создают объекты, изменяющие базы данных или среду запросов или неработающие внутри текущего пакета. Правила и установки по умолчанию, например, могут быть определены внутри пакета и связаны со столбцом или пользовательским типом данных, но они работают лишь до тех пор, пока не завершится выполнение пакета. Нельзя в одном и том же пакете удалить объект, а затем обратиться к нему или заново его создать.
Ключевые слова if и else предназначены для контроля условного выполнения инструкций внутри хранимой процедуры. Они дают возможность проверять наличие определенного состояния и выполнять инструкцию, являющуюся частью ветви if, или инструкцию, являющуюся частью ветви else. Критерий проверки определяется выражением, следующим за ключевым словом if. Синтаксис инструкции if ... else:
IF выражение
инструкция
[ELSE]
[IF выражение
инструкция]
Ключевые слова begin и end применяются для обозначения набора инструкций Transact-SQL, который должен быть выполнен как один блок. Ключевое слово begin определяет начало блока инструкций, а ключевое слово end, находящееся после последней инструкции Transact-SQL в блоке, обозначает конец набора этих инструкций. Синтаксис:
BEGIN
инструкции
END
Ключевое слово while применяется для выполнения одного или нескольких инструкций Transact-SQL, при истинности заданного условия. Инструкция, следующая за while, выполняется циклически, пока проверяемое условие истинно. Синтаксис инструкции while:
WHILE <логическое_выражение>
<инструкция_SQL>
Ключевое слово break применяется внутри блока команд Transact-SQL, находящихся внутри условной инструкции while. Результатом выполнения предложения break будет переход к первому оператору, следующему за концом блока. Синтаксис ключевого слова break:
WHILE <логическое_выражение>
<инструкция_ SQL>
BREAK
<инструкция_SQL>
Ключевое слово continue применяется для формирования предложения внутри такой условной конструкции, как while, для прямого указания на необходимость продолжения выполнения набора инструкций, находящихся внутри этой условной конструкции. Синтаксис предложения continue:
WHILE <логическое_выражение>
<инструкция>
CONTINUE
<инструкция>
Выражение case применяется для селективного выбора на основании нескольких опций. Конструкция case даст возможность произвести тестирование входных данных, по результатам которого принимается решение о том, какое действие должно быть предпринято. Синтаксис выражения case:
CASE [ выражение ]
WHEN простое_выражение1 | логическое_выражение1 THEN выражение1
[ [WHEN простое_выражение2 | логическое_выражение2 THEN выражение2] [...]]
[ELSE выражениеN]
END
Если в выражении, следующем непосредственно за ключевым словом case, находится оператор сравнения, то это выражение называется поисковым (searched expression), а не простым выражением case. В поисковом выражении case может быть также применен логический оператор.
В простых выражениях case значение оператора, следующего сразу же за ключевым словом case, всегда точно совпадает со значением, находящимся после ключевого слова when.