Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
193 changes: 193 additions & 0 deletions lab.sql
Original file line number Diff line number Diff line change
@@ -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;