diff --git a/labs/lab1/report.pdf b/labs/lab1/report.pdf index 3d96e09..c824e95 100644 Binary files a/labs/lab1/report.pdf and b/labs/lab1/report.pdf differ diff --git a/labs/lab1/report.typ b/labs/lab1/report.typ index 985b5de..258711e 100644 --- a/labs/lab1/report.typ +++ b/labs/lab1/report.typ @@ -599,99 +599,224 @@ REFERENCES "Countries"."REGIONS" ("REGION_ID"); ===== Задание 5. Создания индекса с помощью графического интерфейса pgadmin. -В таблице EmployeesDepartments.LOCATIONS, я выбрал раздел меню для создания индекса: +В таблице EmployeesDepartments.LOCATIONS, я выбрал раздел меню для создания индекса (Рис. 41): -#align(center)[#image("part2/assets/22.png")] +#align(center)[ + #figure( + image("part2/assets/22.png"), + caption: [Меню для создания индекса.], + supplement: [Рис] + ) +] -Я в диалоге создания индекса я передал следующие параметры: +Я в диалоге создания индекса я передал следующие параметры (Рис. 42, 43, 44): -#align(center)[#image("part2/assets/23.png")] +#align(center)[ + #figure( + image("part2/assets/23.png"), + caption: [Параметры создания индекса. Вкладка General.], + supplement: [Рис] + ) +] -#align(center)[#image("part2/assets/24.png")] +#align(center)[ + #figure( + image("part2/assets/24.png"), + caption: [Параметры создания индекса. Вкладка Definition.], + supplement: [Рис] + ) +] -#align(center)[#image("part2/assets/25.png")] +#align(center)[ + #figure( + image("part2/assets/25.png"), + caption: [Параметры создания индекса. Вкладка Columns.], + supplement: [Рис] + ) +] sql: -#align(center)[#image("part2/assets/26.png")] +#align(center)[ + #figure( + image("part2/assets/26.png"), + caption: [SQL скрипт создания индекса.], + supplement: [Рис] + ) +] ===== Задание 6. Построение диаграмм базы данных. -Для создания диаграммы я нажал ПКМ на узел базы данных и выбрал параметр "ERD For Database": +Для создания диаграммы я нажал ПКМ на узел базы данных и выбрал параметр "ERD For Database" (Рис. 46): -#align(center)[#image("part2/assets/27.png")] +#align(center)[ + #figure( + image("part2/assets/27.png"), + caption: [Меню создание ERD-диаграммы.], + supplement: [Рис] + ) +] -Затем я скорректировал вид своей диаграммы в соответствии с условием: -#align(center)[#image("part2/assets/28.png")] +Затем я скорректировал вид своей диаграммы в соответствии с условием (Рис. 47): -Я экспортировал снимок диаграммы, нажав на соответствующую кнопку. Результат: +#align(center)[ + #figure( + image("part2/assets/28.png"), + caption: [Вид ERD-диаграммы.], + supplement: [Рис] + ) +] -#align(center)[#image("part2/assets/29.png")] +Я экспортировал снимок диаграммы, нажав на соответствующую кнопку. Результат (Рис. 48): -Сохранил проект диаграммы: +#align(center)[ + #figure( + image("part2/assets/29.png"), + caption: [Рисунок диаграммы.], + supplement: [Рис] + ) +] -#align(center)[#image("part2/assets/30.png")] +Сохранил проект диаграммы (Рис. 49): + +#align(center)[ + #figure( + image("part2/assets/30.png"), + caption: [Сохраненный проект диаграммы.], + supplement: [Рис] + ) +] ===== Задание 7. Добавление данных в таблицу. -Я раскрыл меню для генерирования скрипта по вставке данных в таблицу Countries.CURRENCIES: +Я раскрыл меню для генерирования скрипта по вставке данных в таблицу Countries.CURRENCIES (Рис. 50): -#align(center)[#image("part2/assets/31.png")] +#align(center)[ + #figure( + image("part2/assets/31.png"), + caption: [Меню для генерирования скрита.], + supplement: [Рис] + ) +] -Затем я добавил следующий код в скрипт: +Затем я добавил следующий код в скрипт (Рис. 51): ```sql INSERT INTO "Countries"."CURRENCIES"("COMMENTS", "CURRENCY_NAME", "CURRENCY_CODE") VALUES('EuroZone', 'Euro', 'EUR'); ``` -#align(center)[#image("part2/assets/32.png")] +#align(center)[ + #figure( + image("part2/assets/32.png"), + caption: [Скрипт в query tool.], + supplement: [Рис] + ) +] -После запуска скрипта проверил при помощи: +После запуска скрипта проверил при помощи (Рис. 52): ```sql select * from "Countries"."CURRENCIES"; ``` -#align(center)[#image("part2/assets/33.png")] +#align(center)[ + #figure( + image("part2/assets/33.png"), + caption: [Скрипт в query tool.], + supplement: [Рис] + ) +] -В столбце EMPLOYEE_ID я заменил identity с always на by default. +В столбце EMPLOYEE_ID я заменил identity с always на by default (Рис. 53). -#align(center)[#image("part2/assets/34.png")] +#align(center)[ + #figure( + image("part2/assets/34.png"), + caption: [Изменение параметра identity.], + supplement: [Рис] + ) +] -Затем при помощи графического интерфейса pgadmin, я добавил запись в таблицу "EmployeesDepartments"."EMPLOYEES": -#align(center)[#image("part2/assets/35.png")] +Затем при помощи графического интерфейса pgadmin, я добавил запись в таблицу "EmployeesDepartments"."EMPLOYEES" (Рис. 54, 55): -#align(center)[#image("part2/assets/36.png")] +#align(center)[ + #figure( + image("part2/assets/35.png"), + caption: [Просмотр строк таблицы.], + supplement: [Рис] + ) +] -Затем я добавил строку и сохранил данные: +#align(center)[ + #figure( + image("part2/assets/36.png"), + caption: [Пустые строки таблицы.], + supplement: [Рис] + ) +] -#align(center)[#image("part2/assets/37.png")] -#align(center)[#image("part2/assets/38.png")] -#align(center)[#image("part2/assets/39.png")] -Затем, в query tool я ввел следующий код: +Затем я добавил строку и сохранил данные (Рис. 56, 57, 58): + +#align(center)[ + #figure( + image("part2/assets/37.png"), + caption: [Добавление строки.], + supplement: [Рис] + ) +] + +#align(center)[ + #figure( + image("part2/assets/38.png"), + caption: [Добавление строки.], + supplement: [Рис] + ) +] + +#align(center)[ + #figure( + image("part2/assets/39.png"), + caption: [Новая строка сохранена.], + supplement: [Рис] + ) +] + +Затем, в query tool я ввел следующий код (Рис. 59): ```sql INSERT INTO "EmployeesDepartments"."EMPLOYEES"("FIRST_NAME", "LAST_NAME", "EMAIL", "PHONE_NUMBER", "JOB_ID", "SALARY", "COMMISSION_PCT", "MANAGER_ID", "DEPARTMENT_ID") VALUES(2, 'Steven', 'King', 'SKING', '515.123.4567', 'AD_PRES', 24000, null, null, 90); ``` -#align(center)[#image("part2/assets/40.png")] +#align(center)[ + #figure( + image("part2/assets/40.png"), + caption: [Код в query tool.], + supplement: [Рис] + ) +] -Проверим: +Проверим (Рис. 60): ```sql SELECT * FROM "EmployeesDepartments"."EMPLOYEES"; ``` -#align(center)[#image("part2/assets/41.png")] +#align(center)[ + #figure( + image("part2/assets/41.png"), + caption: [Скрипт в query tool.], + supplement: [Рис] + ) +] ===== Задание 8. Ограничения для столбцов. -Я добавил ограничения к таблицам "Countries"."SPOKEN_LANGUAGES" и "EmployeesDepartments"."EMPLOYEES" при помощи следующего кода: +Я добавил ограничения к таблицам "Countries"."SPOKEN_LANGUAGES" и "EmployeesDepartments"."EMPLOYEES" при помощи следующего кода (Рис. 61, 62): ```sql ALTER TABLE "Countries"."SPOKEN_LANGUAGES" @@ -699,10 +824,23 @@ ADD CONSTRAINT "CTRY_NUM_FK1" FOREIGN KEY ("COUNTRY_ID") REFERENCES "Countries"."COUNTRIES" ("COUNTRY_ID"); ``` -#align(center)[#image("part2/assets/42.png")] -#align(center)[#image("part2/assets/43.png")] +#align(center)[ + #figure( + image("part2/assets/42.png"), + caption: [Добавления ограничений через query tool.], + supplement: [Рис] + ) +] -и +#align(center)[ + #figure( + image("part2/assets/43.png"), + caption: [Ограничения таблицы SPOKEN_LANGUAGES.], + supplement: [Рис] + ) +] + +и (Рис. 63, 64) ```sql ALTER TABLE "EmployeesDepartments"."EMPLOYEES" @@ -710,20 +848,60 @@ ADD CONSTRAINT "EMP_SALARY_MIN" CHECK ("SALARY" > 0); ``` -#align(center)[#image("part2/assets/44.png")] -#align(center)[#image("part2/assets/45.png")] +#align(center)[ + #figure( + image("part2/assets/44.png"), + caption: [Добавление ограничения через query tool.], + supplement: [Рис] + ) +] -Затем я добавил еще одно ограничение для таблицы JOB_HISTORY. Для этого в свойствах таблицы в разделе constraints добавил check c условием, что "END_DATE" > "START_DATE": +#align(center)[ + #figure( + image("part2/assets/45.png"), + caption: [Добавленное ограничение.], + supplement: [Рис] + ) +] -#align(center)[#image("part2/assets/46.png")] -#align(center)[#image("part2/assets/47.png")] -Я включил это ограничение выключив соответствующую опцию: +Затем я добавил еще одно ограничение для таблицы JOB_HISTORY. Для этого в свойствах таблицы в разделе constraints добавил check c условием, что "END_DATE" > "START_DATE" (Рис. 65, 66): -#align(center)[#image("part2/assets/48.png")] -#align(center)[#image("part2/assets/49.png")] +#align(center)[ + #figure( + image("part2/assets/46.png"), + caption: [Добавление ограничения для JOB_HISTORY.], + supplement: [Рис] + ) +] -Также я проверил работоспособность ограничения: +#align(center)[ + #figure( + image("part2/assets/47.png"), + caption: [Добавленное ограничение.], + supplement: [Рис] + ) +] + +Я включил это ограничение выключив соответствующую опцию (Рис. 67, 68): + +#align(center)[ + #figure( + image("part2/assets/48.png"), + caption: [Выключенная функция "Don't validate?".], + supplement: [Рис] + ) +] + +#align(center)[ + #figure( + image("part2/assets/49.png"), + caption: [Включенное ограничение.], + supplement: [Рис] + ) +] + +Также я проверил работоспособность ограничения (Рис. 69, 70): ```sql INSERT INTO "EmployeesDepartments"."JOB_HISTORY" @@ -731,7 +909,13 @@ INSERT INTO "EmployeesDepartments"."JOB_HISTORY" VALUES(200, '06-17-1993', '09-17-1987', 'AD_ASST', 90); ``` -#align(center)[#image("part2/assets/50.png")] +#align(center)[ + #figure( + image("part2/assets/50.png"), + caption: [Ошибка. Скрипт не отрабатывает.], + supplement: [Рис] + ) +] и @@ -741,25 +925,44 @@ INSERT INTO "EmployeesDepartments"."JOB_HISTORY" VALUES(200, '06-17-1981', '06-17-1993', 'AD_ASST', 90); ``` -#align(center)[#image("part2/assets/51.png")] +#align(center)[ + #figure( + image("part2/assets/51.png"), + caption: [Скрипт отрабатывает без ошибки.], + supplement: [Рис] + ) +] ===== Задание 9. Очистка таблиц и завершение создания БД HR. -Я произвел очистку таблицы EMPLOYEES с помощью DDL команды `TRUNCATE`: +Я произвел очистку таблицы EMPLOYEES с помощью DDL команды `TRUNCATE` (Рис. 71): ```sql TRUNCATE "EmployeesDepartments"."EMPLOYEES"; ``` -#align(center)[#image("part2/assets/52.png")] +#align(center)[ + #figure( + image("part2/assets/52.png"), + caption: [Выполнение команды `TRUNCATE`.], + supplement: [Рис] + ) +] -Также я очистил JOB_HISTORY и CURRENCIES: + +Также я очистил JOB_HISTORY и CURRENCIES (Рис. 72, 73): ```sql TRUNCATE "EmployeesDepartments"."JOB_HISTORY"; ``` -#align(center)[#image("part2/assets/53.png")] +#align(center)[ + #figure( + image("part2/assets/53.png"), + caption: [Выполнение команды `TRUNCATE`.], + supplement: [Рис] + ) +] и @@ -767,19 +970,43 @@ TRUNCATE "EmployeesDepartments"."JOB_HISTORY"; TRUNCATE "Countries"."CURRENCIES"; ``` -#align(center)[#image("part2/assets/54.png")] +#align(center)[ + #figure( + image("part2/assets/54.png"), + caption: [Исполнение команды `TRUNCATE`.], + supplement: [Рис] + ) +] -После очистки я выполнил код из файла `script2_alter.sql`: +После очистки я выполнил код из файла `script2_alter.sql` (Рис. 74): -#align(center)[#image("part2/assets/55.png")] +#align(center)[ + #figure( + image("part2/assets/55.png"), + caption: [Исполнение скрипта `script2_alter.sql`.], + supplement: [Рис] + ) +] -И для добавления данных, я выполнил скрипт `script3_insert.sql`: +И для добавления данных, я выполнил скрипт `script3_insert.sql` (Рис. 75): -#align(center)[#image("part2/assets/56.png")] +#align(center)[ + #figure( + image("part2/assets/56.png"), + caption: [Исполнение скрипта `script3_insert.sql`.], + supplement: [Рис] + ) +] -Результат: +Результат (Рис. 76): -#align(center)[#image("part2/assets/57.png")] +#align(center)[ + #figure( + image("part2/assets/57.png"), + caption: [Получившаяся ERD-диаграмма.], + supplement: [Рис] + ) +] === Выводы.