Файл: Курсовой проект по дисциплине Базы данных Вариант 2 Выполнил студент группы 143303с Шкуренко В. А.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 30.11.2023

Просмотров: 24

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
высшего образования
Псковский государственный университет
Институт инженерных наук


Кафедра информационно-коммуникационных технологий
________________________________________________

Курсовой проект по дисциплине

«Базы данных»

Вариант 2

Выполнил студент

группы 1433-03с

Шкуренко В.А.

Проверил преподаватель:

Вертешев А.С.

Псков

2022

Задание

Тема: работа туристического агентства, имеющего филиалы в различных странах.
Объекты: страны, филиалы, клиенты, договора, маршруты.
Для моделирования задачи необходимо хранить следующую информацию:

* Страна, в которой действует филиал агентства

* N филиала агентства

* Адрес филиала агентства

* N договора, заключенного филиалом агентства с клиентом

* Дата начала действия договора

* Дата окончания действия договора

* Количество мест в договоре

* Маршрут, на который заключен договор

* ФИО клиента, заключившего договор

* Паспортные данные клиента

* Страна проживания клиента
Дополнительные условия:

* в одной стране может находиться несколько филиалов;

* у одного клиента могут быть заключены договоры с разными филиалами

турагенства;

* один маршрут может проходить по нескольким странам.

Схема БД

Перечень и Структура таблиц


1. country - cписок стран (только название)

Поле

Тип

ключ

Описание

id

integer

РК

Идентификатор записи

title

text

Нет

Название страны


2. route - список маршрутов (название, адрес и id страны)

Поле

Тип

ключ

Описание

id

integer

РК

Идентификатор записи

title

text

Нет

Название организации

country_id

integer

FK

Id страны

3. filial – филиалы турфирмы

Поле

Тип

ключ

Описание

id

integer

PK

Идентификатор записи

Num_filial

Char(20)

Нет

Номер филиала

address

text




Адрес филиала

country_Id

integer

FK

Id страны

4. client – клиенты заключившие договор

Поле

Тип

ключ

Описание

id

integer

PK

Идентификатор записи

fio

text

Внешний

Фамилия клиента

passport

Char(20)

нет

Номер паспорта

country_of_residanse

integer

Нет

Место проживания

5. dogovor - список участников конкретной выставки. Вспомогательная таблица для обеспечения связи многие ко многим между “shows” и “organizations”

Поле

Тип

ключ

Описание

Num_dogovor

integer

PK

Идентификатор записи

Data_start

date

нет

Выставка (ссылка на выставку из таблицы “shows”)

Data_stop

date

нет

Участник выставки (ссылка на организацию из таблицы “organizations”)

number_of_seats

integer

нет

Кол-во мест в договоре

Filial_id

integer

FK

Id филиала

Client_id

integer

FK

Id клиента

Route_id

integer

FK

Id маршрута


Кодпосозданиютаблиц

1)Create table country (id integer primary key, title text not null);

2)Create table route (id integer primary key, title text not null, country_id integer references country(id) on delete no action on update cascade);

3)Create table filial (id integer primary key, num_filial char(20) not null, address text not null, country_id integer references country(id) on delete no action on update cascade);

4)Create table client (id integer primary key, fio text not null, passport char(20) not null, country_of_residanse text not null);

5)Create table dogovor ( num_dogovor serial primary key, data_start date not null, data_stop date not null,number_of_seats integer not null, filial_id integer references filial(id) on delete no action on update cascade, client_id integer references client(id) on delete no action on update cascade, route_id integer references route(id) on delete no action on update cascade);



Код заполнения таблиц

Таблица Client

Insert into client values (1,’Shkurenko’,5812345123,’Pskov’),(2,’Popov’,5812345654,’Pskov’),(3,’Parusov’,5812332123,’Moscov’),(4,’Ivanov’,5812857123,’Sankt-Peterburg’),(5,’Smirnov’,5812384623,’Moscov’),(6,’Pupkin’,5812345124,’Vel.Luki’);



