Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Обновление данных в представлениях




Ограничения на использование представлений

Стандарт ISO включает несколько важных ограничений на создание и использо- вание представлений, хотя в этом отношении между разными диалектами языка НЧ1 существуют определенные отличия.

Если столбец в представлении создается с использованием обобщающей функции, то этот столбец может указываться только в предложениях SELECT и ORDER BY тех запросов, в которых осуществляется доступ к данно- му представлению. В частности, подобный столбец не может использовать- ся в предложении WHERE, а также не может быть аргументом в обобщающей функции любого из запросов, обращающихся к данному представлению. Например, рассмотрим представление Staff Prop Cnt, определение которого дано в примере 10.3. В этом представлении столбец Cnt содержит результа- ты применения обобщающей функции COUNT. По этой причине приведен- ный ниже запрос является некорректным: SELECT COUNT(cnt)

FROM staff prop cnt;

Ошибка состоит в том, что сделана попытка применить к значениям столбца tnt обобщающую функцию, в то время как обобщающая функция уже использовалась для определения значений в этом столбце. Аналогич- ным образом, еще один запрос также является некорректным: SELECT *

FROM staff prop cnt WHERE cnt) 2;

В данном случае ошибка заключается в том, что в предложение ИНЕИ зя. проса помещен столбец Cnt представления, создаваемый с помощью обоб. щающей функции.

Сгруппированное представление никогда не должно соединяться с табли. цами базы данных или другими представлениями. Например, представлю. ние Staf Prop Cnt является сгруппированным, поэтому любая попыткя выполнить соединение этого представления с таблицей или другим прея. ставлением будет расценена системой как ошибка.

Все обновления, выполненные в таблице базы данных, немедленно отображаются во всех представлениях, включающих обращения к этой таблице. Подобным же образом, можно ожидать, что если данные были изменены в представлении, то это изменение будет отображено и в той таблице (таблицах) базы данных, на которой око построено. Однако это не так. Еще раз обратимся к представлению Staff Prop Cnt, определенному в примере 10.3:

CREATE VIEW staff prop cnt (branch по, staff по, cnt) AS SELECT s.bno, s.sno, COUNT(*)

FROM staff s, property for rent p WHERE в.sno = р.sno

GROUP BY s.bno, s.sno;

Оно содержит данные, представленные в табл. 10.5.

Таблица 10.5. Данные, доступные в представлении Staf f Prop Cnt

Рассмотрим, что произойдет, если попытаться вставить в данное представления запись, отмечающую, что в отделении с номером 'B3' работник с личным номерок 'SQ5' отвечает за 2 сдаваемых в аренду объекта. Для этой цели воспользуемся следующим оператором:

INSERT INTO staff prop cnt

VALUES ('B3', 'SG5', 2);

При обработке этого оператора потребуется вставить в таблицу Property for Rent яяя записи, отмечающие тот факт, что работник с личным номером 'SG5 отвечает за явя объекта недвижимости. Однако это невозможно будет сделать, поскольку неизвестнО, за какие именно сдаваемые в аренду объекты отвечает данный работник. Ведь мы ке знаем даже значений первичного ключа записей таблицы Property.for Rent, не говоря уже о других ее столбцах. Попробуем изменить определение представления и заменил столбец с количеством записей столбцом с номерами сдаваемых в аренду объектов:

CREATE VIEW staff prop list (branch по, staff по, property по) AS SELECT s.bno, s.sno, р.рпо

FROM staff s, property for rent p WHERE в.sno = р.sno;

А теперь попробуем добавить в представление новую запись: "' INSERT INTO staff prop list

'Д VALUES ('B3', 'SG5', 'PG19');

Однако и в этом случае вставка новой записи в таблицу окажется невозможной, поскольку в определении таблицы Property for Rent указано, что все ее столбцы (за исключением Area, Pcode и Sno) не могут содержать значения NULL (см. пример 13.43). Однако представление Staff Prop List не содержит никаких полей таблицы Prop- erty for Rent, за исключением номера объекта, поэтому у нас нет возможности за- дать значения всех остальных обязательных столбцов этой таблицы.

В стандарте ISO указано, что представления могут быть обновляемыми только в тех системах, которые отвечают некоторым четко определенным требованиям. Согласно стандарту ISO представление может быть обновляемым в том и только в том случае, если:

в его определении не используется ключевое слово DISTINCT, т.е. из резуль- татов определяющего запроса не исключаются дублирующиеся строки;

каждый элемент в списке предложения SELECT определяющего запроса представляет собой имя столбца (а не константу, выражение или обоб- щающую функцию), причем имя каждого из столбцов упоминается 'в этом списке не более одного раза;

в предложении FROM указана только одна таблица — т.е. представление должно быть создано на базе единственной таблицы, по отношению к которой пользователь должен обладать необходимыми правами доступа. Если исходная таблица сама является представлением, то это представление также должно отвечать указанным условиям. Данное требование исключает возможность обновления любых представлений, построенных на базе соединения, объединения (UNION), пересечения (INTERSECT) или разности (EXCEPT) таблиц;

предложение WHERE не должно включать никаких вложенных запросов типа SELECT, которые ссылаются на таблицу, указанную в предложении FROM;

определяющий запрос не должен содержать предложений GROUP BY и HAVING. Кроме того, любая строка данных, добавляемая через представление, не должна нарушать требований поддержки целостности данных, установленных для исходной таблицы представления. Например, при добавлении через представление новой стро- ки таблицы во все столбцы таблицы, отсутствующие в этом представлении, будут введены значения NULL. Однако при этом должны соблюдаться все требования NOT NULL, указанные в описании исходной таблицы представления. Основную концепцию, используемую при формулировании обсуждаемых ограничений, можно выразить с помощью следующего определения.

Обновляемое представление Для того чтобы представление было обновляемым, СУБД должна иметь возможность однозначно отобразить любую его строку или столбец на соответствующую строку или столбец его исход- ной таблицы.




Поделиться с друзьями:


Дата добавления: 2013-12-13; Просмотров: 357; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.