Files
db/labs/lab1/report.typ
2025-10-24 22:02:56 +03:00

1025 lines
30 KiB
Typst
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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]
//#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" и изучить ее структуру, научиться создавать базы данных и схемы. Научиться создавать, изменять связи таблиц, настройки ограничений, индексов и строить ER-диаграммы.
=== Задачи, решаемые при выполнении работы.
- Установить и настроить субд postgresql и pgadmin.
- Проверить сервер с помощью выполнения запроса.
- Развернуть базу demo и проверить что ее объекты доступны.
- Изучить структуру базы demo.
- Создать базу данных двумя способами: через графический интерфейс и с помощью `CREATE DATABASE`.
- Создать в базе данных hr схемы.
- Научиться создавать таблицы в базе данных с использованием графического интерфейса и запросов.
- Научиться задавать параметры таблиц.
- Узнать применение команды `ALTER TABLE`.
- Создать связи между таблицами как через интерфейс, так и с помощью sql.
- Научиться создавать индексы.
- Изучить построение и редактирование er-диаграмм.
- Научиться добавлять, изменять и проверять данные в таблицах с помощью интерфейса и запросов.
- Изучить назначение и реализацию ограничений.
- Научиться очищать таблицы с помощью команды `TRUNCATE`.
- Понимать создание и сопровождение баз данных.
=== Исходные данные.
- Сервер с установленными docker и контейнерами:
- postgres:16 сервер субд postgresql,
- dpage/pgadmin4 веб-интерфейс.
- Учебная база данных demo.
- Cубд postgresql и pgadmin.
- Бд hr, содержащая схемы и объекты для работы.
- Cхема employeesDepartments.
- SQL-скрипты, из методички.
=== Выполнение работы.
==== Часть 1.
===== Задание 1. Установка необходимого ПО.
Для выполнения работы была установлена субд postgresql и приложение pgadmin. Установка производилась в среде docker.
На сервере был установлен docker и запущены контейнеры: `postgres:16`, `dpage/pgadmin4`. На рис. 1 показан вывод команды `docker ps`, который показывает запущенные контейнеры `pgadmin` и `postgres`.
#align(center)[
#figure(
image("part1/assets/18.png"),
caption: [Результат команды `docker ps`.],
supplement: [Рис]
)
]
Контейнеры были объединены в общую сеть docker, чтобы pgadmin мог напрямую подключаться к postgres. На рис. 2 показаны настройки сети `dbnet`.
#align(center)[
#figure(
image("part1/assets/19.png"),
caption: [Настройки сети `dbnet`.],
supplement: [Рис]
)
]
pgadmin стал доступен по адресу #link("https://db.fymio.us")[db.fymio.us]
На рис. 3 показан фрагмент `Caddyfile`, ответственный за #link("https://db.fymio.us")[db.fymio.us].
#align(center)[
#figure(
image("part1/assets/20.png"),
caption: [Часть вывода команды `cat /etc/caddy/Caddyfile`.],
supplement: [Рис]
)
]
В pgadmin был зарегистрирован новый сервер. В настройках подключения были указаны следующие параметры. На рис. 4, 5 показаны соответствующие настройки.
#align(center)[
#figure(
image("part1/assets/16.png"),
caption: [Настройки General сервера Web PostgreSQL.],
supplement: [Рис]
)
]
#align(center)[
#figure(
image("part1/assets/17.png"),
caption: [Настройки Connection сервера Web PostgreSQL.],
supplement: [Рис]
)
]
В "Object Explorer" слева я раскрыл узел "Databases" (Рис. 6):
#align(center)[
#figure(
image("part1/assets/1.png"),
caption: [Object Explorer -> Databases.],
supplement: [Рис]
)
]
Затем я нажал ПКМ по базе "postgres" и выбрал инструмент "Query Tool" (Рис. 7):
#align(center)[
#figure(
image("part1/assets/2.png"),
caption: [Открытие Query Tool.],
supplement: [Рис]
)
]
В открывшемся окне написал запрос проверки версии сервера `SELECT version();`. После этого нажал кнопку "Execute script" (Рис. 8).
#align(center)[
#figure(
image("part1/assets/3.png"),
caption: [Выполнение скрипта проверки версии.],
supplement: [Рис]
)
]
В поле "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", в "Query Tool" я выполнил следующий скрипт (Рис. 9):
```sql
SELECT * FROM bookings.aircrafts_data;
```
#align(center)[
#figure(
image("part1/assets/4.png"),
caption: [Выполнение скрипта `SELECT * FROM bookings.aircrafts_data`.],
supplement: [Рис]
)
]
===== Задание 3. Ознакомление с учебной БД.
Я ознакомился с описанием БД на сайте #link("https://postgrespro.ru/education/demodb")[postgrespro.ru/education/demodb]
===== Задание 4. Создание учебной базы данных HR средствами pgAdmin.
Я нажал ПКМ на узле "Databases" и выбрал меню "Create" затем "Database..." (Рис. 10).
#align(center)[
#figure(
image("part1/assets/5.png"),
caption: [Создание новой базы данных.],
supplement: [Рис]
)
]
Затем в октрывшемся окне я выставил следующие настройки (Рис. 10, 11).
#align(center)[
#figure(
image("part1/assets/6.png"),
caption: [Настройки новой базы. Вкладка General.],
supplement: [Рис]
)
]
#align(center)[
#figure(
image("part1/assets/7.png"),
caption: [Настройки новой базы. Вкладка Definition.],
supplement: [Рис]
)
]
Затем я сохранил настройки. В "Object Explorer" появилась созданная база (Рис. 12).
#align(center)[
#figure(
image("part1/assets/8.png"),
caption: [База `HR` в Object Explorer.],
supplement: [Рис]
)
]
После этого я удалил базу через ПКМ (Рис. 14).
#align(center)[
#figure(
image("part1/assets/9.png"),
caption: [Удаление базы `HR`.],
supplement: [Рис]
)
]
===== Задание 5. Создание учебной базы данных HR средствами PL/pgSQL
Я открыл "Query Tool" базы данных `postgres`. И прописал следующий скрипт (Рис. 15).
```sql
CREATE DATABASE hr
WITH ENCODING 'UTF8'
LC_COLLATE 'C'
LC_CTYPE 'C'
TEMPLATE template0
CONNECTION LIMIT 1;
```
#align(center)[
#figure(
image("part1/assets/10.png"),
caption: [Создание базы `hr` при помощи скрипта.],
supplement: [Рис]
)
]
После этого в списке баз появилась созданная (Рис. 16).
#align(center)[
#figure(
image("part1/assets/11.png"),
caption: [Новая база в Object Explorer.],
supplement: [Рис]
)
]
===== Задание 6. Создание схем.
Я развернул вкладку для создания схем. Рис. 17 показывает меню создание схем.
#align(center)[
#figure(
image("part1/assets/12.png"),
caption: [Создание схемы.],
supplement: [Рис]
)
]
И создал схему "EmployeesDepartments". В "Object Explorer" видно что схема создана (Рис. 18).
#align(center)[
#figure(
image("part1/assets/13.png"),
caption: [Новая схема появилась.],
supplement: [Рис]
)
]
Чтобы создать вторую схему, я открыл "Query Tool" к базе `hr`. И прописал следующие запросы (Рис. 19):
```cs
CREATE SCHEMA IF NOT EXISTS "countries"
AUTHORIZATION postgres;
```
#align(center)[
#figure(
image("part1/assets/14.png"),
caption: [Исполнение скрипта по созданию схемы.],
supplement: [Рис]
)
]
В "Object Explorer" видна добавленная схема (Рис. 20):
#align(center)[
#figure(
image("part1/assets/15.png"),
caption: [Появление новой схемы.],
supplement: [Рис]
)
]
==== Часть 2.
===== Задание 1. Создание таблицы в графической среде pgadmin.
Я раскрыл базу hr до узла tables и выбрал опцию create (Рис. 21):
#align(center)[
#figure(
image("part2/assets/1.png"),
caption: [Меню создания новой таблицы.],
supplement: [Рис]
)
]
И создал таблицу `EMPLOYEES` (Рис. 22):
#align(center)[
#figure(
image("part2/assets/2.png"),
caption: [Настройки таблицы EMPLOYEES.],
supplement: [Рис]
)
]
Затем я заполнил вкладку `columns` как показано на рисунке в условии (Рис. 23):
#align(center)[
#figure(
image("part2/assets/3.png"),
caption: [Столбцы таблицы EMPLOYEES.],
supplement: [Рис]
)
]
Для поля `employee_id`, я выставил следующие параметры (Рис. 24):
#align(center)[
#figure(
image("part2/assets/4.png"),
caption: [Настройки столбца `EMPLOYEE_ID` -> Constraints.],
supplement: [Рис]
)
]
Для столбца `hire_date` я поставил значение по умолчанию `current_date` (Рис. 25).
#align(center)[
#figure(
image("part2/assets/5.png"),
caption: [Обновленное значение по умолчанию для столбца `HIRE_DATE`.],
supplement: [Рис]
)
]
После этого, я сохранил таблицу.
===== Задание 2. Создание таблицы в Query Editor.
Я открыл query tool для hr и вписал туда следующий скрипт (Рис. 26):
```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)[
#figure(
image("part2/assets/6.png"),
caption: [Исполнение скрипта по созданию таблицы.],
supplement: [Рис]
)
]
Таблица появилась в object explorer (Рис. 27):
#align(center)[
#figure(
image("part2/assets/7.png"),
caption: [Новая таблица в Object Explorer.],
supplement: [Рис]
)
]
Затем я создал еще одну таблицу скриптом (Рис. 28):
```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)[
#figure(
image("part2/assets/9.png"),
caption: [Исполнение скрипта по созданию таблицы.],
supplement: [Рис]
)
]
Как можно видеть, таблица была создана (Рис. 29):
#align(center)[
#figure(
image("part2/assets/10.png"),
caption: [Новая таблица в Object Explorer.],
supplement: [Рис]
)
]
===== Задание 3. Изменение таблицы.
В query tool я ввел следующее (Рис. 30):
```sql
ALTER TABLE "EmployeesDepartments"."LOCATIONS"
ADD STATE_PROVINCE character varying(25) NULL;
```
#align(center)[
#figure(
image("part2/assets/11.png"),
caption: [Исполнение скрипта в query tool.],
supplement: [Рис]
)
]
Изменил столбец CITY следующим кодом (Рис. 31):
```sql
ALTER TABLE "EmployeesDepartments"."LOCATIONS"
ADD CONSTRAINT "PK_LokationId" PRIMARY KEY (LOCATION_ID);
```
#align(center)[
#figure(
image("part2/assets/12.png"),
caption: [Исполнение скрипта query tool.],
supplement: [Рис]
)
]
Таблица locations (Рис. 32):
#align(center)[
#figure(
image("part2/assets/13.png"),
caption: [Таблица locations.],
supplement: [Рис]
)
]
Затем я прописал текст скрипта `script1_create.sql` (Рис. 33, 34):
#align(center)[
#figure(
image("part2/assets/14.png"),
caption: [Скрипт `script1_create.sql` в query tool.],
supplement: [Рис]
)
]
#align(center)[
#figure(
image("part2/assets/15.png"),
caption: [Новые таблицы в Object Explorer.],
supplement: [Рис]
)
]
===== Задание 4. Создание отношения графическим интерфейсом pgadmin.
Я нажал ПКМ по таблице EmployeesDepartments.LOCATIONS и выбрал меню создания внешнего ключа (Рис. 35):
#align(center)[
#figure(
image("part2/assets/16.png"),
caption: [Меню создания внешнего ключа.],
supplement: [Рис]
)
]
Затем я ввел задание название отношения (Рис. 36):
#align(center)[
#figure(
image("part2/assets/17.png"),
caption: [Настройки создания Foreign Key.],
supplement: [Рис]
)
]
После, я добавил столбец кнопкой add (Рис. 37):
#align(center)[
#figure(
image("part2/assets/18.png"),
caption: [Настройки создания Foreign Key.],
supplement: [Рис]
)
]
Вкладка sql (Рис. 38):
#align(center)[
#figure(
image("part2/assets/19.png"),
caption: [SQL код создания Foreign Key.],
supplement: [Рис]
)
]
Ограничения locations (Рис. 39):
#align(center)[
#figure(
image("part2/assets/20.png"),
caption: [Ограничения LOCATIONS.],
supplement: [Рис]
)
]
Затем я создал отношение с помощью ddl оператора alter table (Рис. 40):
```sql
ALTER TABLE "Countries"."COUNTRIES"
ADD CONSTRAINT "COUNTR_REG_ID_FK1" FOREIGN KEY ("REGION_ID")
REFERENCES "Countries"."REGIONS" ("REGION_ID");
```
#align(center)[
#figure(
image("part1/assets/21.png"),
caption: [Выполнение скрипта в query tool.],
supplement: [Рис]
)
]
===== Задание 5. Создания индекса с помощью графического интерфейса pgadmin.
В таблице EmployeesDepartments.LOCATIONS, я выбрал раздел меню для создания индекса (Рис. 41):
#align(center)[
#figure(
image("part2/assets/22.png"),
caption: [Меню для создания индекса.],
supplement: [Рис]
)
]
Я в диалоге создания индекса я передал следующие параметры (Рис. 42, 43, 44):
#align(center)[
#figure(
image("part2/assets/23.png"),
caption: [Параметры создания индекса. Вкладка General.],
supplement: [Рис]
)
]
#align(center)[
#figure(
image("part2/assets/24.png"),
caption: [Параметры создания индекса. Вкладка Definition.],
supplement: [Рис]
)
]
#align(center)[
#figure(
image("part2/assets/25.png"),
caption: [Параметры создания индекса. Вкладка Columns.],
supplement: [Рис]
)
]
sql:
#align(center)[
#figure(
image("part2/assets/26.png"),
caption: [SQL скрипт создания индекса.],
supplement: [Рис]
)
]
===== Задание 6. Построение диаграмм базы данных.
Для создания диаграммы я нажал ПКМ на узел базы данных и выбрал параметр "ERD For Database" (Рис. 46):
#align(center)[
#figure(
image("part2/assets/27.png"),
caption: [Меню создание ERD-диаграммы.],
supplement: [Рис]
)
]
Затем я скорректировал вид своей диаграммы в соответствии с условием (Рис. 47):
#align(center)[
#figure(
image("part2/assets/28.png"),
caption: [Вид ERD-диаграммы.],
supplement: [Рис]
)
]
Я экспортировал снимок диаграммы, нажав на соответствующую кнопку. Результат (Рис. 48):
#align(center)[
#figure(
image("part2/assets/29.png"),
caption: [Рисунок диаграммы.],
supplement: [Рис]
)
]
Сохранил проект диаграммы (Рис. 49):
#align(center)[
#figure(
image("part2/assets/30.png"),
caption: [Сохраненный проект диаграммы.],
supplement: [Рис]
)
]
===== Задание 7. Добавление данных в таблицу.
Я раскрыл меню для генерирования скрипта по вставке данных в таблицу Countries.CURRENCIES (Рис. 50):
#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)[
#figure(
image("part2/assets/32.png"),
caption: [Скрипт в query tool.],
supplement: [Рис]
)
]
После запуска скрипта проверил при помощи (Рис. 52):
```sql
select * from "Countries"."CURRENCIES";
```
#align(center)[
#figure(
image("part2/assets/33.png"),
caption: [Скрипт в query tool.],
supplement: [Рис]
)
]
В столбце EMPLOYEE_ID я заменил identity с always на by default (Рис. 53).
#align(center)[
#figure(
image("part2/assets/34.png"),
caption: [Изменение параметра identity.],
supplement: [Рис]
)
]
Затем при помощи графического интерфейса pgadmin, я добавил запись в таблицу "EmployeesDepartments"."EMPLOYEES" (Рис. 54, 55):
#align(center)[
#figure(
image("part2/assets/35.png"),
caption: [Просмотр строк таблицы.],
supplement: [Рис]
)
]
#align(center)[
#figure(
image("part2/assets/36.png"),
caption: [Пустые строки таблицы.],
supplement: [Рис]
)
]
Затем я добавил строку и сохранил данные (Рис. 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)[
#figure(
image("part2/assets/40.png"),
caption: [Код в query tool.],
supplement: [Рис]
)
]
Проверим (Рис. 60):
```sql
SELECT * FROM "EmployeesDepartments"."EMPLOYEES";
```
#align(center)[
#figure(
image("part2/assets/41.png"),
caption: [Скрипт в query tool.],
supplement: [Рис]
)
]
===== Задание 8. Ограничения для столбцов.
Я добавил ограничения к таблицам "Countries"."SPOKEN_LANGUAGES" и "EmployeesDepartments"."EMPLOYEES" при помощи следующего кода (Рис. 61, 62):
```sql
ALTER TABLE "Countries"."SPOKEN_LANGUAGES"
ADD CONSTRAINT "CTRY_NUM_FK1" FOREIGN KEY ("COUNTRY_ID")
REFERENCES "Countries"."COUNTRIES" ("COUNTRY_ID");
```
#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"
ADD CONSTRAINT "EMP_SALARY_MIN"
CHECK ("SALARY" > 0);
```
#align(center)[
#figure(
image("part2/assets/44.png"),
caption: [Добавление ограничения через query tool.],
supplement: [Рис]
)
]
#align(center)[
#figure(
image("part2/assets/45.png"),
caption: [Добавленное ограничение.],
supplement: [Рис]
)
]
Затем я добавил еще одно ограничение для таблицы JOB_HISTORY. Для этого в свойствах таблицы в разделе constraints добавил check c условием, что "END_DATE" > "START_DATE" (Рис. 65, 66):
#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"
("EMPLOYEE_ID", "START_DATE", "END_DATE", "JOB_ID", "DEPARTMENT_ID")
VALUES(200, '06-17-1993', '09-17-1987', 'AD_ASST', 90);
```
#align(center)[
#figure(
image("part2/assets/50.png"),
caption: [Ошибка. Скрипт не отрабатывает.],
supplement: [Рис]
)
]
и
```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)[
#figure(
image("part2/assets/51.png"),
caption: [Скрипт отрабатывает без ошибки.],
supplement: [Рис]
)
]
===== Задание 9. Очистка таблиц и завершение создания БД HR.
Я произвел очистку таблицы EMPLOYEES с помощью DDL команды `TRUNCATE` (Рис. 71):
```sql
TRUNCATE "EmployeesDepartments"."EMPLOYEES";
```
#align(center)[
#figure(
image("part2/assets/52.png"),
caption: [Выполнение команды `TRUNCATE`.],
supplement: [Рис]
)
]
Также я очистил JOB_HISTORY и CURRENCIES (Рис. 72, 73):
```sql
TRUNCATE "EmployeesDepartments"."JOB_HISTORY";
```
#align(center)[
#figure(
image("part2/assets/53.png"),
caption: [Выполнение команды `TRUNCATE`.],
supplement: [Рис]
)
]
и
```sql
TRUNCATE "Countries"."CURRENCIES";
```
#align(center)[
#figure(
image("part2/assets/54.png"),
caption: [Исполнение команды `TRUNCATE`.],
supplement: [Рис]
)
]
После очистки я выполнил код из файла `script2_alter.sql` (Рис. 74):
#align(center)[
#figure(
image("part2/assets/55.png"),
caption: [Исполнение скрипта `script2_alter.sql`.],
supplement: [Рис]
)
]
И для добавления данных, я выполнил скрипт `script3_insert.sql` (Рис. 75):
#align(center)[
#figure(
image("part2/assets/56.png"),
caption: [Исполнение скрипта `script3_insert.sql`.],
supplement: [Рис]
)
]
Результат (Рис. 76):
#align(center)[
#figure(
image("part2/assets/57.png"),
caption: [Получившаяся ERD-диаграмма.],
supplement: [Рис]
)
]
=== Выводы.
В ходе выполнения работы я изучил установку и настройки postgresql, и освоил работу с pgadmin. При помощи docker я сделал сервер postgresql и pgadmin.
В процессе работы я научился:
- создавать и удалять базы данных как через pgadmin, так и с помощью sql;
- использовать настройки локализации и шаблоны при создании баз данных;
- создавать схемы для объединения объектов базы и разделения их по группам;
- создавать таблицы с pgadmin и SQL, задавая типы данных, значения по умолчанию, первичные ключи;
- изменять таблицы с помощью `ALTER TABLE`, добавлять столбцы, ключи, а также ограничения, проверки;
- создавать связи между таблицами и обеспечивать целостность данных c помощью внешних ключей;
- добавлять индексы;
- использовать команды dml;
- очищать таблицы при помощи `TRUNCATE` и выполнять внешние sql-скрипты для массового изменения и заполнения данных;
- визуализировать структуру базы данных при помощи er-диаграмм, редактировать и экспортировать их.
Кроме того, в процессе работы я разобрался с ошибками, возникающими при создании баз данных с разными локалями и при несогласованности ключей, и научился устранять их настройкой параметров и порядка выполнения операций.