first commit

This commit is contained in:
2025-12-15 22:27:56 +03:00
commit d31e31332f
231 changed files with 242246 additions and 0 deletions

1
README.md Normal file
View File

@@ -0,0 +1 @@
[Course link](https://lms.itmo.ru/course/view.php?id=623)

BIN
backups/backup_lab2 Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 393 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 394 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 459 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

BIN
labs/lab1/part1/report.pdf Normal file

Binary file not shown.

207
labs/lab1/part1/report.typ Normal file
View File

@@ -0,0 +1,207 @@
#set text(size: 1.3em)
#show link: underline
#set page(footer: context {
if counter(page).get().first() > 1 [
#align(center)[
#counter(page).display("1")
]
]
})
#show raw.where(block: false): box.with(
fill: luma(240),
inset: (x: 3pt, y: 0pt),
outset: (y: 3pt),
radius: 2pt,
)
#show raw.where(block: true): block.with(
fill: luma(240),
inset: 10pt,
radius: 4pt,
)
// title
#align(center)[Санкт-Петербургский национальный исследовательский университет информационных технологий, механики и оптики]
\
\
\
#align(center)[Факультет инфокоммуникационных технологий]
#align(center)[Направление подготовки 11.03.02]
\
\
#align(center)[Практическая работа №1.1]
#align(center)[Установка и первоначальная настройка субд postgresql.]
\
\
\ //#align(center)[Вариант 19]
\
\
\
\
\
\
\
#align(right)[Выполнил:]
#align(right)[Дощенников Никита Андреевич]
#align(right)[Группа: К3221]
#align(right)[Проверила:]
#align(right)[Татьяна Евгеньевна Войтюк]
\
\
#align(center)[Санкт-Петербург]
#align(center)[2025]
#pagebreak()
=== Цель работы:
Освоить базовые приёмы установки и настройки субд "postgresql", научиться использовать pgadmin для администрирования, развернуть учебную базу данных "demo" и ознакомиться с её структурой, а также закрепить навыки создания баз данных и схем на примере учебной бд "hr".
=== Задачи, решаемые при выполнении работы.
- Установить и настроить субд postgresql и клиент pgadmin.
- Проверить правильность работы сервера с помощью выполнения тестового запроса.
- Развернуть учебную базу demo и убедиться в доступности её объектов.
- Ознакомиться со структурой базы demo и проанализировать основные сущности.
- Создать учебную базу данных двумя способами: через графический интерфейс и с помощью `CREATE DATABASE`.
- Создать в базе данных hr схемы для группировки объектов.
=== Исходные данные.
- Сервер с установленными docker и контейнерами:
- postgres:16 сервер субд postgresql,
- dpage/pgadmin4 веб-интерфейс для администрирования.
- Учебная база данных demo.
=== Выполнение работы.
==== Задание 1. Установка необходимого ПО.
Для выполнения работы была установлена субд postgresql и приложение pgadmin. Установка производилась в среде docker.
На сервере был установлен docker и запущены контейнеры: `postgres:16`, `dpage/pgadmin4`.
#align(center)[#image("assets/18.png")]
Контейнеры были объединены в общую сеть docker, чтобы pgadmin мог напрямую подключаться к postgres.
#align(center)[#image("assets/19.png")]
pgadmin стал доступен по адресу #link("https://db.fymio.us")[db.fymio.us]
#align(center)[#image("assets/20.png")]
В pgadmin был зарегистрирован новый сервер. В настройках подключения были указаны следующие параметры:
#align(center)[#image("assets/16.png")]
#align(center)[#image("assets/17.png")]
В "Object Explorer" слева я раскрыл узел "Databases":
#align(center)[#image("assets/1.png")]
Затем я нажал ПКМ по базе "postgres" и выбрал инструмент "Querry Tool":
#align(center)[#image("assets/2.png")]
В открывшемся окне написал запрос проверки версии сервера `SELECT version();`. После этого нажал кнопку "Execute script".
#align(center)[#image("assets/3.png")]
В поле "Data Output" я увидел версию `PostgreSQL 16.10`.
==== Задание 2. Подключение учебной базы данных.
После выполнения следующих команд на сервере учебная база данных появилась в "Object Explorer".
```bash
wget https://edu.postgrespro.ru/demo-medium.zip
unzip demo-medium.zip
docker exec -i postgres psql -U postgres -d postgres < demo-medium-20170815.sql
```
После появления базы данных "demo", в "Querry Tool" я выполнил следующий скрипт:
```sql
SELECT * FROM bookings.aircrafts_data;
```
#align(center)[#image("assets/4.png")]
==== Задание 3. Ознакомление с учебной БД.
Я ознакомился с описанием БД на сайте #link("https://postgrespro.ru/education/demodb")[postgrespro.ru/education/demodb]
==== Задание 4. Создание учебной базы данных HR средствами pgAdmin.
Я нажал ПКМ на узле "Databases" и выбрал меню "Create" затем "Database...".
#align(center)[#image("assets/5.png")]
Затем в октрывшемся окне я выставил следующие настройки.
#align(center)[#image("assets/6.png")]
#align(center)[#image("assets/7.png")]
Затем я сохранил настройки. В "Object Explorer" появилась созданная база.
#align(center)[#image("assets/8.png")]
После этого я удалил базу через ПКМ.
#align(center)[#image("assets/9.png")]
==== Задание 5. Создание учебной базы данных HR средствами PL/pgSQL
Я открыл "Querry Tool" базы данных `postgres`. И прописал следующий скрипт.
```sql
CREATE DATABASE hr
WITH ENCODING 'UTF8'
LC_COLLATE 'C'
LC_CTYPE 'C'
TEMPLATE template0
CONNECTION LIMIT 1;
```
#align(center)[#image("assets/10.png")]
После этого в списке баз появилась созданная.
#align(center)[#image("assets/11.png")]
==== Задание 6. Создание схем.
Я развернул вкладку для создания схем.
#align(center)[#image("assets/12.png")]
И создал схему "EmployeesDepartments". В "Object Explorer" видно что схема создана.
#align(center)[#image("assets/13.png")]
Чтобы создать вторую схему, я открыл "Querry Tool" к базе `hr`. И прописал следующие запросы:
```cs
CREATE SCHEMA IF NOT EXISTS "countries"
AUTHORIZATION postgres;
```
#align(center)[#image("assets/14.png")]
В "Object Explorer" видна добавленная схема:
#align(center)[#image("assets/15.png")]
=== Выводы.
В ходе выполнения работы я освоил базовые приёмы установки и настройки субд postgresql, а также работу с клиентским приложением pgadmin. Было развернуто необходимое программное обеспечение в контейнерах Docker.
В процессе работы удалось установить postgresql и pgadmin, загрузить и подключить учебную базу данных и выполнить тестовые запросы к ней, ознакомиться со структурой demo и основными сущностями, создать учебную базу данных двумя способами, через графический интерфейс pgadmin и с использованием `CREATE DATABASE`, создать в базе две схемы: одну средствами pgadmin, вторую с помощью sql-запроса.
При выполнении работы возникли следующие трудности: при создании базы данных через SQL возникала ошибка с параметрами локали. Она была устранена с помощью указания `TEMPLATE template0` и нейтральной локали `C`. При подключении pgadmin к серверу пришлось настраивать отдельную docker-сеть и регистрировать контейнеры, чтобы обеспечить доступность сервиса по адресу #link("https://db.fymio.us")[`db.fymio.us`].

