Представления. изменение значений с помощью представлений

1. Введение в представления.

Таблицы, ранее рассматриваемые, называются базовыми. Эти таблицы содержат реальные данные. В отличии от них представления – это таблицы, которые содержат данные других таблиц. Эти таблицы могут использоваться в запросах, предложениях языка манипулирования данными так же, как и базовые таблицы. В действительности, представления – это запросы, выполняемые всякий раз, когда представление является объектом команды. Создается представление командой CREATE VIEW.

Например:

CREATE VIEW СотрудникиМН

AS SELECT * FROM СОтрудники

WHERE №отд = ‘О2’;

В результате создается представление СотрудникиМН, с этим представлением можно выполнять любые операции, то есть формировать запросы, удалять, вставлять, соединять с другими таблицами и представлениями.

Преимуществом представления является то, что оно обновляется автоматически при изменении формирующих его таблиц. Создание представления не фиксируется и вычисляется повторно всякий раз, когда в команде ссылаются на представление. запрос для представления – это фактически запрос к запросу. Например:

SELECT * FROM СотрудникиМН

WHERE ЗРПЛ > 1200000;

Фактически этот запрос будет эквивалентен:

SELECT * FROM Сотрудники

WHERE №отд = ‘О2’

AND ЗРПЛ > 1200000;

В SQL допускается использование групповых представлений, то есть представлений, которые базируются нf команде GROUP BY либо на других групповых представлениях. Предполагается, что каждый день надо отслеживать количество покупателей, имеющих заказы, количество продавцов, получивших заказы и общее количество поступивших заказов:

CREATE VIEW Итогдня

AS SELECT Дата, COUNT(DISTINCT №аренд)

FROM Осмотр GROUP BY Дата;

Затем получать информацию из запроса:

SELECT * FROM Итогдня;

Представления позволяют послать информацию из любого количества базовых таблиц или других представлений. Например, можно определить представление, которое показывает для каждого заказа имя продавца и имя покупателя:

CREATE VIEW ВладОбъектыСотр

AS SELECT №влад,a.ФИо As ФиоВлад,№объект,Адрес,Тип,Аренда,№сотр,c.ФИО As ФиоСотр

FROM Владельцы a, Объекты b, Сотрудники c

WHERE a.№влад = b.№влад

AND b.Сотр = c.Сотр;

SELECT * FROM ВладОбъектыСотр

WHERE ФиоСотр = ‘Иванов’;

В запросах представления могут соединять как с базовыми таблицами, так и с представлениями. Например:

SELECT a.sname, cname, ame*comm.

FROM ВладОбъектыСотр a, Осмотр b

WHERE a.ФиоСотр = ‘Петров’

AND b.№объект = a.№объект;

Представления могут использовать также подзапросы, связанные запросы. Например, компания платит вознаграждение продавцу, который имеет покупателя с наибольшим количеством заказов на заданную работу. Эту информацию можно получить с помощью следующих представлений:

CREATE VIEW Esf

AS SELECT №объект, Адрес, Тип

FROM ВладОбъектыСотр

WHERE = Аренда(

SELECT MAX(Аренда)

FROM ВладОбъектыСотр);

Для извлечения из представления используется запрос

SELECT * FROM Esf;

Для удаления представления из БД используется команда DROP VIEW <имя представления>.

Здесь нет необходимости сначала удалять все содержимое, как это требуется для базовых таблиц, поскольку создание представления никогда явно не определяется, оно сохраняется в процессе выполнения отдельной команды. На базовые таблицы команда DROP не оказывает влияния.

2. Изменение значений с помощью представлений.

Команды обновления применительно к представлениям работают следующим образом: воздействуют на базовую таблицу представления. Существуют критерии для определения обновленовляемого представления представления:

