-
Notifications
You must be signed in to change notification settings - Fork 1
SQL Script to Generate and Populate The Tables
Kevin Camellini edited this page Oct 17, 2018
·
29 revisions
Link to the gist
Link to the raw code to better utilize copy/pasting skillz here.
-- Attempt at creating a trigger
-- CREATE TRIGGER insert_into_books_trigger
-- ON books
-- BEFORE INSERT
-- AS
-- IF EXISTS(SELECT * FROM INSERTED)
-- BEGIN
-- INSERT INTO Items (discriminator)
-- VALUES ('Book');
-- ?return the ID of that item?
-- END;
DROP TABLE Users CASCADE;
DROP TABLE Transactions CASCADE;
DROP TABLE Items CASCADE;
DROP TABLE Books;
DROP TABLE Magazines;
DROP TABLE Movies;
DROP TABLE Music;
CREATE TABLE Users(
user_id SERIAL NOT NULL,
password VARCHAR(100) NOT NULL,
phone FLOAT NOT NULL,
email VARCHAR(75) UNIQUE NOT NULL,
address VARCHAR(50),
f_name VARCHAR(50),
l_name VARCHAR(50),
num_permitted_items INTEGER DEFAULT 0,
is_admin BOOLEAN NOT NULL DEFAULT FALSE,
PRIMARY KEY (user_id)
);
CREATE TABLE Items(
item_id SERIAL NOT NULL,
discriminator VARCHAR(10),
PRIMARY KEY (item_id)
);
CREATE TABLE Transactions(
transaction_id SERIAL NOT NULL,
client_id INTEGER NOT NULL,
item_id INTEGER NOT NULL,
loan_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, -- the format is '0000-00-00 00:00:00'
due_date TIMESTAMP,
return_date TIMESTAMP,
PRIMARY KEY (transaction_id),
FOREIGN KEY(client_id) REFERENCES Users(user_id) ON DELETE CASCADE,
FOREIGN KEY(item_id) REFERENCES Items (item_id) ON DELETE CASCADE
);
CREATE TABLE Books(
book_id SERIAL NOT NULL,
discriminator VARCHAR(10) DEFAULT 'Book',
quantity INTEGER DEFAULT 0,
loand_period INT DEFAULT 7,
loanable BOOLEAN DEFAULT TRUE,
title VARCHAR(50),
author VARCHAR(50),
format VARCHAR(50),
pages INTEGER,
publisher VARCHAR(50),
language VARCHAR(50),
isbn10 FLOAT CHECK (isbn10 between 1000000000 and 9999999999),
isbn13 FLOAT CHECK (isbn13 between 1000000000000 and 9999999999999),
PRIMARY KEY (book_id),
FOREIGN KEY (book_id) REFERENCES Items (item_id) ON DELETE CASCADE
);
CREATE TABLE Magazines(
magazine_id SERIAL NOT NULL,
discriminator VARCHAR(10) DEFAULT 'Magazine',
quantity INTEGER DEFAULT 0,
loand_period INT DEFAULT 0,
loanable BOOLEAN DEFAULT FALSE,
title VARCHAR(50),
publisher VARCHAR(50),
language VARCHAR(50),
isbn10 FLOAT CHECK (isbn10 between 1000000000 and 9999999999),
isbn13 FLOAT CHECK (isbn13 between 1000000000000 and 9999999999999),
PRIMARY KEY (magazine_id),
FOREIGN KEY (magazine_id) REFERENCES Items (item_id) ON DELETE CASCADE
);
CREATE TABLE Movies(
movie_id SERIAL NOT NULL,
discriminator VARCHAR(10) DEFAULT 'Movie',
quantity INTEGER DEFAULT 0,
loand_period INT DEFAULT 2,
loanable BOOLEAN DEFAULT TRUE,
title VARCHAR(50),
director VARCHAR(50),
producers VARCHAR(50),
language VARCHAR(50),
dubbed VARCHAR(50),
subtitles VARCHAR(50),
actors VARCHAR(50),
release_date DATE, --format YYYY-MM-DD
run_time INT, --format in minutes (127 minutes)
PRIMARY KEY (movie_id),
FOREIGN KEY (movie_id) REFERENCES Items (item_id) ON DELETE CASCADE
);
CREATE TABLE Music(
music_id SERIAL NOT NULL,
discriminator VARCHAR(10) DEFAULT 'Music',
quantity INTEGER DEFAULT 0,
loand_period INT DEFAULT 2,
loanable BOOLEAN DEFAULT TRUE,
title VARCHAR(50),
artist VARCHAR(50),
label VARCHAR(50),
release_date DATE,
asin CHAR(10),
PRIMARY KEY (music_id),
FOREIGN KEY (music_id) REFERENCES Items (item_id) ON DELETE CASCADE
);
--Users
INSERT INTO Users (password, phone, email, address, f_name, l_name, num_permitted_items, is_admin)
VALUES('a',5141234567,'[email protected]','123 Rue Guy, Montreal','Bob','Lennox','999',TRUE);
INSERT INTO Users (password, phone, email, address, f_name, l_name, num_permitted_items, is_admin)
VALUES('a',5141234567,'[email protected]','123 Rue Guy, Montreal','Momo','Taleb','5',FALSE);
INSERT INTO Users (password, phone, email, address, f_name, l_name, num_permitted_items, is_admin)
VALUES('a',5141234567,'[email protected]','123 Rue Guy, Montreal','C','C','5',FALSE);
INSERT INTO Users (password, phone, email, address, f_name, l_name, num_permitted_items, is_admin)
VALUES('a',5141234567,'[email protected]','123 Rue Guy, Montreal','Bob','Ghandi','5',FALSE);
INSERT INTO Users (password, phone, email, address, f_name, l_name, num_permitted_items, is_admin)
VALUES('a',5141234567,'[email protected]','123 Rue Guy, Montreal','Marcus','Aurelius','5',FALSE);
--Books
-- (book_id, discriminator, quantity, loand_period, loanable, title, author, format, pages, publisher, language, isbn10, isbn13)
INSERT INTO Items (discriminator)
VALUES ('Book');
INSERT INTO Books
VALUES(1,'Book',2,7,TRUE,'War Dogs','Michael J. Fox','Hardcopy',504,'Anton', 'English', 1234567890, 1234567890000);
INSERT INTO Items
VALUES (2, 'Book');
INSERT INTO Books
VALUES(2,'Book',3,7,TRUE,'Meditations','Marcus Aurelius','Hardcopy',800,'Penguin', 'English', 1234567891, 1234567891000);
--Transactions
INSERT INTO Transactions (client_id, item_id, loan_date, due_date, return_date)
VALUES(2,2,CURRENT_TIMESTAMP,'2018-02-02 00:00:00','2018-03-03 00:00:00');
--Magazines
--(magazine_id, discriminator, quantity, loand_period, loanable, title, publisher, language, isbn10, isbn13)
INSERT INTO Items
VALUES (3,'Magazine');
INSERT INTO Magazines
VALUES(3,'Magazine',2,0,FALSE,'BMW Magazine','BMW', 'English', 1234567899, 1234567899000);
INSERT INTO Items
VALUES (4,'Magazine');
INSERT INTO Magazines
VALUES(4,'Magazine',1,0,FALSE,'Wired October','Wired', 'English', 1234567900, 1234567900000);
--Movies
--(movie_id, discriminator, quantity, loand_period, loanable, title, director, producers, language, dubbed, subtitles, actors, release_date, run_time)
INSERT INTO Items
VALUES (5,'Movie');
INSERT INTO Movies
VALUES(5, 'Movie',3,2,TRUE,'Oceans 11','Clint Eastwood', 'Michael Kane', 'English', 'English', 'German', 'George Cloney, Brad Pitt', '2001-09-04', 133);
INSERT INTO Items
VALUES (6,'Movie');
INSERT INTO Movies
VALUES(6, 'Movie',3,2,TRUE,'Oceans 12','Clint Eastwood', 'Michael Kane', 'English', 'English', 'German', 'George Cloney, Brad Pitt', '2004-09-05', 127);
--Music
--(music_id, discriminator, quantity, loand_period, loanable, title, artist, label, release_date, asin)
INSERT INTO Items
VALUES (7,'Music');
INSERT INTO Music
VALUES(7,'Music',5,2,TRUE,'Presence','Led Zepplin', 'Sony Production', '1976-01-01', 'B008FOB124');
INSERT INTO Items
VALUES (8,'Music');
INSERT INTO Music
VALUES(8,'Music',5,2,TRUE,'The Wall','Pink Floyd', 'Columbia', '1979-01-01', 'B008FOB125');