Листинги -> Картинки

This commit is contained in:
2024-10-18 22:07:36 +03:00
parent 89aa67db62
commit cd82c66dcc

View File

@@ -37,6 +37,19 @@
\usepackage{hyperref}% для гиперссылок
\usepackage{enumitem} %для перечислений
% Настраиваем листинги, чтобы они использовали счётчик figure
\AtBeginDocument{
\renewcommand{\thelstlisting}{\thefigure} % Листинги используют тот же счетчик, что и рисунки
\renewcommand{\lstlistingname}{Рис.} % Меняем подпись на "Рисунок"
}
% Автоматически увеличиваем счетчик figure перед каждым листингом
\let\oldlstlisting\lstlisting
\renewcommand{\lstlisting}[1][]{%
\refstepcounter{figure}% Увеличиваем счетчик figure
\oldlstlisting[#1]% Вызываем оригинальную команду lstlisting
}
\newcommand{\specialcell}[2][l]{\begin{tabular}[#1]{@{}l@{}}#2\end{tabular}}
@@ -90,7 +103,7 @@
extendedchars=\true,
inputencoding=utf8,
keepspaces=true,
% captionpos=b,
captionpos=b,
}
\begin{document} % начало документа
@@ -169,7 +182,7 @@
\textbf{Формулировка задачи:} Посчитать для каждого спортсмена число заявок и число серий. Представление выдает только идентификатор спортсмена, число его заявок на соревнования и число серий выстрелов. Использовать представление в другом запросе.
Было создано представление sportsman\_requests\_series\_count, которое хранит запрос, выполняющий поставленную задачу. В представлении участвуют таблицы \texttt{sportsman}, \texttt{participant\_request} и \texttt{shot\_series}. Код запроса для создания представления представлен в листинге~\ref{lst:view1}, а первые десять записей получившегося представления представлены на Рис.~\ref{fig:view}.
Было создано представление sportsman\_requests\_series\_count, которое хранит запрос, выполняющий поставленную задачу. В представлении участвуют таблицы \texttt{sportsman}, \texttt{participant\_request} и \texttt{shot\_series}. Код запроса для создания представления представлен на Рис.~\ref{lst:view1}, а первые десять записей получившегося представления представлены на Рис.~\ref{fig:view}.
\begin{figure}[h]
\centering
@@ -195,7 +208,7 @@
s.id_sportsman;
\end{lstlisting}
Также был составлен пример запроса, в котором используется представление \texttt{sportsman\_requests\_series\_count}, его код представлен в листинге~\ref{lst:view2}. В этом запросе выбираются 10 самых активных с точки зрения участия в соревнованиях спортсменов из клуба <<ЛК Парадокс Лучника>>. К исходному представлению также добавляются дополнительные столбцы с данными спортсмена из таблицы \texttt{sportsman}. Результат выполнения этого запроса представлен на Рис.~\ref{fig:view_query}.
Также был составлен пример запроса, в котором используется представление \texttt{sportsman\_requests\_series\_count}, его код представлен на Рис.~\ref{lst:view2}. В этом запросе выбираются 10 самых активных с точки зрения участия в соревнованиях спортсменов из клуба <<ЛК Парадокс Лучника>>. К исходному представлению также добавляются дополнительные столбцы с данными спортсмена из таблицы \texttt{sportsman}. Результат выполнения этого запроса представлен на Рис.~\ref{fig:view_query}.
\begin{lstlisting}[mathescape=true, language=SQL, caption={Код примера запроса, в котором используется представление \texttt{sportsman\_requests\_series\_count}.}, label={lst:view2}]
select
@@ -237,7 +250,7 @@
\textbf{Формулировка задачи:} Необходимо вести статистику о том, в скольки соревнованиях участвовал каждый судья. Событийная модель должна поддерживать актуальность данных в таблицах со статистикой при изменении данных.
Для выполнения поставленной задачи, была создана отдельная таблица для сохранения статистики -- \texttt{judge\_statistics}. Код запроса для её создания представлен в листинге~\ref{lst:trigger-table}.
Для выполнения поставленной задачи, была создана отдельная таблица для сохранения статистики -- \texttt{judge\_statistics}. Код запроса для её создания представлен на Рис.~\ref{lst:trigger-table}.
\begin{lstlisting}[mathescape=true, language=SQL, caption={Код запроса для создания таблицы \texttt{judge\_statistics}.}, label={lst:trigger-table}]
create table judge_statistics (
@@ -381,7 +394,7 @@ execute function update_statistics_on_judge_request_update();
\textbf{Формулировка задачи:} Создать пользователя \texttt{readonly\_user} и \texttt{edit\_user}. Выдать первому права только на чтение данных из представления, созданного ранее. Второму также выдать права на редактирование всех таблиц, участвующих в этом представлении. Сравнить результаты различных операций с этими таблицам от имени этих пользователей.
Код запросов для создания пользователей и выдачи им необходимых прав представлен в листинге~\ref{lst:users}. По мимо стандартных прав на операции \texttt{insert}, \texttt{update}, \texttt{delete}, пользователю \texttt{readonly\_user} также необходимо предоставить права \texttt{usage} и \texttt{select} для объектов последовательностей, связанных с редактируемыми таблицами. Это особенность СУБД PostgreSQL, в которых последовательности выделены в отдельные объекты базы данных и, соответственно, для работы с ними необходимо явно предоставить пользователю права. Последовательности используются в PostgreSQL для автоинкрементных полей, в первую очередь для первичных ключей таблиц. Также обоим пользователем необходимо предоставить права на использование схемы базы данных, без этого разрешения пользователь даже при наличии прав на отдельные объекты внутри схемы не сможет к ним получить доступ.
Код запросов для создания пользователей и выдачи им необходимых прав представлен на Рис.~\ref{lst:users}. По мимо стандартных прав на операции \texttt{insert}, \texttt{update}, \texttt{delete}, пользователю \texttt{readonly\_user} также необходимо предоставить права \texttt{usage} и \texttt{select} для объектов последовательностей, связанных с редактируемыми таблицами. Это особенность СУБД PostgreSQL, в которых последовательности выделены в отдельные объекты базы данных и, соответственно, для работы с ними необходимо явно предоставить пользователю права. Последовательности используются в PostgreSQL для автоинкрементных полей, в первую очередь для первичных ключей таблиц. Также обоим пользователем необходимо предоставить права на использование схемы базы данных, без этого разрешения пользователь даже при наличии прав на отдельные объекты внутри схемы не сможет к ним получить доступ.
Примеры различных операций от имён этих пользователей вместе с реакцией СУБД демонстрируются в таблице~\ref{tbl:users}.