Таблица Country

Insert into country values (1,’Russia’),(2,’Poland’), (3,’Belarusia’), (4,’France’), (5,’Germany’),(6,’USA’),(7,’Italia’);



Таблица filial

Insert into filial values (1,1,’moscov_sokolovskoe_31’,1),

(2,2,’moscov minskay 5’,1),

(3,3,’minsk kirila turovskogo 4’,2),

(4,4,’milenova 1’,4),

(5,5,’ogorodovay 8’,4);



Таблица Route

Insert into route values (1,’Sochi’,1), (2,’Pskov’,1),( 3,’Penza’,1), (4,’Krakov’,2), (5,’Praga’,2), (6,’Budapesht’,2),(7,’Minsk’, 3),(8,’Skoki’,3), (9,’New_Orlean’,6), (10,’New_York’,6), (11,’Frankfurt’,5), (12,’Gamburg’,5), (13,’Marcel’,7), (14,’Rim’,7);



Таблица DOGOVOR

Create table dogovor ( num_dogovor char(20) primary key, data_start date not null, data_stop date not null,number_of_seats integer not null, filial_id integer references filial(id) on delete no action on update cascade, client_id integer references client(id) on delete no action on update cascade, route_id integer references route(id) on delete no action on update cascade);



Запросы

1)Три запроса на выборку с использованием join, использовать не мене 3 таблиц (3)

Запрос №1:

Выборка номера договора с адресом филиала и заключение договора с клиеном Попов

New_turfirma=# select dogovor.num_dogovor, client.fio, filial.num_filial from dogovor inner join filial on dogovor.filial_id=filial.id inner join client on dogovor.client_id=client.id where client.fio='Popov';




Запрос №2:

turfirma=# select filial.address,country.route_id,route.title from filial inner join country on country.route_id=filial.country_id inner join route on country.route_id=country.route_id;

Запрос №3:

turfirma=# select dogovor.num_dogovor, client.fio, filial.address, client.pasport from client inner join dogovor on dogovor.client_id=c

lient.id inner join filial on dogovor.filial_id=filial.id inner join route on dogovor.route_id=route.id;

2) Запросы на объединение, пересечение, разность, произведение, проекцию, деление (6)

Обьединение

turfirma=# select client.fio, filial.address,dogovor.num_dogovor from client,filial,dogovor where dogovor.client_id=client.id;



Пересечение

select r.id from route r intersect (select c.id from country c) intersect (select f.id from filial f);



Разность

turfirma=# select id, title from country except select id,title from route;

произведение

select*from filial,country;

проекция

turfirma=# select distinct filial_id, client_id,route_id from dogovor;

Деление

3) Запросы на соединение: left join, right join, full outer join (3)

left join

select filial_id,route_id,route.title from dogovor left outer join route on dogovor.route_id=route.id order by title;



right join

select filial_id,route_id,route.title from dogovor right outer join route on dogovor.route_id=route.id order by title;



full outer join

select filial_id,client.fio,route_id from dogovor full outer join client on dogovor.client_id=client.id order by fio;



4) 2 подзапроса: простой, сложный (2)

Простой

Выдать все данные по договору клиента Парусов

SELECT * FROM dogovor WHERE client_id IN (SELECT id FROM client WHERE fio = 'Parusov');



Сложный

turfirma=# select num_dogovor, client_id, route_id from dogovor,(select * from (select*from client) as client) as client where dogovor.client_id=client.id order by client desc;

5) Запросы с различными уровнями вложенности подзапросов в частях select, From where, having (4)

Select

select *,(select fio from client where dogovor.client_id=client.id) as client from dogovor;

from

turfirma=# select data_start,data_stop from (select*from dogovor) as dogovor;

where

select *from route where id in (select id from route where id>3);

having

select filial_id, count (client_id) from dogovor group by filial_id having count (filial_id)=1;