MySql Airline Database System Projesi
EGE UNIVERSITY
COMPUTER ENGINEERING
DATABASE MANAGEMENT PROJECT 2017
PROJECT NAME: AIRLINE DATABASE SYSTEM
PROJETC DEVELOPER: BURAK ÖZÇELİK
PART-1
1) GİRİŞ
Projemiz,
havalimanlarında uçuş yapan uçakların ve seyahat eden yolcuların kayıtlarını ve
bunlar arasındaki ilişkiyi tutan bir veritabanı tasarımıdır.
VERİTABANI TASARIMINDAKİ TABLOLAR
1) AIRPLANE:
Uçak ID ve uçak bilgilerini(total_number_of_seats gibi) tutar.
2) AIRPLANE_TYPE:
Uçak tipini ve maksimum koltuk sayısını tutar. AIRPLANE_COMPANY tablosuyla
bağlantılıdır.
3) AIRPORT:
Havalimanı bilgilerini tutar.
4) CAN_LAND:
AIRPORT ile AIRPLANE_TYPE arasında bağ kuran tablodur.
5) FARE:
Uçak bileti fiyatlarını tutar.
6) FLIGHT:
Uçuşun hangi Airline'a ait olduğunu ve hangi günlerde tutar.
7) FLIGHT_LEG:
Planlanan uçuş bilgilerini tutar.
8) LEG_INSTANCE:
Gerçekleşen uçuş bilgilerini tutar.
9) SEAT_RESARVATION:
Yolcuların hangi uçuş için bilet aldıkları bilgisini tutar.
2) INSERT, UPDATE, DELETE
2.1) CUSTOMER TABLOSU
2.1.1) INSERT
INSERT INTO
`customer` (`name`, `phone_number`, `e_mail`, `address`, `counrty`,
`passport_no`)
VALUES
('Ziya Atma',
'05001147555', 'ywannettatt-7909@yopmail.com', 'Datca/Mugla', 'Turkey',
'612875948'),
('Nurzhan Abdulin',
'05001215487', 'ecajedditt-3717@yopmail.com', 'Gediz/Kutahya', 'Turkey',
'607081374'),
('Bolat Gubashev',
'05001235687', 'ossihixis-8890@yopmail.com', 'Besni/ADIYAMAN', 'Turkey',
'320442421'),
('Collin Soldiew',
'05001247198', 'beqappone-1677@yopmail.com', 'Torbali/Izmir', 'Turkey',
'330151149'),
('Lale Belkiz',
'05001251436', 'mettydatab-4497@yopmail.com', 'Alanya/Antalya', 'Turkey',
'697836386'),
('Mahmut Karavana',
'05001321321', 'gihorakapp-5915@yopmail.com', 'Demirci/Manisa', 'Turkey',
'209698805')
2.1.2)
UPDATE
UPDATE `customer`
SET `address` = 'Suruç/Urfa' WHERE `customer`.`phone_number` = '05001326598';
2.1.3)
DELETE
DELETE FROM
`customer` WHERE `customer`.`phone_number` = '05001147555'
2.2) FARE TABLOSU
2.2.1)
INSERT
INSERT INTO `fare`
(`Flight_number`, `Fare_Code`, `Amount`, `Restrictions`) VALUES ('BR5275',
'105', '190', NULL);
2.2.2)
UPDATE
UPDATE `fare` SET
`Restrictions` = 'Promosyon biletidir' WHERE `fare`.`Flight_number` = 'PC4766'
AND `fare`.`Fare_Code` = 388;
2.2.3)
DELETE
DELETE FROM `fare`
WHERE `fare`.`Flight_number` = \'BR5275\' AND `fare`.`Fare_Code` = 105
2.3) SEAT
RESARVATION
2.3.1)
INSERT
INSERT INTO
`seat_resarvation` (`Flight_number`, `Leg_Number`, `Date`, `Seat_number`,
`Customer_phone`, `isAttendant`) VALUES ('AD8051', '1', '2018-01-08', '12',
'05001506599', '1');
2.3.2)
UPDATE
UPDATE
`seat_resarvation` SET `Seat_number` = '21' WHERE
`seat_resarvation`.`Flight_number` = 'AD8051' AND
`seat_resarvation`.`Leg_Number` = '1' AND `seat_resarvation`.`Date` =
'2018-01-08' AND `seat_resarvation`.`Seat_number` = 16
2.3.3)
DELETE
DELETE FROM
seat_resarvation WHERE seat_resarvation.Flight_number = "AD8051" AND
seat_resarvation.Leg_Number = 1 AND `seat_resarvation`.`Date` = '2018-01-08'
AND `seat_resarvation`.`Seat_number` = 13
3) QUERIES
1) İzmir’e inen uçakların Flight numaraları;
SELECT DISTINCT leg_instance.Flight_number
FROM leg_instance
WHERE (leg_instance.Dept_Airport_code)
IN ( SELECT leg_instance.Dept_Airport_code
FROM leg_instance
WHERE
leg_instance.Dept_Airport_code="ADB" )
2) Aralık ayındaki
aktarmalı uçuşlar;
SELECT flight.Flight_number,
flight.Airline
FROM flight
WHERE EXISTS (SELECT *
FROM leg_instance
WHERE flight.Flight_number =
leg_instance.Flight_number
AND leg_instance.Date
BETWEEN "2017-12-01 " AND
"2017-12-31")
AND EXISTS (SELECT *
FROM flight_leg
WHERE flight.Flight_number =
flight_leg.Flight_number
AND flight_leg.Leg_Number >1)
3) Aktarmasız yani direk uçan uçakların yolcuları;
SELECT
seat_resarvation.Customer_name
FROM
seat_resarvation
WHERE NOT EXISTS (SELECT
*
FROM leg_instance
WHERE
leg_instance.Flight_number=seat_resarvation.Flight_number
AND
leg_instance.Leg_Number>1
GROUP BY
seat_resarvation.Customer_name)
4) Üç ve üçten daha fazla uçan Airplane Type modelleri;
SELECT
airplane.Airplane_type
FROM airplane
WHERE (SELECT
COUNT(*)
FROM leg_instance
WHERE leg_instance.Airplane_id=airplane.Airplane_id)
>= 3
5) Planlı kalkış zamanından farklı bir zamanda kalkan uçuşlar;
SELECT f.Flight_number,l.Leg_Number , f.Scheduled_dept_time as Planli_Kalkis_zamani
,l.Dept_Time as Kalkis_zamani
FROM flight_leg AS f ,leg_instance AS l
WHERE (f.Scheduled_dept_time!=l.Dept_Time)
AND f.Flight_number=l.Flight_number
AND f.Leg_Number=l.Leg_Number
6) Havaalanlarından yapılan kalkış sayıları;
SELECT airport.Name as Havaalani,COUNT(leg_instance.Dept_Airport_code)
AS Kalkis_Sayisi
FROM airport , leg_instance
WHERE
airport.Airport_code=leg_instance.Dept_Airport_code
GROUP BY airport.Airport_code
7) Muş’a inebilecek uçak modelleri;
SELECT
can_land.Airplane_Type_name
FROM airport,can_land
WHERE can_land.Airport_code=airport.Airport_code
AND
airport.Name="MUS"
8) Trabzon’a
zamanında iniş yapmayan uçuşlar;
SELECT f.Flight_number,l.Leg_Number ,
f.Scheduled_arr_time as Planli_Inis_zamani ,
l.Arr_Time as Inis_zamani ,
a.Name AS Havalimanı_ismi
FROM flight_leg AS f ,leg_instance AS l , airport AS a
WHERE (f.Scheduled_arr_time!=l.Arr_Time)
AND a.Name="TRABZON"
AND f.Flight_number=l.Flight_number
AND f.Leg_Number=l.Leg_Number
AND a.Airport_code=l.Arr_Airport_code
9) Uçak
tiplerinin uçuşlarda kullanım sayıları;
SELECT (aty.Airplane_Type_name) as Ucak_tipi ,
COUNT(aty.Airplane_Type_name) AS Kullanilan_ucus_sayisi
FROM airplane_type as aty, airplane as a , leg_instance as l
WHERE l.Airplane_id=a.Airplane_id
AND a.Airplane_type=aty.Airplane_Type_name
GROUP BY a.Airplane_type
10) Aralık
ayında Ankara’ya giden Anadolu Jet yolcuları;
SELECT
s.Customer_name AS Aralik_Ayinda_Ankaraya_Giden_AnadoluJET_Yolculari
FROM
seat_resarvation AS s , leg_instance as l , flight as f
WHERE
l.Arr_Airport_code="ESB"
AND
s.Date BETWEEN "2017-12-01" AND "2017-12-31"
AND
f.Airline="ANADOLU JET" AND
s.Flight_number=l.Flight_number
AND
s.Leg_Number=l.Leg_Number AND s.Date=l.Date
AND
l.Flight_number=f.Flight_number
11) İstanbul’a
gerçekleştirilen toplam uçuş sayısı;
SELECT COUNT(flight.Flight_number)
FROM airport ,leg_instance,flight
WHERE airport.City="ISTANBUL"
AND flight.Flight_number=leg_instance.Flight_number
AND
airport.Airport_code=leg_instance.dept_Airport_code
12) Planlanan
havaalanından farklı bir havaalanına inen uçuşlar;
SELECT
f.Flight_number,l.Leg_Number ,
b.Name ASInmesi_Planlanan_Havalaanı ,
a.Name AS
Inisin_Gerceklestigi_Havaalanı
FROM flight_leg AS f ,leg_instance AS l , airport
AS a , airport AS b
WHERE (f.Dept_airport_code!=l.Dept_Airport_code
OR f.Arr_airport_code!=l.Arr_Airport_code)
AND f.Flight_number=l.Flight_number
AND f.Leg_Number=l.Leg_Number
AND l.Arr_Airport_code=a.Airport_code
AND b.Airport_code=f.Arr_airport_code
13) Anadolu Jet’in
Airbus’tan aldığı uçak sayısı;
SELECT COUNT(*) AS
ANADOLU_JETin_AIRBUStan_aldigi_ucak_sayisi
FROM flight, leg_instance , airplane ,
airplane_type
WHERE flight.Airline="ANADOLU JET"
AND airplane_type.Company="AIRBUS"
AND flight.Flight_number=leg_instance.Flight_number
AND leg_instance.Airplane_id=airplane.Airplane_id
AND
airplane.Airplane_type=airplane_type.Airplane_Type_name
14) Bora Jet’in 300’den fazla koltuğu olan uçaklarının uçak tipi ve toplam
koltuk sayısı;
SELECT f.Airline, aty.Airplane_Type_name ,
a.Total_number_of_seats
FROM airplane as a ,airplane_type as aty
,leg_instance as l , flight as f
WHERE f.Airline="BORAJET" AND a.Total_number_of_seats > 300
AND l.Airplane_id=a.Airplane_id AND l.Flight_number=f.Flight_number
AND a.Airplane_type=aty.Airplane_Type_name
15) Bora Jet’in gerçekleşen uçuşlarda kullandığı uçakların uçak tipi ve
uçak üreticisi;
SELECT
flight.Flight_number,leg_instance.Leg_Number,
flight.Airline,airplane_type.Airplane_Type_name,airplane_type.Company
FROM
flight,leg_instance,airplane,airplane_type
WHERE
flight.Flight_number=leg_instance.Flight_number
AND
leg_instance.Airplane_id=airplane.Airplane_id
AND airplane.Airplane_type=
airplane_type.Airplane_Type_name
AND flight.Airline="BORAJET"
4)EXIST, NOT EXIST QUERIES
1) 150 TL ve üzeri fiyata sahip Pegasus uçuşları;
SELECT fare.Flight_number
FROM fare
WHERE EXISTS (SELECT *
FROM
flight
WHERE fare.Flight_number=flight.Flight_number
AND fare.Amount >= 150
AND flight.Airline="PGS")
2) Gerçekleşmeyen uçuşların listesi;
SELECT
flight_leg.Flight_number AS Gerceklesmeyen_Ucus ,
flight_leg.Dept_airport_code ,
flight_leg.Arr_airport_code
FROM flight_leg
WHERE NOT EXISTS (SELECT *
FROM leg_instance
WHERE
flight_leg.Flight_number=leg_instance.Flight_number)
5)OUTTER JOINS
1) LEFT OUTTER JOIN
Planlanan ama gerçekleşmeyen uçuşlara NULL yazdırdık;
SELECT *
FROM flight_leg
LEFT JOIN
leg_instance
ON
flight_leg.Flight_number=leg_instance.Flight_number
AND
flight_leg.Leg_Number=leg_instance.Leg_Number
2) RIGHT OUTTER JOIN
Kullanılmayan Airplane Type modelinin NULL yazılması;
SELECT *
FROM airplane
RIGHT JOIN airplane_type
ON
airplane_type.Airplane_Type_name=airplane.Airplane_type
3) FULL OUTTER JOIN
(SELECT *
FROM airplane
LEFT JOIN can_land
ON airplane.Airplane_type=can_land.Airplane_Type_name
AND can_land.Airport_code="MLX")
UNION
(SELECT *
FROM airplane
RIGHT JOIN
can_land
ON
airplane.Airplane_type=can_land.Airplane_Type_name
AND
can_land.Airport_code="MLX")
6) CREATE VIEWS
1)İzmir’e iniş yapan uçaklar;
CREATE VIEW IZMIR
AS
SELECT DISTINCT leg_instance.Flight_number
FROM leg_instance
WHERE
(leg_instance.Dept_Airport_code)
IN ( SELECT leg_instance.Dept_Airport_code
FROM leg_instance
WHERE leg_instance.Dept_Airport_code="ADB" )
2) Aktarmasız uçuş yapan
uçakların yolcuları;
CREATE VIEW Direct AS
SELECT seat_resarvation.Customer_name
FROM seat_resarvation
WHERE NOT EXISTS (SELECT *
FROM
leg_instance
WHERE
leg_instance.Flight_number=seat_resarvation.Flight_number
AND
leg_instance.Leg_Number>1
GROUP BY
seat_resarvation.Customer_name)
3) Uçakların yaptığı uçuş sayıları;
CREATE VIEW ucakların_kullanıldığı_ucus_sayilari
AS
SELECT (aty.Airplane_Type_name) AS Ucak_tipi,
COUNT(aty.Airplane_Type_name) AS Kullanilan_ucus_sayisi
FROM airplane_type as aty, airplane as a ,
leg_instance as l
WHERE l.Airplane_id=a.Airplane_id
AND a.Airplane_type=aty.Airplane_Type_name
GROUP BY a.Airplane_type
7) TRIGGERS
1) Müsait koltuk sayısının, uçağın toplam koltuk sayısından fazla
girilmemesini sağlar;
CREATE TRIGGER AS T1 BEFORE UPDATE
BEGIN
DECLARE deger INT;
SET deger =(SELECT airplane.Total_number_of_seats
FROM
airplane WHERE
NEW.Airplane_id=airplane.Airplane_id);
IF
NEW.Number_of_avaliable_seats>deger THEN
SET NEW.Number_of_avaliable_seats=deger;
END IF;
END
2) Her koltuk rezarvasyonunda, müsait koltuk sayısını eksilterek
güncelleyen Trigger;
CREATE TRIGGER AS T2
BEFORE INSERT
UPDATE leg_instance
SET leg_instance.Number_of_avaliable_seats=(leg_instance.Number_of_avaliable_seats-1)
WHERE leg_instance.Flight_number=seat_resarvation.Flight_number AND
leg_instance.Leg_Number=seat_resarvation.Leg_Number
AND leg_instance.Date=seat_resarvation.Date
3) 750 TL üzeri
fiyat koyulmamasını kontrol eden Trigger;
DELIMITER //
CREATE TRIGGER fıyat BEFORE
UPDATE ON fare
FOR EACH ROW
BEGIN
DECLARE deger INT;
SET deger(SELECT fare.Amount
WHERE fare.Amount=750 );
IF new.Amount>deger THEN SET new.Amount=deger
END IF;
END;//
DELIMITER;
8) CHECK CONSTRAINT
1) Dörtten fazla Leg’e izin vermez;
ALTER TABLE
flight_leg ADD CONSTRAINT leg_limitation CHECK (Leg_Number<4)
2) Ücretin negatif olmamasını sağlar;
ALTER TABLE fare
ADD CONSTRAINT amountC CHECK (Amount>0)
3) 99 koltuktan az uçakların sisteme
kayıt olmasını engeller;
ALTER TABLE
airplane_type ADD CONSTRAINT seatC CHECK (airplane_type.Max_seats>99)
4) Rezerve edilen koltuk numarasının,
toplam koltuk sayısını geçmemesini sağlar;
ALTER TABLE seat_resarvation
ADD CONSTRAINT Seat_no_constraint
CHECK (NOT EXISTS
(SELECT *
FROM leg_instance AS l , airplane as a
, seat_resarvation AS s
WHERE s.Seat_number>a.Total_number_of_seats
AND l.Flight_number=s.Flight_number
AND
l.Leg_Number=s.Leg_Number
AND
l.Date=s.Date ))
PART-2
1) GİRİŞ
Projemiz,
havalimanlarında uçuş yapan uçakların ve seyahat eden yolcuların kayıtlarını ve
bunlar arasındaki ilişkiyi tutan ayrıntılı bir veritabanı tasarımıdır.
VERİTABANI
TASARIMINDAKİ TABLOLAR
1) AIRLINE_COMPANY:
Havayolu şirketlerinin isimlerini, site ismini ve hangi ülkenin firması olduğu
bilgisini tutar.
2) AIRPLANE:
Uçak ID ve uçak bilgilerini(total_number_of_seats gibi) tutar.
3) AIRPLANE_COMPANY:
Uçak tipi ve site ismi, hangi ülkeye ait olduğu bilgisini tutar.
4) AIRPLANE_TYPE:
Uçak tipini ve maksimum koltuk sayısını tutar. AIRPLANE_COMPANY tablosuyla bağlantılıdır.
5) AIRPORT:
Havalimanı bilgilerini tutar.
6) CAN_LAND:
AIRPORT ile AIRPLANE_TYPE arasında bağ kuran tablodur.
7) CUSTOMER:
Müşteri bilgilerini tutar.
8) FARE:
Uçak bileti fiyatlarını tutar.
9) FFC:
Yolcuların toplam aldığı yol mesafesini tutar. Müşteri tarafından seat
resanvation tablosundaki uçuşa fiziksel olarak check in yapıldıysa
(isAttendant=1), FFC tablosunun verileri güncellenir.
10) FLIGHT:
Uçuşun hangi Airline'a ait olduğunu ve hangi günlerde tutar.
11) FLIGHT_LEG:
Planlanan uçuş bilgilerini tutar + Uçuşun mesafe bilgisini tutmak için Mileage
attribute eklendi.
12) LEG_INSTANCE:
Gerçekleşen uçuş bilgilerini tutar.
13)SEAT_RESARVATION:
Yolcuların, uçuş yapıp yapmadıkları bilgisini(isAttendant) ve hangi uçuş
için bilet aldıkları bilgisini tutar.
2) QUERIES
1)
İptal olan AD4874 2. Leg’inin yolcularının iletişim bilgileri;
SELECT
c.name, c.phone_number, c.e_mail
FROM customer AS c, seat_resarvation
AS s, leg_instance AS l
WHERE c.phone_number =
s.Customer_phone
AND s.Flight_number = l.Flight_number
AND s.Leg_Number = l.Leg_Number AND s.Date = l.Date
AND l.Leg_Number = 2 AND
l.Flight_number = "AD4874"
2) Uçuşa
katılmayan yolcular;
SELECT
customer.name
FROM customer , seat_resarvation
WHERE seat_resarvation.isAttendant=-1
AND seat_resarvation.Customer_phone=customer.phone_number
3) Airbus uçaklarına sahip havayolu
şirketleri;
SELECT DISTINCT airline_company.name , airplane_company.name
FROM airplane_type , airplane , leg_instance , flight , airline_company
,
airplane_company
WHERE
airplane_type.Airplane_Type_name=airplane.Airplane_type
AND airplane.Airplane_id=leg_instance.Airplane_id
AND leg_instance.Flight_number=flight.Flight_number
AND
flight.Airline=airline_company.name
AND airplane_type.Company=airplane_company.name
AND
airplane_type.Company="AIRBUS"
4) THY’nin en uzun uçuş mesafesi;
SELECT MAX(flight_leg.mileage)
FROM flight ,flight_leg,
airline_company
WHERE
flight.Flight_number=flight_leg.Flight_number
AND flight.Airline=airline_company.name
AND airline_company.name="TÜRK
HAVA YOLLARI"
3) TRIGGERS
1) Müsait koltuk sayısının, uçağın toplam koltuk sayısından fazla
girilmemesini sağlar;
CREATE TRIGGER AS T1 BEFORE UPDATE
BEGIN
DECLARE deger INT;
SET deger =(SELECT airplane.Total_number_of_seats
FROM
airplane WHERE
NEW.Airplane_id=airplane.Airplane_id);
IF
NEW.Number_of_avaliable_seats>deger THEN
SET NEW.Number_of_avaliable_seats=deger;
END IF;
END
2) Her koltuk rezarvasyonunda, müsait koltuk sayısını eksilterek
güncelleyen Trigger;
CREATE TRIGGER AS T2
BEFORE INSERT
UPDATE leg_instance
SET leg_instance.Number_of_avaliable_seats=
(leg_instance.Number_of_avaliable_seats-1)
WHERE leg_instance.Flight_number=seat_resarvation.Flight_number AND
leg_instance.Leg_Number=seat_resarvation.Leg_Number
AND leg_instance.Date=seat_resarvation.Date
3) Planlanan uçuşu gerçekleştirmiş
yolcuların; airline şirketine göre, toplam kat ettikleri yolu miL cinsinden
tutmasını sağlayan Trigger;
CREATE DEFINER =
CURRENT_USER TRIGGER `mydb`.`seat_resarvation_AFTER_INSERT`
AFTER INSERT
ON `seat_resarvation` FOR EACH ROW
BEGIN
select mill=ffc.total_mileage,
airlinee=ffc.airline, phone=ffc.customer_phone
from ffc, seat_rezervation, customer, flight_leg,
flight
where
(seat_resarvation.Flight_number=flight_leg.Flight_number
and
seat_resarvation.Flight_number=flight.Flight_number
and
seat_resarvation.Customer_phone=customer.phone_number)
DECLARE mill float
DECLARE airlinee varchar(20)
DECLARE phone varchar(13)
IF (seat_resarvation.isAttendant=1) then
INSERT INTO ffc (mill, airlinee, phone) VALUES
(flight_leg.mileage, flight.Airline, customer.phone_number)
end IF
END
faydalı bir yazı olmuş.teşekkürler...
YanıtlaSil