Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ud / lab3.docx
Скачиваний:
5
Добавлен:
09.04.2015
Размер:
60.57 Кб
Скачать

Представления

Я заново заполнил таблицы данными и создал несколько представлений.

Первое представление копировало таблицу заказов, но заменяло идентификаторы покупателя и продавца на имена покупателя и продавца:

CREATE view view_1 as SELECT onum, odate, amt, cname, sname FROM orders join customers on orders.cnum = customers.cnum join salespeople on orders.snum = salespeople.snum GROUP BY onum;

Так выглядит таблица этого представления в DreamCoder:

onum

odate

amt

cname

sname

1

02.11.2006

610

Василий Дубов

Федор Захапов

2

02.11.2006

8255,5

Алексей Шмыга

Максим Хитров

3

15.06.2007

5160

Лариса Тупакова

Максим Хитров

4

05.05.2008

310

Петр Быков

Алиса Тырь

5

15.11.2009

1200

Антон Тотуттотам

Алиса Тырь

6

17.11.2009

15

Антон Тотуттотам

Алиса Тырь

Второе представление выдаёт список «правильных заказов», то есть заказов таких, что в них номер продавца заказа равен номеру постоянного продавца покупателя заказа:

CREATE view view_2 as

SELECT onum, odate, amt, cname, sname FROM orders

JOIN salespeople on orders.snum = salespeople.snum

JOIN customers on orders.cnum = customers.cnum

WHERE salespeople.snum = customers.snum and orders.snum = customers.snum;

В DreamCoder его таблица совпала с таблицей первого представления. Следовательно, все заказы изначально составлены верно.

Третье представление выдаёт список неверных заказов, то есть ту часть множества заказов, которая не попала в список заказов второго представления. Отличается это представление от второго только тем, что в проверочном условии знаки равенства заменены на знаки неравенства.

CREATE view view_3 as

SELECT onum, odate, amt, cname, sname FROM orders

JOIN salespeople on orders.snum = salespeople.snum

JOIN customers on orders.cnum = customers.cnum

WHERE salespeople.snum != customers.snum and orders.snum != customers.snum;

В базе данных в исходном состоянии представление не содержит строк.

Далее я применил запрос, который изменил номер покупателя в некоторых записях таблицы заказов.

UPDATE orders set snum = 2 where snum = 3;

Далее приведены таблицы представлений после запроса.

view_1:

onum

odate

amt

cname

sname

1

02.11.2006

610

Василий Дубов

Федор Захапов

2

02.11.2006

8255,5

Алексей Шмыга

Федор Захапов

3

15.06.2007

5160

Лариса Тупакова

Федор Захапов

4

05.05.2008

310

Петр Быков

Алиса Тырь

5

15.11.2009

1200

Антон Тотуттотам

Алиса Тырь

6

17.11.2009

15

Антон Тотуттотам

Алиса Тырь

view_2:

onum

odate

amt

cname

sname

1

02.11.2006

610

Василий Дубов

Федор Захапов

4

05.05.2008

310

Петр Быков

Алиса Тырь

5

15.11.2009

1200

Антон Тотуттотам

Алиса Тырь

6

17.11.2009

15

Антон Тотуттотам

Алиса Тырь

view_3:

onum

odate

amt

cname

sname

2

02.11.2006

8255,5

Алексей Шмыга

Федор Захапов

3

15.06.2007

5160

Лариса Тупакова

Федор Захапов

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

Я ввёл и другой запрос, который поменял номер постоянного продавца у двух покупателей:

UPDATE customers set snum = 3 where snum = 4;

Таблица первого представления осталась в том же виде, что и после прошлого запроса. В таблице второго представления осталась всего одна запись:

onum

odate

amt

cname

sname

1

02.11.2006

610

Василий Дубов

Федор Захапов

В таблице третьего представления теперь содержались пять записей:

onum

odate

amt

cname

sname

2

02.11.2006

8255,5

Алексей Шмыга

Федор Захапов

3

15.06.2007

5160

Лариса Тупакова

Федор Захапов

4

05.05.2008

310

Петр Быков

Алиса Тырь

5

15.11.2009

1200

Антон Тотуттотам

Алиса Тырь

6

17.11.2009

15

Антон Тотуттотам

Алиса Тырь

Значит, рассогласование данных теперь наблюдаются почти во всех записях из таблицы заказов.

Соседние файлы в папке ud