diff --git a/labs/lab1/part2/assets/22.png b/labs/lab1/part2/assets/22.png new file mode 100644 index 0000000..3e4b151 Binary files /dev/null and b/labs/lab1/part2/assets/22.png differ diff --git a/labs/lab1/part2/assets/23.png b/labs/lab1/part2/assets/23.png new file mode 100644 index 0000000..809dfb9 Binary files /dev/null and b/labs/lab1/part2/assets/23.png differ diff --git a/labs/lab1/part2/assets/24.png b/labs/lab1/part2/assets/24.png new file mode 100644 index 0000000..a981102 Binary files /dev/null and b/labs/lab1/part2/assets/24.png differ diff --git a/labs/lab1/part2/assets/25.png b/labs/lab1/part2/assets/25.png new file mode 100644 index 0000000..58e084d Binary files /dev/null and b/labs/lab1/part2/assets/25.png differ diff --git a/labs/lab1/part2/assets/26.png b/labs/lab1/part2/assets/26.png new file mode 100644 index 0000000..80f1a9c Binary files /dev/null and b/labs/lab1/part2/assets/26.png differ diff --git a/labs/lab1/part2/assets/27.png b/labs/lab1/part2/assets/27.png new file mode 100644 index 0000000..85c4faf Binary files /dev/null and b/labs/lab1/part2/assets/27.png differ diff --git a/labs/lab1/part2/assets/28.png b/labs/lab1/part2/assets/28.png new file mode 100644 index 0000000..f2f0dc6 Binary files /dev/null and b/labs/lab1/part2/assets/28.png differ diff --git a/labs/lab1/part2/assets/29.png b/labs/lab1/part2/assets/29.png new file mode 100644 index 0000000..bd44f21 Binary files /dev/null and b/labs/lab1/part2/assets/29.png differ diff --git a/labs/lab1/part2/assets/30.png b/labs/lab1/part2/assets/30.png new file mode 100644 index 0000000..02294d7 Binary files /dev/null and b/labs/lab1/part2/assets/30.png differ diff --git a/labs/lab1/part2/assets/31.png b/labs/lab1/part2/assets/31.png new file mode 100644 index 0000000..6e62c37 Binary files /dev/null and b/labs/lab1/part2/assets/31.png differ diff --git a/labs/lab1/part2/assets/32.png b/labs/lab1/part2/assets/32.png new file mode 100644 index 0000000..e33774b Binary files /dev/null and b/labs/lab1/part2/assets/32.png differ diff --git a/labs/lab1/part2/assets/33.png b/labs/lab1/part2/assets/33.png new file mode 100644 index 0000000..a2ca173 Binary files /dev/null and b/labs/lab1/part2/assets/33.png differ diff --git a/labs/lab1/part2/assets/34.png b/labs/lab1/part2/assets/34.png new file mode 100644 index 0000000..4387e3b Binary files /dev/null and b/labs/lab1/part2/assets/34.png differ diff --git a/labs/lab1/part2/assets/35.png b/labs/lab1/part2/assets/35.png new file mode 100644 index 0000000..c2d4031 Binary files /dev/null and b/labs/lab1/part2/assets/35.png differ diff --git a/labs/lab1/part2/assets/36.png b/labs/lab1/part2/assets/36.png new file mode 100644 index 0000000..87ef910 Binary files /dev/null and b/labs/lab1/part2/assets/36.png differ diff --git a/labs/lab1/part2/assets/37.png b/labs/lab1/part2/assets/37.png new file mode 100644 index 0000000..71f030c Binary files /dev/null and b/labs/lab1/part2/assets/37.png differ diff --git a/labs/lab1/part2/assets/38.png b/labs/lab1/part2/assets/38.png new file mode 100644 index 0000000..1fd2bd6 Binary files /dev/null and b/labs/lab1/part2/assets/38.png differ diff --git a/labs/lab1/part2/assets/39.png b/labs/lab1/part2/assets/39.png new file mode 100644 index 0000000..846b860 Binary files /dev/null and b/labs/lab1/part2/assets/39.png differ diff --git a/labs/lab1/part2/assets/40.png b/labs/lab1/part2/assets/40.png new file mode 100644 index 0000000..a20c3b5 Binary files /dev/null and b/labs/lab1/part2/assets/40.png differ diff --git a/labs/lab1/part2/assets/41.png b/labs/lab1/part2/assets/41.png new file mode 100644 index 0000000..f2c365e Binary files /dev/null and b/labs/lab1/part2/assets/41.png differ diff --git a/labs/lab1/part2/assets/42.png b/labs/lab1/part2/assets/42.png new file mode 100644 index 0000000..4244833 Binary files /dev/null and b/labs/lab1/part2/assets/42.png differ diff --git a/labs/lab1/part2/assets/43.png b/labs/lab1/part2/assets/43.png new file mode 100644 index 0000000..b92edb6 Binary files /dev/null and b/labs/lab1/part2/assets/43.png differ diff --git a/labs/lab1/part2/assets/44.png b/labs/lab1/part2/assets/44.png new file mode 100644 index 0000000..38517aa Binary files /dev/null and b/labs/lab1/part2/assets/44.png differ diff --git a/labs/lab1/part2/assets/45.png b/labs/lab1/part2/assets/45.png new file mode 100644 index 0000000..ebd971f Binary files /dev/null and b/labs/lab1/part2/assets/45.png differ diff --git a/labs/lab1/part2/assets/46.png b/labs/lab1/part2/assets/46.png new file mode 100644 index 0000000..c77b9fe Binary files /dev/null and b/labs/lab1/part2/assets/46.png differ diff --git a/labs/lab1/part2/assets/47.png b/labs/lab1/part2/assets/47.png new file mode 100644 index 0000000..dd9ea01 Binary files /dev/null and b/labs/lab1/part2/assets/47.png differ diff --git a/labs/lab1/part2/assets/48.png b/labs/lab1/part2/assets/48.png new file mode 100644 index 0000000..22d4a65 Binary files /dev/null and b/labs/lab1/part2/assets/48.png differ diff --git a/labs/lab1/part2/assets/49.png b/labs/lab1/part2/assets/49.png new file mode 100644 index 0000000..aba7758 Binary files /dev/null and b/labs/lab1/part2/assets/49.png differ diff --git a/labs/lab1/part2/assets/50.png b/labs/lab1/part2/assets/50.png new file mode 100644 index 0000000..2be6665 Binary files /dev/null and b/labs/lab1/part2/assets/50.png differ diff --git a/labs/lab1/part2/assets/51.png b/labs/lab1/part2/assets/51.png new file mode 100644 index 0000000..8ce7aa3 Binary files /dev/null and b/labs/lab1/part2/assets/51.png differ diff --git a/labs/lab1/part2/assets/52.png b/labs/lab1/part2/assets/52.png new file mode 100644 index 0000000..cc86571 Binary files /dev/null and b/labs/lab1/part2/assets/52.png differ diff --git a/labs/lab1/part2/assets/53.png b/labs/lab1/part2/assets/53.png new file mode 100644 index 0000000..466edd0 Binary files /dev/null and b/labs/lab1/part2/assets/53.png differ diff --git a/labs/lab1/part2/assets/54.png b/labs/lab1/part2/assets/54.png new file mode 100644 index 0000000..fd1ad41 Binary files /dev/null and b/labs/lab1/part2/assets/54.png differ diff --git a/labs/lab1/part2/assets/55.png b/labs/lab1/part2/assets/55.png new file mode 100644 index 0000000..3545359 Binary files /dev/null and b/labs/lab1/part2/assets/55.png differ diff --git a/labs/lab1/part2/assets/56.png b/labs/lab1/part2/assets/56.png new file mode 100644 index 0000000..6b560bd Binary files /dev/null and b/labs/lab1/part2/assets/56.png differ diff --git a/labs/lab1/part2/assets/57.png b/labs/lab1/part2/assets/57.png new file mode 100644 index 0000000..1a51e20 Binary files /dev/null and b/labs/lab1/part2/assets/57.png differ diff --git a/labs/lab1/part2/report.pdf b/labs/lab1/part2/report.pdf index 4dc08e6..703c9c4 100644 Binary files a/labs/lab1/part2/report.pdf and b/labs/lab1/part2/report.pdf differ diff --git a/labs/lab1/part2/report.typ b/labs/lab1/part2/report.typ index 0d77aba..fdad1f9 100644 --- a/labs/lab1/part2/report.typ +++ b/labs/lab1/part2/report.typ @@ -210,13 +210,211 @@ REFERENCES "Countries"."REGIONS" ("REGION_ID"); ===== Задание 5. Создания индекса с помощью графического интерфейса pgadmin. +В таблице EmployeesDepartments.LOCATIONS, я выбрал раздел меню для создания индекса: + +#align(center)[#image("assets/22.png")] + +Я в диалоге создания индекса я передал следующие параметры: + +#align(center)[#image("assets/23.png")] + +#align(center)[#image("assets/24.png")] + +#align(center)[#image("assets/25.png")] + +sql: + +#align(center)[#image("assets/26.png")] + ===== Задание 6. Построение диаграмм базы данных. +Для создания диаграммы я нажал ПКМ на узел базы данных и выбрал параметр "ERD For Database": + +#align(center)[#image("assets/27.png")] + +Затем я скорректировал вид своей диаграммы в соответствии с условием: +#align(center)[#image("assets/28.png")] + +Я экспортировал снимок диаграммы, нажав на соответствующую кнопку. Результат: + +#align(center)[#image("assets/29.png")] + +Сохранил проект диаграммы: + +#align(center)[#image("assets/30.png")] + ===== Задание 7. Добавление данных в таблицу. +Я раскрыл меню для генерирования скрипта по вставке данных в таблицу Countries.CURRENCIES: + +#align(center)[#image("assets/31.png")] + +Затем я добавил следующий код в скрипт: + +```sql +INSERT INTO "Countries"."CURRENCIES"("COMMENTS", "CURRENCY_NAME", "CURRENCY_CODE") +VALUES('EuroZone', 'Euro', 'EUR'); +``` + +#align(center)[#image("assets/32.png")] + +После запуска скрипта проверил при помощи: + +```sql +select * from "Countries"."CURRENCIES"; +``` + +#align(center)[#image("assets/33.png")] + +В столбце EMPLOYEE_ID я заменил identity с always на by default. + +#align(center)[#image("assets/34.png")] + +Затем при помощи графического интерфейса pgadmin, я добавил запись в таблицу "EmployeesDepartments"."EMPLOYEES": + +#align(center)[#image("assets/35.png")] + +#align(center)[#image("assets/36.png")] + +Затем я добавил строку и сохранил данные: + +#align(center)[#image("assets/37.png")] +#align(center)[#image("assets/38.png")] +#align(center)[#image("assets/39.png")] + +Затем, в querry tool я ввел следующий код: + +```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("assets/40.png")] + +Проверим: + +```sql +SELECT * FROM "EmployeesDepartments"."EMPLOYEES"; +``` + +#align(center)[#image("assets/41.png")] + + ===== Задание 8. Ограничения для столбцов. +Я добавил ограничения к таблицам "Countries"."SPOKEN_LANGUAGES" и "EmployeesDepartments"."EMPLOYEES" при помощи следующего кода: + +```sql +ALTER TABLE "Countries"."SPOKEN_LANGUAGES" +ADD CONSTRAINT "CTRY_NUM_FK1" FOREIGN KEY ("COUNTRY_ID") +REFERENCES "Countries"."COUNTRIES" ("COUNTRY_ID"); +``` + +#align(center)[#image("assets/42.png")] +#align(center)[#image("assets/43.png")] + +и + +```sql +ALTER TABLE "EmployeesDepartments"."EMPLOYEES" +ADD CONSTRAINT "EMP_SALARY_MIN" +CHECK ("SALARY" > 0); +``` + +#align(center)[#image("assets/44.png")] +#align(center)[#image("assets/45.png")] + +Затем я добавил еще одно ограничение для таблицы JOB_HISTORY. Для этого в свойствах таблицы в разделе constraints добавил check c условием, что "END_DATE" > "START_DATE": + +#align(center)[#image("assets/46.png")] +#align(center)[#image("assets/47.png")] + +Я включил это ограничение выключив соответствующую опцию: + +#align(center)[#image("assets/48.png")] +#align(center)[#image("assets/49.png")] + +Также я проверил работоспособность ограничения: + +```sql +INSERT INTO "EmployeesDepartments"."JOB_HISTORY" +("EMPLOYEE_ID", "START_DATE", "END_DATE", "JOB_ID", "DEPARTMENT_ID") +VALUES(200, '06-17-1993', '09-17-1987', 'AD_ASST', 90); +``` + +#align(center)[#image("assets/50.png")] + +и + +```sql +INSERT INTO "EmployeesDepartments"."JOB_HISTORY" +("EMPLOYEE_ID", "START_DATE", "END_DATE", "JOB_ID", "DEPARTMENT_ID") +VALUES(200, '06-17-1981', '06-17-1993', 'AD_ASST', 90); +``` + +#align(center)[#image("assets/51.png")] + ===== Задание 9. Очистка таблиц и завершение создания БД HR. +Я произвел очистку таблицы EMPLOYEES с помощью DDL команды `TRUNCATE`: + +```sql +TRUNCATE "EmployeesDepartments"."EMPLOYEES"; +``` + +#align(center)[#image("assets/52.png")] + +Также я очистил JOB_HISTORY и CURRENCIES: + +```sql +TRUNCATE "EmployeesDepartments"."JOB_HISTORY"; +``` + +#align(center)[#image("assets/53.png")] + +и + +```sql +TRUNCATE "Countries"."CURRENCIES"; +``` + +#align(center)[#image("assets/54.png")] + +После очистки я выполнил код из файла `script2_alter.sql`: + +#align(center)[#image("assets/55.png")] + +И для добавления данных, я выполнил скрипт `script3_insert.sql`: + +#align(center)[#image("assets/56.png")] + +Результат: + +#align(center)[#image("assets/57.png")] + === Выводы. +В ходе работы были поставлены цели изучить принципы проектирования и администрирования реляционных баз данных в postgresql, освоить создание таблиц, настройку ключей и ограничений, добавление и проверку данных, а также построение er диаграмм. + +Что должны были достичь: + +- Создать таблицы с корректной структурой и типами данных. +- Настроить первичные и внешние ключи, ограничения `NOT NULL` и `CHECK`. +- Добавить тестовые данные через pgadmin и sql запросы. +- Создать индексы и визуализировать структуру базы данных через er диаграмму. + +Что фактически достигнуто: + +- Все требуемые таблицы созданы. +- Настроены первичные и внешние ключи, значения по умолчанию и автоинкрементные поля. +- Добавлены данные, проверены ограничения целостности. +- Построена и сохранена er диаграмма базы. + +Трудности и решения: + +- Появлялись ошибки дублирования ключей при вставке данных, решено изменением генерации `IDENTITY` с `ALWAYS` на `BY DEFAULT`. +- Нарушение внешнего ключа при добавлении записей решалось последовательным заполнением родительских таблиц перед зависимыми. +- Ошибки при создании ограничений и индексов устранялись проверкой существующих объектов и корректировкой sql запросов. + +Работа позволила закрепить навыки создания и администрирования баз данных в postgresql, понять логику ограничений и связей между таблицами, а также научиться эффективно добавлять и проверять данные с соблюдением целостности базы. Все задачи лабораторной выполнены с учетом практических рекомендаций и ошибок, которые возникали в процессе работы. +