diff --git a/lab.sql b/lab.sql new file mode 100644 index 0000000..1f5a1bb --- /dev/null +++ b/lab.sql @@ -0,0 +1,193 @@ +---Exercise 1: + +---Step 1: +--- The raw dataset contains redundancy because author names are repeated for multiple posts. +--- To normalize the data to 3NF, the schema is split into two tables: +--- authors(author_id, author_name) +--- articles(article_id, title, word_count, views, author_id) +--- This removes repeated author data and links each article to its author using a foreign key. + + +CREATE DATABASE IF NOT EXISTS blog; +USE blog; + +CREATE TABLE IF NOT EXISTS authors ( + author_id INT AUTO_INCREMENT PRIMARY KEY, + author_name VARCHAR(255) NOT NULL UNIQUE + ); + +CREATE TABLE IF NOT EXISTS articles ( + article_id INT AUTO_INCREMENT PRIMARY KEY, + author_id INT NOT NULL, + title VARCHAR(255) NOT NULL, + word_count INT NOT NULL, + views INT NOT NULL DEFAULT 0, + CONSTRAINT fk_author_id FOREIGN KEY (author_id) REFERENCES authors(author_id) + ); + +INSERT INTO authors (author_name) VALUES + ('Maria Charlotte'), + ('Juan Perez'), + ('Gemma Alcocer'); + +INSERT INTO articles (title, word_count, views, author_id) VALUES + ('Best Paint Colors', 814, 14, + (SELECT author_id FROM authors WHERE author_name = 'Maria Charlotte')), + + ('Small Space Decorating Tips', 1146, 221, + (SELECT author_id FROM authors WHERE author_name = 'Juan Perez')), + + ('Hot Accessories', 986, 105, + (SELECT author_id FROM authors WHERE author_name = 'Maria Charlotte')), + + ('Mixing Textures', 765, 22, + (SELECT author_id FROM authors WHERE author_name = 'Maria Charlotte')), + + ('Kitchen Refresh', 1242, 307, + (SELECT author_id FROM authors WHERE author_name = 'Juan Perez')), + + ('Homemade Art Hacks', 1002, 193, + (SELECT author_id FROM authors WHERE author_name = 'Maria Charlotte')), + + ('Refinishing Wood Floors', 1571, 7542, + (SELECT author_id FROM authors WHERE author_name = 'Gemma Alcocer')); + +SELECT a.author_name, + ar.title, + ar.word_count, + ar.views +FROM authors a +JOIN articles ar ON a.author_id = ar.author_id +ORDER BY ar.views DESC; + +---Exercise 2: + +-- The raw dataset contains repeated customer, flight, and aircraft information. +-- To normalize the data to 3NF, it is decomposed into the following tables: +-- customers, aircrafts, flights, bookings. + +-- Functional Dependencies: +-- Customer Name -> Customer Status, Total Customer Mileage +-- Aircraft -> Total Aircraft Seats +-- Flight Number -> Aircraft, Flight Mileage + +-- 3NF Decomposition: +-- customers(customer_id, customer_name, customer_status, total_customer_mileage) +-- aircrafts(aircraft_id, aircraft, total_aircraft_seats) +-- flights(flight_number, aircraft_id, flight_mileage) +-- bookings(booking_id, customer_id, flight_number) + +CREATE DATABASE IF NOT EXISTS airline; +USE airline; + +CREATE TABLE IF NOT EXISTS customers ( + customer_id INT AUTO_INCREMENT PRIMARY KEY, + customer_name VARCHAR(255) NOT NULL UNIQUE, + customer_status VARCHAR(50) NOT NULL, + total_customer_mileage INT NOT NULL + ); + +CREATE TABLE IF NOT EXISTS aircrafts ( + aircraft_id INT AUTO_INCREMENT PRIMARY KEY, + aircraft VARCHAR(100) NOT NULL UNIQUE, + total_aircraft_seats INT NOT NULL + ); + +CREATE TABLE IF NOT EXISTS flights ( + flight_number VARCHAR(20) PRIMARY KEY, + aircraft_id INT NOT NULL, + flight_mileage INT NOT NULL, + CONSTRAINT fk_flights_aircraft FOREIGN KEY (aircraft_id) REFERENCES aircrafts(aircraft_id) + ); + +CREATE TABLE IF NOT EXISTS bookings ( + booking_id INT AUTO_INCREMENT PRIMARY KEY, + customer_id INT NOT NULL, + flight_number VARCHAR(20) NOT NULL, + CONSTRAINT fk_bookings_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id), + CONSTRAINT fk_bookings_flight FOREIGN KEY (flight_number) REFERENCES flights(flight_number) + ); + +INSERT INTO aircrafts (aircraft, total_aircraft_seats) VALUES + ('Boeing 747', 400), + ('Airbus A330', 236), + ('Boeing 777', 264); + +INSERT INTO customers (customer_name, customer_status, total_customer_mileage) VALUES + ('Agustine Riviera', 'Silver', 115235), + ('Alaina Sepulvida', 'None', 6008), + ('Tom Jones', 'Gold', 205767), + ('Sam Rio', 'None', 2653), + ('Jessica James', 'Silver', 127656), + ('Ana Janco', 'Silver', 136773), + ('Jennifer Cortez', 'Gold', 300582), + ('Christian Janco', 'Silver', 14642); + +INSERT INTO flights (flight_number, aircraft_id, flight_mileage) VALUES + ('DL143', + (SELECT aircraft_id FROM aircrafts WHERE aircraft = 'Boeing 747'), + 135), + + ('DL122', + (SELECT aircraft_id FROM aircrafts WHERE aircraft = 'Airbus A330'), + 4370), + + ('DL53', + (SELECT aircraft_id FROM aircrafts WHERE aircraft = 'Boeing 777'), + 2078), + + ('DL222', + (SELECT aircraft_id FROM aircrafts WHERE aircraft = 'Boeing 777'), + 1765), + + ('DL37', + (SELECT aircraft_id FROM aircrafts WHERE aircraft = 'Boeing 747'), + 531); + +INSERT INTO bookings (customer_id, flight_number) VALUES + ((SELECT customer_id FROM customers WHERE customer_name = 'Agustine Riviera'), 'DL143'), + + ((SELECT customer_id FROM customers WHERE customer_name = 'Agustine Riviera'), 'DL122'), + + ((SELECT customer_id FROM customers WHERE customer_name = 'Alaina Sepulvida'), 'DL122'), + + ((SELECT customer_id FROM customers WHERE customer_name = 'Agustine Riviera'), 'DL143'), + + ((SELECT customer_id FROM customers WHERE customer_name = 'Tom Jones'), 'DL122'), + + ((SELECT customer_id FROM customers WHERE customer_name = 'Tom Jones'), 'DL53'), + + ((SELECT customer_id FROM customers WHERE customer_name = 'Agustine Riviera'), 'DL143'), + + ((SELECT customer_id FROM customers WHERE customer_name = 'Sam Rio'), 'DL143'), + + ((SELECT customer_id FROM customers WHERE customer_name = 'Agustine Riviera'), 'DL143'), + + ((SELECT customer_id FROM customers WHERE customer_name = 'Tom Jones'), 'DL222'), + + ((SELECT customer_id FROM customers WHERE customer_name = 'Jessica James'), 'DL143'), + + ((SELECT customer_id FROM customers WHERE customer_name = 'Sam Rio'), 'DL143'), + + ((SELECT customer_id FROM customers WHERE customer_name = 'Ana Janco'), 'DL222'), + + ((SELECT customer_id FROM customers WHERE customer_name = 'Jennifer Cortez'), 'DL222'), + + ((SELECT customer_id FROM customers WHERE customer_name = 'Jessica James'), 'DL122'), + + ((SELECT customer_id FROM customers WHERE customer_name = 'Sam Rio'), 'DL37'), + + ((SELECT customer_id FROM customers WHERE customer_name = 'Christian Janco'), 'DL222'); + +SELECT c.customer_name, + c.customer_status, + f.flight_number, + a.aircraft, + a.total_aircraft_seats, + f.flight_mileage, + c.total_customer_mileage +FROM bookings b +JOIN customers c ON b.customer_id = c.customer_id +JOIN flights f ON b.flight_number = f.flight_number +JOIN aircrafts a ON f.aircraft_id = a.aircraft_id +ORDER BY c.customer_name, f.flight_number;