1. Оно базируется только на одной таблице.
2. Должно включать первичный ключ таблицы.
3. Не должно содержать ключей, полученных агрегированием.
4. Не должно содержать DISTINCT в своем определении.
5. Не должно содержать GROUP BY и HAVING в своем определении.
6. Не должно содержать подзапросов.
7. Может быть ограничено на обновляемом представлении.
8. Не может содержать констант, строк или выражений в списке выбираемых выходных полей.
9. Для команды INSERT должно включать любые поля, которые имеют ограничения NOT NULL.

Представления, которые не отвечают выше указанным критериям, являются представлениями только для чтения. Однако, даже с обновляемыми представлениями часто бывают проблемы. Например:

CREATE VIEW Highrating

AS SELECT cnum, rating FROM Customers

WHERE rating = 300;

Выполняется следующая команда:

INSERT INTO Highrating

VALUES (2000, 200);

Обновление выполнено не будет. Эта проблема в SQL решается следующим образом: в определение представления добавляется команда:

WITH CHECK OPTION

Эта команда вводится в определения представления и она не имеет отношения к базовой таблице. Будут контролироваться все команды. При выполнении команды будут выдаваться сообщения. Аналогичная проблема возникает, если необходимо в представление включить строки, которые базируются на полях, которые не представлены в представлении:

CREATE VIEW Londonstaff

AS SELECT cnum, cname, comm

FROM Salespeople

WHERE city =’London’;

Если в такое представление попытаться вставить строчку, то она не будет видна в представлении, а будет вставлена в базовую таблицу. Чтобы решить эту проблему, необходимо всегда в представлении задавать все поля, которые есть в базовой таблице.

Получится представление, в котором будут одинаковые значения для поля city. Чтобы исключить это из выходных данных нужно:

SELECT snum, sname

FROM Londonstaff;

Опция WITH CHECK OPTION действует только на представление, в котором она указана, но не действует на представление, которое базируется на этом представлении. Например имеется:

CREATE VIEW Highrating

AS SELECT cnum, rating FROM Customers

WHERE rating = 300

WHITH CHECK OPTION;

Попытки ввести или изменить значение рейтинга, отличного от 300 будут отвергнуты, но можно попытаться создать новое представление:

CREATE VIEW Vyrating

AS SELECT *

FROM Highrating;

UPDATE Murating

SET rating = 200

WHERE cnum = 2004;

В начало

ОБНОВЛЯЕМЫЕ ПРЕДСТАВЛЕНИЯ

КОНЦЕПЦИЯ ER-МОДЕЛИ

3. Проектирование с использованием метода «сущность-связь»

Метод "сущность–связь" (entity–relation, ER–method) является комбинацией двух предыдущих и обладает достоинствами обоих. Этап инфологического проектирования начинается с моделирования ПО. Проектировщик разбивает её на ряд локальных областей, каждая из которых (в идеале) включает в себя информацию, достаточную для обеспечения запросов отдельной группы будущих пользователей или решения отдельной задачи (подзадачи). Каждое локальное представление моделируется отдельно, затем они объединяются.

Выбор локального представления зависит от масштабов ПО. Обычно она разбивается на локальные области таким образом, чтобы каждая из них соответствовала отдельному внешнему приложению и содержала 6 - 7 сущностей.

Сущность – это объект, о котором в системе будет накапливаться информация. Сущности бывают как физически существующие (например, СОТРУДНИК или АВТОМОБИЛЬ), так и абстрактные (например, ЭКЗАМЕН или ДИАГНОЗ).

Для сущностей различают тип сущности и экземпляр. Тип характеризуется именем и списком свойств, а экземпляр – конкретными значениями свойств.

Типы сущностей можно классифицировать как сильные и слабые. Сильные сущности существуют сами по себе, а существование слабых сущностей зависит от существования сильных. Например, читатель библиотеки – сильная сущность, а абонемент этого читателя – слабая, которая зависит от наличия соответствующего читателя. Слабые сущности называют подчинёнными (дочерними), а сильные – базовыми (основными, родительскими).

В начало


Наши рекомендации