BIN
labs/lab1/part1/task.pdf Normal file

Binary file not shown.

BIN
labs/lab1/part1/theory.pdf Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 944 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 466 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

BIN
labs/lab1/part2/report.pdf Normal file

Binary file not shown.

420
labs/lab1/part2/report.typ Normal file
View File

@@ -0,0 +1,420 @@
#set text(size: 1.3em)
#show link: underline
#set page(footer: context {
if counter(page).get().first() > 1 [
#align(center)[
#counter(page).display("1")
]
]
})
#show raw.where(block: false): box.with(
fill: luma(240),
inset: (x: 3pt, y: 0pt),
outset: (y: 3pt),
radius: 2pt,
)
#show raw.where(block: true): block.with(
fill: luma(240),
inset: 10pt,
radius: 4pt,
)
// title
#align(center)[Санкт-Петербургский национальный исследовательский университет информационных технологий, механики и оптики]
\
\
\
#align(center)[Факультет инфокоммуникационных технологий]
#align(center)[Направление подготовки 11.03.02]
\
\
#align(center)[Практическая работа №1.2]
#align(center)[Установка и первоначальная настройка субд postgresql.]
\
\
\ //#align(center)[Вариант 19]
\
\
\
\
\
\
\
#align(right)[Выполнил:]
#align(right)[Дощенников Никита Андреевич]
#align(right)[Группа: К3221]
#align(right)[Проверила:]
#align(right)[Татьяна Евгеньевна Войтюк]
\
\
#align(center)[Санкт-Петербург]
#align(center)[2025]
#pagebreak()
=== Цель работы:
Изучение принципов проектирования и администрирования реляционных баз данных в среде postgresql с использованием графического интерфейса pgadmin и языка sql. Освоение создания, изменения и связи таблиц, настройки ограничений целостности, индексов и построения ER-диаграмм. Формирование практических навыков работы с объектами базы данных, добавления и проверки данных, а также документирования структуры базы данных.
=== Задачи, решаемые при выполнении работы.
- Освоить создание таблиц в базе данных с использованием графического интерфейса pgadmin и sql запросов.
- Научиться задавать ключевые параметры таблиц: первичные ключи, автоинкрементные поля, значения по умолчанию и ограничения `NOT NULL`.
- Изучить применение команды `ALTER TABLE` для изменения структуры таблицы без потери данных.
- Создать связи между таблицами (внешние ключи) как через интерфейс pgadmin, так и с помощью sql кода.
- Научиться создавать индексы для оптимизации поиска и сортировки данных.
- Освоить построение и редактирование er диаграмм для визуализации структуры базы данных.
- Научиться добавлять, изменять и проверять данные в таблицах с помощью интерфейса pgadmin и dml запросов.
- Изучить назначение и реализацию ограничений целостности.
- Научиться очищать таблицы с помощью команды `TRUNCATE` и выполнять внешние sql скрипты для заполнения и модификации базы.
- Сформировать целостное представление о создании и сопровождении базы данных на примере модели hr.
=== Исходные данные.
- субд postgresql и графическая оболочка pgadmin.
- бд hr, содержащая схемы и объекты для работы.
- схема employeesDepartments, созданная на предыдущем этапе.
- sql-скрипты, предоставленные в методических материалах:
- набор заданий, предполагающих создание таблиц employees, departments, locations и других таблиц базы данных hr.
- примерные структуры таблиц и параметры столбцов.
- методические указания по выполнению лабораторных работ и пошаговые инструкции с примерами sql команд и интерфейсных действий.
=== Выполнение работы.
===== Задание 1. Создание таблицы в графической среде pgadmin.
Я раскрыл базу hr до узла tables и выбрал опцию create:
#align(center)[#image("assets/1.png")]
И создал таблицу `EMPLOYEES`:
#align(center)[#image("assets/2.png")]
Затем я заполнил вкладку `columns` как показано на рисунке в условии:
#align(center)[#image("assets/3.png")]
Для поля `employee_id`, я выставил следующие параметры:
#align(center)[#image("assets/4.png")]
Для столбца `hire_date` я поставил значение по умолчанию `current_date`.
#align(center)[#image("assets/5.png")]
После этого, я сохранил таблицу.
===== Задание 2. Создание таблицы в Query Editor.
Я открыл query tool для hr и вписал туда следующий скрипт:
```sql
CREATE TABLE "EmployeesDepartments"."DEPARTMENTS" (
DEPARTMENT_ID integer GENERATED ALWAYS AS IDENTITY (INCREMENT 1 START 1) PRIMARY KEY NOT NULL,
DEPARTMENT_NAME character varying(30)[] NOT NULL,
MANAGER_ID bigint NULL,
LOCATION_ID integer NULL
);
```
#align(center)[#image("assets/6.png")]
Таблица появилась в object explorer:
#align(center)[#image("assets/7.png")]
Затем я создал еще одну таблицу скриптом:
```sql
CREATE TABLE "EmployeesDepartments"."LOCATIONS"
(LOCATION_ID smallint GENERATED ALWAYS AS IDENTITY NOT NULL,
STREET_ADDRESS character varying(40),
POSTAL_CODE character varying(12),
CITY character varying(30),
COUNTRY_ID CHAR(2)
);
```
#align(center)[#image("assets/9.png")]
Как можно видеть, таблица была создана:
#align(center)[#image("assets/10.png")]
===== Задание 3. Изменение таблицы.
В querry tool я ввел следующее:
```
ALTER TABLE "EmployeesDepartments"."LOCATIONS"
ADD STATE_PROVINCE character varying(25) NULL;
```
#align(center)[#image("assets/11.png")]
Изменил столбец CITY следующим кодом:
```
ALTER TABLE "EmployeesDepartments"."LOCATIONS"
ADD CONSTRAINT "PK_LokationId" PRIMARY KEY (LOCATION_ID);
```
#align(center)[#image("assets/12.png")]
Таблица locations:
#align(center)[#image("assets/13.png")]
Затем я прописал текст скрипта `script1_create.sql`:
#align(center)[#image("assets/14.png")]
#align(center)[#image("assets/15.png")]
===== Задание 4. Создание отношения графическим интерфейсом pgadmin.
Я нажал ПКМ по таблице EmployeesDepartments.LOCATIONS и выбрал меню создания внешнего ключа:
#align(center)[#image("assets/16.png")]
Затем я ввел задание название отношения:
#align(center)[#image("assets/17.png")]
После, я добавил столбец кнопкой add:
#align(center)[#image("assets/18.png")]
Вкладка sql:
#align(center)[#image("assets/19.png")]
Ограничения locations:
#align(center)[#image("assets/20.png")]
Затем я создал отношение с помощью ddl оператора alter table:
```sql
ALTER TABLE "Countries"."COUNTRIES"
ADD CONSTRAINT "COUNTR_REG_ID_FK1" FOREIGN KEY ("REGION_ID")
REFERENCES "Countries"."REGIONS" ("REGION_ID");
```
#align(center)[#image("assets/21.png")]
===== Задание 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, понять логику ограничений и связей между таблицами, а также научиться эффективно добавлять и проверять данные с соблюдением целостности базы. Все задачи лабораторной выполнены с учетом практических рекомендаций и ошибок, которые возникали в процессе работы.

BIN
labs/lab1/part2/task.pdf Normal file

Binary file not shown.

48688
labs/lab1/report.pdf Normal file

File diff suppressed because it is too large Load Diff

1024
labs/lab1/report.typ Normal file

File diff suppressed because it is too large Load Diff

BIN
labs/lab2/assets/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 KiB

BIN
labs/lab2/assets/10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 KiB

BIN
labs/lab2/assets/11.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 356 KiB

BIN
labs/lab2/assets/12.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 KiB

BIN
labs/lab2/assets/13.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 KiB

BIN
labs/lab2/assets/14.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 KiB

BIN
labs/lab2/assets/15.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 KiB

BIN
labs/lab2/assets/16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 KiB

BIN
labs/lab2/assets/17.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 KiB

Some files were not shown because too many files have changed in this diff Show More