Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Неоднозначность при обновлении представленияПример Создать представление, в котором будут собраны пары городов, в которых проживают поставщики и производят деталь, у которой категория больше 10.
CREATE VIEW CSP(S.город,P.город) AS SELECT DISTINCT S.город, P.город FROM S, P WHERE категория>10
Если сделать UPDATE, то могут возникнуть неоднозначности. Т.к. одному картежу представления может существовать несколько пар картежей базовых таблиц S и P, на которых на которых определено это представление. Если мы захотим скорректировать представление, то неопределенно где изменить данные в S или P, т.к. картежу Тула Москва соответствует три пары картежей, т.к. мы используем DISTINCT, то создается не обновляемое представление UPDATEBLE – обновляемое.
Стандартом ANSI определяется набор требований к представлениям, которые обеспечивают его обновляемость: 1. представление базируется на одной таблице 2. в представление не входят атрибуты, определяется с помощью функции агрегирования 3. отсутствует параметр DISTINCT 4. отсутствует GROUP BU и HAVING 5. отсутствует подзапросы в определенном представлении 6. представление может быть определено на базе другого представления, если оно является обновляемым 7. представление должно включать в себя атрибут, являющийся первичным ключом базовой таблицы.
Пример По таблице SP определить представление, в котором для каждого из поставщиков определено количество поставок.
CREATE VIEW POST(код. пост., код. пост.) AS SELECT код. пост, COUNT(*) FROM SP GROUP BY код. пост.
Не обновляемо, т.к. есть COUNT и GROUP BY, и нет первичного ключа.
CREATE VIEW MSK AS SELECT * FROM S WHERE город = ‘Москва’
Обновляемо, т.к. все условия выполнены.
Пример Создать представление, в которое входит информация о поставщиках, среди поставок объемом 200, причем категория не входит.
CREATE VIEW PST AS SELECT код. пост., имя, город WHERE код. пост. IN (SELECT код. пост. FROM SP WHERE кол=200)
Не обновляемое, т.к. содержит запрос.
Пример Выбрать поставщиков с категорией равной 30.
CREATE VIEW SNK AS SELECT * FROM S WHERE катег=30
В это представление попадут не все картежи, следовательно это представление можно обновлять.
Добавим в него картеж с помощью INSERT
INSERT INTO SNK VALUES (‘S6’,’Орлов’,20,’Тула’)
Через представление мы видим атрибут с категорией 30. Этот картеж попадает в базовую таблицу, а в представление его не будет.
Для избежания такой ситуации имеется параметр WITH CHECK OPTION
Дата добавления: 2014-08-04; просмотров: 319; Нарушение авторских прав Мы поможем в написании ваших работ! |