rdy w/ lab 1.2
BIN
labs/lab1/part2/assets/22.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
labs/lab1/part2/assets/23.png
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
labs/lab1/part2/assets/24.png
Normal file
|
After Width: | Height: | Size: 161 KiB |
BIN
labs/lab1/part2/assets/25.png
Normal file
|
After Width: | Height: | Size: 135 KiB |
BIN
labs/lab1/part2/assets/26.png
Normal file
|
After Width: | Height: | Size: 95 KiB |
BIN
labs/lab1/part2/assets/27.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
labs/lab1/part2/assets/28.png
Normal file
|
After Width: | Height: | Size: 944 KiB |
BIN
labs/lab1/part2/assets/29.png
Normal file
|
After Width: | Height: | Size: 420 KiB |
BIN
labs/lab1/part2/assets/30.png
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
labs/lab1/part2/assets/31.png
Normal file
|
After Width: | Height: | Size: 200 KiB |
BIN
labs/lab1/part2/assets/32.png
Normal file
|
After Width: | Height: | Size: 145 KiB |
BIN
labs/lab1/part2/assets/33.png
Normal file
|
After Width: | Height: | Size: 306 KiB |
BIN
labs/lab1/part2/assets/34.png
Normal file
|
After Width: | Height: | Size: 88 KiB |
BIN
labs/lab1/part2/assets/35.png
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
labs/lab1/part2/assets/36.png
Normal file
|
After Width: | Height: | Size: 164 KiB |
BIN
labs/lab1/part2/assets/37.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
labs/lab1/part2/assets/38.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
labs/lab1/part2/assets/39.png
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
labs/lab1/part2/assets/40.png
Normal file
|
After Width: | Height: | Size: 153 KiB |
BIN
labs/lab1/part2/assets/41.png
Normal file
|
After Width: | Height: | Size: 181 KiB |
BIN
labs/lab1/part2/assets/42.png
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
labs/lab1/part2/assets/43.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
labs/lab1/part2/assets/44.png
Normal file
|
After Width: | Height: | Size: 162 KiB |
BIN
labs/lab1/part2/assets/45.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
labs/lab1/part2/assets/46.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
labs/lab1/part2/assets/47.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
labs/lab1/part2/assets/48.png
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
labs/lab1/part2/assets/49.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
labs/lab1/part2/assets/50.png
Normal file
|
After Width: | Height: | Size: 144 KiB |
BIN
labs/lab1/part2/assets/51.png
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
labs/lab1/part2/assets/52.png
Normal file
|
After Width: | Height: | Size: 114 KiB |
BIN
labs/lab1/part2/assets/53.png
Normal file
|
After Width: | Height: | Size: 124 KiB |
BIN
labs/lab1/part2/assets/54.png
Normal file
|
After Width: | Height: | Size: 114 KiB |
BIN
labs/lab1/part2/assets/55.png
Normal file
|
After Width: | Height: | Size: 136 KiB |
BIN
labs/lab1/part2/assets/56.png
Normal file
|
After Width: | Height: | Size: 136 KiB |
BIN
labs/lab1/part2/assets/57.png
Normal file
|
After Width: | Height: | Size: 466 KiB |
@@ -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, понять логику ограничений и связей между таблицами, а также научиться эффективно добавлять и проверять данные с соблюдением целостности базы. Все задачи лабораторной выполнены с учетом практических рекомендаций и ошибок, которые возникали в процессе работы.
|
||||
|
||||
|
||||