diff --git a/lab-2/music-store-app/sql/schema.sql b/lab-2/music-store-app/sql/schema.sql new file mode 100644 index 0000000000000000000000000000000000000000..2bb7329f312e7b5c6f7584e93d59199243b424f7 --- /dev/null +++ b/lab-2/music-store-app/sql/schema.sql @@ -0,0 +1,92 @@ +/* Delete existing tables in reverse order of creation +so as not to violate any foreign key constraints */ +DROP TABLE IF EXISTS OrderLine, Order, Customer, Track, Album, Artist, Act, Genre; + +/* Define table for genres */ +CREATE TABLE Genre ( + id INT AUTO_INCREMENT, + name VARCHAR(25) UNIQUE NOT NULL, + PRIMARY KEY (id) +} + + +/* Define table for storing act (i.e. a group or solo artist) */ +CREATE TABLE Act ( + id INT AUTO_INCREMENT, + name VARCHAR(50) NOT NULL, + genre_id INT, + PRIMARY KEY (id), + FOREIGN KEY (genre_id) + REFERENCES Genre (id) +} + +/* Define table for storing artists */ +CREATE TABLE Artist ( + id INT AUTO_INCREMENT, + first_name VARCHAR(25) NOT NULL, + last_name VARCHAR(25), + act_id INT NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY (act_id) + REFERENCES Act (id) +); + +/* Define table for storing albums */ +CREATE TABLE Album ( + id INT AUTO_INCREMENT, + name VARCHAR(50) NOT NULL, + year YEAR(4), + compilation BOOLEAN NOT NULL DEFAULT 0 + price DECIMAL(5, 2) unsigned NOT NULL, +} + + +/* Define table for storing single tracks */ +CREATE TABLE Track ( + id INT AUTO_INCREMENT, + title VARCHAR(50) NOT NULL, + act_id INT NOT NULL, + album_id INT NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY (act_id) + REFERENCES Act (id), + FOREIGN KEY (album_id) + REFERENCES Album (id) +); + +/* Define table for storing customers */ +CREATE TABLE Customer ( + id INT AUTO_INCREMENT, + username VARCHAR(25) UNIQUE NOT NULL, + email_address VARCHAR(50) UNIQUE NOT NULL, + password VARCHAR(64), + first_name VARCHAR(50) NOT NULL, + last_name VARCHAR(50) NOT NULL, + address_1 VARCHAR(50) NOT NULL, + address_2 VARCHAR(50), + postcode VARCHAR(10) NOT NULL, + PRIMARY KEY (id) +); + +/* Define table for storing orders */ +CREATE TABLE Order ( + id INT AUTO_INCREMENT, + customer_id INT NOT NULL, + delivery ENUM('first class','second class','next working day'), + PRIMARY KEY (id), + FOREIGN KEY (customer_id) + REFERENCES Customer(id) +); + +/* Define table for storing orderlines */ +CREATE TABLE OrderLine ( + id INT AUTO_INCREMENT, + order_id INT NOT NULL, + album_id INT NOT NULL, + quantity INT NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY (order_id) + REFERENCES Order(id), + FOREIGN KEY (album_id) + REFERENCES Album(id), +);