-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmusic_review_database.sql
156 lines (139 loc) · 4.31 KB
/
music_review_database.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
-- Drop and create the MusicDataBase
DROP DATABASE IF EXISTS MusicDataBase;
CREATE DATABASE MusicDataBase;
USE MusicDataBase;
-- 1. Create Listener table
DROP TABLE IF EXISTS Listener;
CREATE TABLE Listener (
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
userID INT(10) NOT NULL,
userName VARCHAR(50) NOT NULL UNIQUE,
userPassword VARCHAR(50) NOT NULL,
PRIMARY KEY (userID)
);
-- 2. Create contentCreator table
DROP TABLE IF EXISTS contentCreator;
CREATE TABLE contentCreator (
firstName VARCHAR(50) NOT NULL,
lastName VARCHAR(50) NOT NULL,
userID INT(10) NOT NULL UNIQUE,
numberFollowers INT(10),
stageName VARCHAR(50) NOT NULL UNIQUE,
PRIMARY KEY (stageName)
);
-- 3. Create Song table
DROP TABLE IF EXISTS Song;
CREATE TABLE Song (
songTitle VARCHAR(50) NOT NULL,
musicType VARCHAR(50),
length INT(10) NOT NULL,
language VARCHAR(30),
stageName VARCHAR(50) NOT NULL,
songID INT(10) NOT NULL UNIQUE,
ReleaseDate DATE NOT NULL,
FOREIGN KEY (stageName) REFERENCES contentCreator(stageName),
PRIMARY KEY (songID)
);
-- 4. Create Reviewer table
DROP TABLE IF EXISTS Reviewer;
CREATE TABLE Reviewer (
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
userID INT(10) NOT NULL UNIQUE,
userName VARCHAR(50) NOT NULL UNIQUE,
userPassword VARCHAR(50),
PRIMARY KEY (userID)
);
-- 5. Create Review table
DROP TABLE IF EXISTS Review;
CREATE TABLE Review (
reviewID INT(5) NOT NULL,
reviewContent VARCHAR(1000) NOT NULL,
reviewScore INT(3),
songID INT(10),
userID INT(10),
FOREIGN KEY (songID) REFERENCES Song(songID),
FOREIGN KEY (userID) REFERENCES Reviewer(userID),
PRIMARY KEY (reviewID)
);
-- Insert data into Listener
INSERT INTO Listener (FirstName, LastName, userID, userName, userPassword)
VALUES
('Jon', 'Doe', 1, 'jdoe123', 'password123'),
('Jane', 'Doe', 2, 'janedoe456', 'password1234'),
('John', 'Smith', 3, 'jsmith123', 'password12345');
-- Insert data into contentCreator
INSERT INTO contentCreator (firstName, lastName, userID, numberFollowers, stageName)
VALUES
('John', 'Rabbit', 1, 1980, 'One Direction'),
('Jane', 'Doesong', 2, 104500, 'Billie Eilish'),
('Alice', 'Wonderland', 46, 10530, 'Shaun');
-- Insert data into Song
INSERT INTO Song (songTitle, songID, length, musicType, stageName, ReleaseDate)
VALUES
('What Makes You Beautiful', 57864, 350, 'pop', 'One Direction', '2011-08-12'),
('Lovely', 25759, 400, 'pop', 'Billie Eilish', '2018-06-10'),
('Way Back Home', 24753, 375, 'Electronic', 'Shaun', '2018-04-08');
-- Insert data into Reviewer
INSERT INTO Reviewer (FirstName, LastName, userID, userName)
VALUES
('Niuikn', 'Tgftyvi', 9750, 'ytcdetghb'),
('Niuikn', 'Tgftyvi', 2546, 'ytcdetghb'),
('Niuikn', 'Tgftyvi', 1865, 'ytcdetghb');
-- Insert data into Review
INSERT INTO Review (reviewID, reviewContent, reviewScore, songID, userID)
VALUES
(57864, 'Worst song ever, lol', 100, 57864, 9750),
(2, 'Made me cry tears of joy', 100, 25759, 2546),
(3, 'Wowie', 90, 24753, 1865);
-- Create views
DROP VIEW IF EXISTS listenerView;
CREATE VIEW listenerView AS
SELECT userName, FirstName, LastName
FROM Listener;
DROP VIEW IF EXISTS contentCreatorView;
CREATE VIEW contentCreatorView AS
SELECT FirstName, LastName, stageName
FROM contentCreator;
DROP VIEW IF EXISTS reviewAndReviewer;
CREATE VIEW reviewAndReviewer AS
SELECT
r.userName,
rev.reviewScore,
s.songTitle
FROM
Review rev
JOIN
Reviewer r ON rev.userID = r.userID
JOIN
Song s ON rev.songID = s.songID;
-- Create stored procedures
DROP PROCEDURE IF EXISTS findArtist;
DELIMITER $$
CREATE PROCEDURE findArtist(IN artistName VARCHAR(15))
BEGIN
SELECT stageName
FROM contentCreator
WHERE artistName = stageName;
END$$
DELIMITER ;
CALL findArtist('One Direction');
DROP PROCEDURE IF EXISTS findPositiveReviewsToMakeMeFeelBetter;
DELIMITER $$
CREATE PROCEDURE findPositiveReviewsToMakeMeFeelBetter(IN tuneName VARCHAR(150))
BEGIN
SELECT
r.reviewScore,
s.songTitle,
r.reviewContent
FROM
Review r
JOIN
Song s ON r.songID = s.songID
WHERE
r.reviewScore > 75
AND s.songTitle = tuneName;
END$$
DELIMITER ;
CALL findPositiveReviewsToMakeMeFeelBetter('What Makes You Beautiful');