
- •Введение. Цели и задачи. Изучение базы и банков данных
- •Реляционные базы данных
- •Реляционная база данных
- •Функции субд. Типовая организация субд
- •Типовая организация субд
- •Базисные средства манипулирования реляционными данными
- •Реляционная алгебра
- •Общая интерпретация реляционных операций
- •Особенности теоретико-множественных операций реляционной алгебры
- •Реляционное исчисление
- •Целостность сущности и ссылок
- •Субд в архитектуре клиент-сервер
- •Сервера баз данных
- •Типичные распределения функций между клиентами и серверами
- •Оптимизация запросов
- •Стадии процесса оптимизации запросов
- •Язык реляционных баз данных sql
- •Типы данных
- •1) Числовые целые типы данных.
- •2) Нецелочисленные типы данных.
- •3) Денежные типы данных.
- •4) Типы данных для хранения информации о времени.
- •5) Бинарные типы данных.
- •6) Символьные типы данных.
- •7) Текстовые типы данных.
- •8) Специальные типы данных.
- •Управляющие конструкции Transact sql
- •If...Else
- •Логические операторы
- •Создание, модификация и удаление таблиц
- •Определение идентификационной колонки (Identity)
- •Создание таблиц средствами transact sql
- •Изменение структуры таблицы при помощи Transact-sql
- •Управление данными
- •Использование insert
- •Извлечение данных
- •Раздел into предназначен для сохранения результата, выполнения запроса в заданной таблице.
- •Изменение данных
- •Хранимые процедуры
- •Создание хранимых процедур
- •1. Определение типа создаваемой хранимой процедуры.
- •2. Определение входных и выходных параметров хранимой процедуры.
- •3. Разработка кода хранимой процедуры.
- •Управление процессом компиляции хранимой процедуры
- •Управление автоматическим выполнением хранимых процедур
- •Модификация хранимой процедуры
- •Удаление хранимых процедур
- •Использование индексов
- •Создание индексов
- •Использование представлений
- •Создание триггеров
- •Использование курсора
- •Управление правами доступа к объектам базы данных
- •Современные направления исследований и разработок
Создание индексов
Формат команды CREATE INDEX на Transact SQL имеет вид:
CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]
INDEX index_name ON table (column [...n])
UNIQUE – при указании этого ключевого слова будет создан уникальный индекс. При создании такого индекса сервер выполняет предварительную проверку колонки на уникальность значений. Если в колонке есть хотя бы два одинаковых значения, индекс не создается и сервер выдает сообщение об ошибке. В индексируемой колонке также желательно запретить хранение значений NULL, чтобы избежать проблем, связанных с уникальностью значений. После того как для колонки создан уникальный индекс, сервер не разрешает выполнение команд INSERT и UPDATE, которые приведут к появлению дублирующихся значений.
CLUSTERED – создаваемый индекс будет кластерным, то есть физически данные будут располагаться в порядке, определяемом этим индексом. Кластерным может быть только один индекс в таблице.
NONCLUSTERED – создаваемый индекс будет некластерным. В таблице можно определить до 249 некластерных индексов.
Index_name – имя индекса, по которому он будет распознаваться командами Transact-SQL. Имя индекса должно быть уникальным в пределах таблицы.
table (column [...n]) – имя таблицы, в которой содержатся одна или несколько индексируемых колонок. В скобках указываются имена колонок, на основе которых будет построен индекс. Не допускается построение индекса на основе колонок с типом данных text, ntext, image или bit. Если указывается несколько колонок, то создаваемый индекс будет смешанным (composite index). В один смешанный индекс можно включить до 16 колонок.
Для удаления индекса используется команда DROP INDEX, имеющая следующий синтаксис:
DROP INDEX 'table.index' [...n]
Аргумент 'table.index' определяет удаляемый индекс в таблице. За одну операцию удаления можно удалить несколько индексов в любой таблице базы данных для этого их достаточно перечислить их через запятую.
Использование представлений
Представление (View) для конечных пользователей выглядит как таблица, но при этом само не содержит данных, а лишь представляет данные, расположенные в таблице. Физически представление реализовано в виде SQL-запроса, на основе которого производится выборка данных из одной или нескольких таблиц или представлений. Простейшее представление, созданное на основе одной таблицы и не имеющее фильтров, содержит точно такой же набор данных, как и исходная таблица. Более сложные представления содержат информацию из нескольких таблиц, причем можно фильтровать список строк, которые будут включены в представление.
Представление может выбирать данные из других представлений, которые, в свою очередь, могут также основываться на представлениях или таблицах. Вложенность представлений не должна превышать 32. Это максимальное количество уровней, поддерживаемое SQL Server 7.0. Представление можно создать только в текущей базе данных, но, используя распределенные запросы, можно ссылаться на таблицы и представления, созданные в других базах данных. Представление часто применяется для ограничения доступа пользователей к конфиденциальным данным в таблице. Представление может быть использовано для объединения данных из нескольких взаимосвязанных таблиц.
При обращении к представлению сервер проверяет правильность всех ссылок в запросе. Проверяется, существуют ли объекты, требующиеся для выполнения запроса, определяющего представление. Если одна из таблиц, на которые ссылается запрос, была уничтожена, то представление будет нельзя использовать и при попытке обратиться к нему пользователи получат сообщение об ошибке.
Так как в основе представления лежит SQL-запрос, то для представлений, как и для обычных запросов, генерируется план исполнения запроса. Каждый раз, когда пользователь обращается к представлению, план выполнения запроса компилируется заново.
Создание представлений с использованием Transact-SQL
CREATE VIEW view_name [(column [,...n])]
[WITH ENCRYPTION]
AS
select_statement
[WITH CHECK OPTION]
view_name – имя представления. При указании имени необходимо придерживаться тех же правил и ограничений, что и при создании таблицы.
column – имя колонки, которое будет использоваться в представлении. Максимальная длина имени составляет 128 символов. По умолчанию имена колонок в представлении соответствуют именам колонок в исходных таблицах. Явное указание имени колонки требуется при использовании вычисляемых колонок или при объединении нескольких таблиц, имеющих колонки с одинаковыми именами. Имена колонок перечисляются через запятую в соответствии с их порядком в представлении. Имена колонок можно указывать в команде SELECT, определяющей представление.
WITH ENCRYPTION – использование этого параметра предписывает серверу шифровать код SQL-запроса. Это гарантирует, что пользователи не смогут просмотреть код запроса и использовать его. Если при определении представления необходимо скрыть имена исходных таблиц и колонок, а также алгоритм объединения данных, то необходимо использовать эту опцию.
select_statement – код запроса SELECT, выполняющий выборку, объединение и фильтрацию строк из исходных таблиц и представлений. Можно использовать команду SELECT любой сложности со следующими ограничениями:
1) Нельзя создавать новую таблицу на основе результатов, полученных в ходе выполнения запроса, то есть запрещается использование параметра INTO.
2) Нельзя проводить выборку данных из временных таблиц, то есть нельзя использовать имена таблиц, начинающихся на # или ##.
В запрос нельзя включать операции вычисления и группировки, то есть запрещается указание параметров ORDER BY, COMPUTE и COMPUTE BY.
Для удаления представления используется команда Transact SQL DROP VIEW{view […n]}. За один раз можно удалить несколько представлений.