Автор работы: Пользователь скрыл имя, 27 Ноября 2013 в 10:41, курсовая работа
Для создания и изменения структуры БД предназначены SQL-запросы, называемые языком определения данных, или DDL (Data Definition Language). С помощью DDL-запросов можно выполнить следующее:
• определить структуру нового домена и создать его;
• определить структуру новой таблицы и создать ее;
• изменить определение существующей таблицы;
Рис. 4.7. Результат выполнения запроса к представлению Abonent_Phone
Смешанное представление представляет собой подмножество строк и столбцов одиночной таблицы. Оно является представлением, разделяющим исходную таблицу как в горизонтальном, так и в вертикальном направлениях.
Пусть необходимо создать представление Nachisl_Service, отображающее номера лицевых счетов абонентов и начисленные им суммы за услугу газоснабжения с кодом, равным 2. Для решения этой задачи следует выполнить следующий запрос:
CREATE VIEW Nachisl_Service AS SELECT AccountCD, GazServiceCD, NachislSum FROM NachislSumma WHERE GazServiceCD = 2;.
Сгруппированное представление основано на запросе, содержащем предложение GROUP BY и, как следствие, использующем агрегатные функции. Оно выполняет ту же функцию, что и запросы с группировкой определенных столбцов. В них родственные строки данных объединяются в группы, и для каждой группы в таблице результатов запроса создается одна строка, содержащая итоговые данные по этой группе. С помощью сгруппированного представления запрос с группировкой превращается в виртуальную таблицу, к которой в дальнейшем можно обращаться.
В отличие от горизонтальных и вертикальных представлений, каждой строке сгруппированного представления не соответствует какая-то одна строка исходной таблицы. Сгруппированное представление не является просто фильтром исходной таблицы. Оно, в силу использования агрегатных функций, отображает исходную таблицу в виде суммарной информации и требует от СУБД значительного объема вычислений.
Например, если необходимо создать представление Abonent_All_Pay с полями AccountCD и All_Pay, показывающее общую сумму оплат для каждого абонента, то следует выполнить следующий запрос:
CREATE VIEW Abonent_All_Pay (AccountCD, All_Pay) AS SELECT AccountCD, Sum (PaySum) FROM PaySumma GROUP BY AccountCD;.
Результат выполнения следующего запроса:
SELECT * FROM Abonent_All_Pay;
представлен на рис. 4.8.
ACCOUNTCD |
ALL_PAY |
005488 |
222,83 |
015527 |
84,96 |
080047 |
256,88 |
080270 |
221,30 |
080613 |
114,66 |
115705 |
747,95 |
126112 |
40,60 |
136159 |
16,60 |
136160 |
112,60 |
136169 |
160,66 |
443069 |
195,10 |
443690 |
39,47 |
Рис. 4.8. Результат выполнения запроса к представлению Abonent_All_Pay
Соединенное представление - это подмножество строк и столбцов из нескольких таблиц. Задавая в определении представления, например, двух- или многотабличный запрос, можно создать виртуальную таблицу, данные в которую считываются соответственно из двух или трех различных таблиц. После создания такого представления к нему можно обращаться с помощью однотабличного запроса.
Например, необходимо создать
представление с именем Abonent_Executor,
в котором будут содержаться
ФИО абонентов и назначенных
по их ремонтным заявкам
CREATE VIEW Abonent_Executor (Abonent_Name, Executor_Name) AS SELECT A. Fio, E. Fio FROM Abonent A, Executor E, Request R WHERE R. AccountCD = A.AccountCD AND R.ExecutorCD = E. ExecutorCD;.
Результат выполнения следующего запроса:
SELECT * FROM Abonent_Executor;
представлен на рис. 4.9.
ABONENT_NAME |
EXECUTOR_NAME |
АКСЕНОВ С.А. |
СТАРОДУБЦЕВ Е.М. |
КОНЮХОВ В.С. |
СТАРОДУБЦЕВ Е.М. |
ЛУКАШИНА Р.М. |
СТАРОДУБЦЕВ Е.М. |
ШМАКОВ С.В. |
СТАРОДУБЦЕВ Е.М. |
МИЩЕНКО Е.В. |
СТАРОДУБЦЕВ Е.М. |
СТАРОДУБЦЕВ Е.М. |
СТАРОДУБЦЕВ Е.М. |
ШМАКОВ С.В. |
СТАРОДУБЦЕВ Е.М. |
ДЕНИСОВА Е.К. |
БУЛГАКОВ Т.И. |
МИЩЕНКО Е.В. |
БУЛГАКОВ Т.И. |
МИЩЕНКО Е.В. |
БУЛГАКОВ Т.И. |
МИЩЕНКО Е.В. |
ШУБИН В.Г. |
ШУБИНА Т.П. |
ШУБИН В.Г. |
СВИРИНА З.А. |
ШУБИН В.Г. |
ШУБИНА Т.П. |
ШУБИН В.Г. |
ТИМОШКИНА Н.Г. |
ШЛЮКОВ М.К. |
АКСЕНОВ С.А. |
ШЛЮКОВ М.К. |
МИЩЕНКО Е.В. |
ШЛЮКОВ М.К. |
ТИМОШКИНА Н.Г. |
ШЛЮКОВ М.К. |
СТАРОДУБЦЕВ Е.М. |
ШКОЛЬНИКОВ С.М. |
АКСЕНОВ С.А. |
ШКОЛЬНИКОВ С.М. |
ДЕНИСОВА Е.К. |
ШКОЛЬНИКОВ С.М. |
Рис. 4.9. Результат выполнения запроса к представлению Abonent_Executor
Если представление не используется другими объектами БД, то его можно удалить запросом DROP VIEW, который имеет следующий формат:
DROP VIEW представление;.
Если требуется заново
создать представление со старым
именем, то используется запрос RECREATE VIEW.
Синтаксис этого запроса такой
же, как и запроса CREATE VIEW. Если представление
не существует перед использованием
запроса, то его использование эквивалентно
использованию CREATE VIEW. Если представление
уже существует, то запрос RECREATE VIEW пытается
удалить его и создать
Например, создадим заново горизонтальное представление Failure_Req так, чтобы оно содержало только погашенные заявки по неисправности с кодом, равным 1, с помощью следующего запроса:
RECREATE VIEW Failure_Req AS SELECT * FROM Request WHERE FailureCD = 1 AND Executed = 1;.
Результат выполнения следующего запроса:
SELECT * FROM Failure_Req;
представлен на рис. 4.10.
REQUESTCD |
ACCOUNTCD |
EXECUTORCD |
FAILURECD |
INCOMINGDATE |
EXECUTIONDATE |
EXECUTED |
1 |
005488 |
1 |
1 |
17.12.2001 |
20.12.2001 |
1 |
2 |
115705 |
3 |
1 |
07.08.2001 |
12.08.2001 |
1 |
9 |
136169 |
2 |
1 |
06.11.2001 |
08.11.2001 |
1 |
Рис. 4.10. Результат выполнения запроса к представлению Failure_Req
Преимуществами использования представлений являются следующие:
• обеспечение логической независимости. Одна из основных задач, которую позволяют решать представления, - обеспечение логической независимости прикладных программ от изменений в структуре базы данных. При изменении структуры изменяются запросы в определениях соответствующих представлений. При этом никаких изменений в программы, работающие с такими представлениями, вносить не нужно;
• прикладной взгляд на данные. Представления дают возможность различным пользователям по-разному видеть одни и те же данные. Это особенно ценно при работе различных категорий пользователей с единой интегрированной базой данных. Пользователям предоставляются только интересующие их данные в наиболее удобной для них форме или формате;
• защита данных. Представления предоставляют дополнительный уровень защиты данных в таблицах. От определенных пользователей могут быть скрыты некоторые данные, невидимые через предложенное им представление;
• скрытие сложности данных. Пользователь работает с представлением как с обычной таблицей, обращаясь к нему по имени, хотя на самом деле представление может представлять собой сложный запрос.
Таким образом, представление
предоставляет множество
4.6. Комментарии к объектам базы данных
Для сохранения в БД пояснений, относящихся к объектам БД, используются комментарии на объект базы данных. Для создания такого комментария используется запрос COMMENT ON, который имеет следующий формат:
COMMENT ON {DATABASE IS {'текст' | NULL} | <базовый_объект> имя_объекта IS {'текст' | NULL} | COLUMN {базовая_таблица | представление}. столбец IS {'текст' | NULL} | PARAMETER имя_процедуры.имя_параметра IS {'текст' | NULL}},
где
<базовый_объект> ::= {DOMAIN | TABLE | VIEW | PROCEDURE | TRIGGER | EXCEPTION | GENERATOR | SEQUENCE | INDEX | ROLE};
'текст' - пояснения к объекту БД. Указание пустой строки '' в качестве текста эквивалентно использованию NULL.
В результате действия запроса COMMENT ON в системном каталоге появится комментарий к описанию объекта БД. Комментарий на саму БД хранится в поле RDB$DESCRIPTION системной таблицы RDB$DATABASE. Например, можно добавить комментарий к учебной БД с помощью следующего запроса:
COMMENT ON DATABASE IS 'Учебная база данных Абонент';.
Следующий запрос добавляет комментарий к домену PKField:
COMMENT ON DOMAIN PKField IS 'Домен предназначен
для определения первичных
Этот комментарий хранится в поле RDB$DESCRIPTION системной таблицы RDB$FIELDS .
Точно так же можно создать комментарии и для других объектов БД и просмотреть их, извлекая нужное поле из системной таблицы с помощью запроса SELECT или открывая необходимую системную таблицу в IBExpert и закладку «Данные» в ней. Так же, открыв эту закладку, можно изменить созданный комментарий непосредственно в RDB$DESCRIPTION (при щелчке в области данных этого поля) в выпадающем поле для ввода. Для подтверждения изменений следует нажать «ОК» и поставить галочку.