DROP TABLE IF EXISTS GRAPHNODE CASCADE;
DROP TABLE IF EXISTS PROPERTYLINK cascade;
DROP TABLE IF EXISTS AIRLINE CASCADE;
DROP TABLE IF EXISTS FLIGHT CASCADE;
DROP TABLE IF EXISTS IN_OUT_GOING CASCADE;
/* Δημιουργία Πίνακα {GRAPHNODE} */
CREATE TABLE GRAPHNODE (
NODEKEY VARCHAR(30) NOT NULL,
FACET VARCHAR(30),
PRIMARY KEY(NODEKEY));
/* Δημιουργία υποκλάσης {AIRLINE} */
CREATE TABLE AIRLINE (
PRIMARY KEY(NODEKEY),
ONOMA VARCHAR(60) NOT NULL,
LOCATION VARCHAR(120) NOT NULL,
PERIGRAFH VARCHAR(400) NOT NULL,
TELEPHONE TEXT []) INHERITS (GRAPHNODE);
/* Δημιουργία υποκλάσης {FLIGHT} */
CREATE TABLE FLIGHT (
PRIMARY KEY(NODEKEY),
AFETHRIA VARCHAR(60),
PROORISMOS VARCHAR(60)) INHERITS (GRAPHNODE);
/* Δημιουργία υποκλάσης {AIRPORT} */
CREATE TABLE AIRPORT (
PRIMARY KEY(NODEKEY),
COUNTRY VARCHAR(60)) INHERITS (GRAPHNODE);
/* Δημιουργία Πίνακα {PROPERTYLINK} */
CREATE TABLE PROPERTYLINK (
STARTNODE VARCHAR(30) NOT NULL,
DESTINATION VARCHAR(30) NOT NULL,
PROPERTYLABEL VARCHAR(30) NOT NULL,
FOREIGN KEY (STARTNODE) REFERENCES GRAPHNODE (NODEKEY),
FOREIGN KEY (DESTINATION) REFERENCES GRAPHNODE (NODEKEY),
PRIMARY KEY (STARTNODE, DESTINATION));
/* Δημιουργία Πίνακα {IN_OUT_GOING} για καταγρφαή επόμενων και προηγούμενων κόμβων */
CREATE TABLE IN_OUT_GOING(
komvos varchar(30)not null,
in_Coming varchar(30)[],
out_Going varchar(30)[],
foreign key(komvos) references GRAPHNODE (NODEKEY),
primary key(komvos));
/* Εισαγωγή εγγραφών στον Πίνακα {GRAPHNODE} */
INSERT INTO GRAPHNODE VALUES ('AEGEAN', 'Airline');
INSERT INTO GRAPHNODE VALUES ('EasyJet', 'Airline');
INSERT INTO GRAPHNODE VALUES ('A3-123', 'Flight');
INSERT INTO GRAPHNODE VALUES ('A3-456', 'Flight');
INSERT INTO GRAPHNODE VALUES ('A3-789', 'Flight');
INSERT INTO GRAPHNODE VALUES ('EZ-123', 'Flight');
INSERT INTO GRAPHNODE VALUES ('Athens', 'Airport');
INSERT INTO GRAPHNODE VALUES ('Heraklion', 'Airport');
INSERT INTO GRAPHNODE VALUES ('Heathrow', 'Airport');
/* Εισαγωγή εγγραφών στον Πίνακα {AIRLINE} */
INSERT INTO AIRLINE VALUES ('AEGEAN', 'Ελληνικές Αερογραμμές', 'Αθήνα', 'Περιφερειακός αερομεταφορέας', ARRAY ['2810379190', '6973359242']);
INSERT INTO AIRLINE VALUES ('EasyJet', 'Charter', 'Λονδίνο', 'Περιφερειακός αερομεταφορέας', ARRAY ['2810321040', '6978559242']);
INSERT INTO AIRLINE VALUES ('Bristish Airways', 'Βρετανικές Αερογραμμές', 'Λονδίνο', 'Παγκόσμιος αερομεταφορέας', ARRAY ['2810379196', '6979876754']);
/* Εισαγωγή εγγραφών στον Πίνακα {AIRPORT} */
INSERT INTO AIRPORT VALUES ('Athens', 'Greece');
INSERT INTO AIRPORT VALUES ('Heraklion', 'Greece');
INSERT INTO AIRPORT VALUES ('Heathrow', 'England');
/* Εισαγωγή εγγραφών στον Πίνακα {FLIGHTS} */
INSERT INTO FLIGHT VALUES ('A3-123', 'Flight', 'Athens', 'Heathrow');
INSERT INTO FLIGHT VALUES ('A3-456', 'Flight', 'Heathrow', 'Athens');
INSERT INTO FLIGHT VALUES ('A3-789', 'Flight', 'Athens', 'Heraklion');
INSERT INTO FLIGHT VALUES ('EZ-123', 'Flight', 'Heathrow', 'Heraklion');
/* Εισαγωγή εγγραφών στον Πίνακα {PROPERTYLINK} */
INSERT INTO PROPERTYLINK VALUES ('AEGEAN', 'A3-123', 'OPERATES');
INSERT INTO PROPERTYLINK VALUES ('AEGEAN', 'A3-456', 'OPERATES');
INSERT INTO PROPERTYLINK VALUES ('AEGEAN', 'A3-789', 'OPERATES');
INSERT INTO PROPERTYLINK VALUES ('EasyJet', 'EZ-123', 'OPERATES');
/* Εισαγωγή εγγραφών στον Πίνακα {IN_OUT_GOING} */
insert INTO IN_OUT_GOING VALUES('EZ-123',ARRAY['Heathrow'],ARRAY['Heraklion']);
insert INTO IN_OUT_GOING VALUES('A3-123',ARRAY['Heraklion'],ARRAY['Athens']);
insert INTO IN_OUT_GOING VALUES('A3-789',ARRAY['Athens'],ARRAY['Heraklion']);
-- Βρείτε τον αριθμό των κόμβων του γράφου
select COUNT (NODEKEY)
from ONLY graphnode;
-- Τύπωσε όλους τους κόμβους του γράφου που είναι συγκεκριμένου τύπου π.χ. Flight
select *
from ONLY graphnode
where facet='Flight';
-- Τύπωσε όλους τους κόμβους του γράφου που είναι συγκεκριμένου τύπου π.χ. airport
select *
from ONLY graphnode
where facet='Airport';
-- A. Queries σε directed graph
--Βρες την εταιρία που εκτελεί την πτήση Α3-123 - directed graph
SELECT AIRLINE.NODEKEY
FROM AIRLINE, PROPERTYLINK
WHERE AIRLINE.NODEKEY = PROPERTYLINK.STARTNODE
AND PROPERTYLINK.DESTINATION='A3-123'
AND PROPERTYLINK.PROPERTYLABEL = 'OPERATES';
-- B. Queries σε undirected graph
--Βρες όλες τις πτήσεις της Aegean
-- 1ος τρόπος (undirected graph ενός κόμβου)
SELECT n.NODEKEY , n.AFETHRIA, n.PROORISMOS
FROM FLIGHT n
WHERE n.NODEKEY IN (
SELECT DESTINATION FROM PROPERTYLINK WHERE STARTNODE = 'AEGEAN'
UNION
SELECT STARTNODE FROM PROPERTYLINK WHERE DESTINATION = 'AEGEAN');
-- 2ος τρόπος
SELECT NODEKEY, AFETHRIA, PROORISMOS
FROM FLIGHT
WHERE NODEKEY IN (
SELECT
CASE WHEN DESTINATION = 'AEGEAN' THEN STARTNODE
ELSE DESTINATION END
FROM PROPERTYLINK
WHERE 'AEGEAN' in (STARTNODE, DESTINATION));
--Βρες όλες τις απευθείας πτήσεις με προορισμό το Heraklion
SELECT komvos as Κόμβος
FROM IN_OUT_GOING
WHERE out_Going [1] = 'Heraklion';