
- •Семантическое моделирование данных: er-диаграммы
- •Реляционная модель данных: домены и отношения Общая характеристика реляционной модели данных
- •Типы данных – множество значений, множество операций
- •Простые типы данных
- •Структурированные типы данных
- •Ссылочные типы данных
- •Типы данных, используемые в реляционной модели
- •Отношения, атрибуты, кортежи отношения Определения и примеры
- •Свойства отношений
- •Первая нормальная форма
- •Реляционная модель данных: целостность
- •Целостность в реляционной модели данных
- •Реляционная модель данных: реляционная алгебра
- •Ограничения на операции
- •Соединение
- •Деление
- •Манипулирование реляционными данными
- •Реляционная модель данных: реляционное исчисление кортежей Реляционное исчисление
- •Исчисление кортежей
- •Реляционная алгебра и реляционное исчисление
- •Проектирование реляционных баз данных на основе принципов нормализации: функциональные зависимости
- •Проектирование реляционных баз данных на основе принципов нормализации: 1nf, 2nf, 3nf, bcnf Нормальная форма
- •Роль нормализации в проектировании реляционных баз данных
- •Нормальные формы
- •Первая нормальная форма (1nf)
- •Вторая нормальная форма (2nf)
- •Третья нормальная форма (3nf)
- •Нормальная форма Бойса — Кодда (bcnf)
- •Типы данных Transact-sql Типы данных (Transact-sql)
- •Типы данных
- •Преобразования типа Transact-sql Преобразование типов данных (компонент Database Engine)
- •Скалярные выражения Transact-sql
- •Логические выражения Transact-sql Логические операторы (Transact-sql)
- •Табличные выражения Transact-sql Табличные выражения
- •7.2.1. Предложение from
- •7.2.1.1. Соединённые таблицы
- •7.2.1.2. Псевдонимы таблиц и колонок
- •7.2.1.3. Подзапросы
- •7.2.1.4. Табличные функции
- •7.2.2. Предолжение where
- •7.2.3. Предложения group by и having
- •7.2.4. Обработка оконных функций
- •Обобщенные табличные выражения Transact-sql Применение обобщенных табличных выражений
- •With обобщенное_табличное_выражение (Transact-sql)
- •Рекомендации по созданию и использованию обобщенных табличных выражений
- •Рекомендации по созданию и использованию обобщенных табличных выражений
- •Рекомендации по созданию и использованию рекурсивных отв
- •Инструкции языка управления потоком Transact-sql Язык управления потоком (Transact-sql)
- •Сценарии и пакеты Transact-sql Сценарии языка Transact-sql
- •Инструкции языка описания данных Transact-sql Инструкции языка описания данных ddl (Transact-sql)
- •Инструкции alter (Transact-sql)
- •Инструкции create (Transact-sql)
- •Инструкции drop (Transact-sql)
- •Ограничения целостности Transact-sql
- •Инструкции языка обработки данных Transact-sql
- •Предложение for (Transact-sql)
- •Инструкции языка контроля доступа к данным Transact-sql
- •Хранимые процедуры Transact-sql Хранимые процедуры (компонент Database Engine)
- •Функции Transact-sql Основные сведения о пользовательских функциях
- •Триггеры Transact-sql Триггеры dml
- •Курсоры Transact-sql Курсоры
- •Использование простого курсора и синтаксиса
- •Индексы Transact-sql Индексы
- •Вторичный индекс path типа данных xml
- •Вторичный индекс value типа данных xml
- •Вторичный индекс property
- •Управление транзакциями в sql Server Инструкции транзакций (Transact-sql)
- •Журналирование в sql Server Журнал транзакций (sql Server)
- •Просмотр журнала ошибок sql Server
- •Управление безопасностью в sql Server
- •Массовый импорт и экспорт данных в sql Server Массовый импорт и экспорт данных (sql Server)
- •Методы массового импорта и экспорта данных
- •Файлы форматирования
- •Метаданные в sql Server Метаданные (службы Master Data Services)
- •Распределенные запросы и распределенные транзакции в sql Server Распределенные запросы
- •Распределенные транзакции Transact-sql
- •Распределенные запросы и распределенные транзакции
Инструкции языка контроля доступа к данным Transact-sql
Вьювер - это альтернативный способ представления данных из одной или нескольких таблиц. Вьювер можно представлять себе как фильтр, через который пропускаются табличные данные, прежде чем их увидит пользователь. В этом смысле можно говорить о представлении или изменении данных “через” вьювер.
Вьювер создается на базе одной или нескольких таблиц, расположенных в базе данных. Таблицы, из которых строится вьювер называются базовыми или основными. Вьювер может быть также построен на основе другого вьювера.
Определение вьювера и названия его базовых таблиц сохраняется в базе данных. При определении вьювера не создается никаких копий табличных данных. Все данные, которые появляются во вьювере, на самом деле распологаются в базовых таблицах.
По внешнему виду вьювер ничем не отличается от таблицы базы данных. С расположенными в нем данными можно работать почти также как с табличными данными. Язык Transact-SQL был расширен для того, чтобы снять все ограничения на выборку данных через вьювер и ослабить обычные ограничения на модификацию данных. Оставшиеся исключения и ограничения будут описаны в этой главе.
Когда через вьювер происходит изменение видимых в нем данных, то на самом деле изменяются данные, находящиеся в базовых таблицах. Обратно, если изменяются данные в базовых таблицах, то автоматически происходят изменения во вьюверах, построенных на основе этих таблиц.
Преимущества вьюверов
ФОКУСИРОВКА
БОЛЕЕ ПРОСТАЯ РАБОТА С ДАННЫМИ
ГИБКОСТЬ
БЕЗОПАСНОСТЬ
С помощью команд grant (предоставлять) и revoke (отнимать) можно разрешить доступ каждому пользователю только к определенным объектам базы данных, включая вьюверы. Если вьювер, а также все базовые таблицы и вьюверы, на которых он основан, принадлежат одному владельцу, то этот владелец может давать разрешение другим пользователям на использование этого вьювера и в то же время запретить непосредственное использование базовых таблиц и вьюверов. Это простой и вместе с тем эффективный механизм обеспечения защиты данных.
ЛОГИЧЕСКАЯ НЕЗАВИСИМОСТЬ ДАННЫХ
Оператор создания вьюверов имеет следующий общий вид:
create view [[название_базы.]владелец.]название_вьювера
[(название_столбца [, название_столбца]...)]
as select [distinct] оператор_выбора
[with check option]
ИЗМЕНЕНИЕ ДАННЫХ ЧЕРЕЗ ВЬЮВЕР
Хотя SQL Сервер не накладывает никаких ограничений на выборку данных через вьювер, и хотя язык Transact-SQL накладывает минимальные ограничения на изменение данных через вьювер по сравнению с другими версиями языка SQL, тем не менее существуют следующие виды модификации данных, которые нельзя проводить через вьювер:
· Нельзя проводить обновление, вставку и удаление данных из столбцов, значения в которых вычисляются по формулам или с помощью встроенных функций;
· Нельзя проводить обновление, вставку и удаление данных через вьювер, в котором вычисляются итоговые значения или групповые итоговые значения;
· Нельзя проводить обновление, вставку и удаление данных через вьювер, который определяется с опцией distinct (различные);
· Оператор вставки insert можно использовать лишь в том случае, если все столбцы базовой таблицы, в которых не допускаются неопределенные значения (NOT NULL), включены во вьювер, через который происходит вставка, поскольку в противном случае SQL Сервер не может присвоить соответствующим полям базовой таблицы исходные значения;
· Если вьювер определен с опцией with check option, то все вставляемые или обновляемые через него (или через любой зависимый от него вьювер) строки должны удовлетворять условиям видимости в этом вьювере;
· Нельзя удалять (оператором delete) данные через мультитабличный (т.е. определенный на основе нескольких таблиц) вьювер;
· Нельзя вставлять (оператором insert) данные через мультитабличный вьювер, определенный с опцией with check option;
· Можно обновлять (оператором update) данные через мультитабличный вьювер, определенный с опцией with check option. Это обновление будет ошибочным лишь в том случае, если изменяется значение в столбце, который встречается в одном из выражений предложения where вместе с названиями столбцов из других таблиц;
· Нельзя использовать операторы insert и update для мультитабличных вьюверов, определенных с опцией distinct (различные);
· Нельзя обновлять (оператором update) значение в поле счетчика (IDENTITY). Владелец таблицы или владелец базы данных или системный администратор могутвставлять точно указанное значение в поле счетчика, если для этой таблицы установлена опция identity_insert;
· Если вставляется или обновляется строка через мультитабличный вьювер, то все изменяемые столбцы должны принадлежать к одной таблице;
· Команду writetext нельзя применять к тектовым (text) или графическим (image) полям вьювера.
Когда выполняется оператор обновления, вставки или удаления, то SQL Сервер проверяет, что ни одно из вышеупомянутых условий не имеет места и что не нарушаются условия целостности данных.
Почему через некоторые вьюверы можно обновлять данные, а через другие нельзя ? Чтобы лучше понять возникающие здесь ограничения, рассмотрим по примеру на каждый тип вьювера, через который нельзя обновлять данные.