db, admin
This commit is contained in:
122
db/script.sql
Normal file
122
db/script.sql
Normal file
@@ -0,0 +1,122 @@
|
||||
CREATE DATABASE IF NOT EXISTS jukebox CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
USE jukebox;
|
||||
|
||||
DROP TABLE IF EXISTS track_genre;
|
||||
DROP TABLE IF EXISTS artist_track;
|
||||
DROP TABLE IF EXISTS likes;
|
||||
DROP TABLE IF EXISTS tracks;
|
||||
DROP TABLE IF EXISTS artists;
|
||||
DROP TABLE IF EXISTS albums;
|
||||
DROP TABLE IF EXISTS genres;
|
||||
DROP TABLE IF EXISTS users;
|
||||
DROP TABLE IF EXISTS roles;
|
||||
DROP TABLE IF EXISTS labels;
|
||||
|
||||
CREATE TABLE roles (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name ENUM('admin', 'user') NOT NULL UNIQUE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE labels (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(100) NOT NULL UNIQUE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE genres (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(100) NOT NULL UNIQUE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(50) NOT NULL,
|
||||
email VARCHAR(100) NOT NULL UNIQUE,
|
||||
password VARCHAR(255) NOT NULL,
|
||||
role_id INT NOT NULL,
|
||||
CONSTRAINT fk_users_role
|
||||
FOREIGN KEY (role_id) REFERENCES roles(id)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE RESTRICT
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE albums (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
cover_path VARCHAR(255),
|
||||
release_date DATETIME,
|
||||
duration_seconds INT,
|
||||
type ENUM('single', 'ep', 'lp', 'album', 'compilation') NOT NULL DEFAULT 'album',
|
||||
label_id INT,
|
||||
CONSTRAINT fk_albums_label
|
||||
FOREIGN KEY (label_id) REFERENCES labels(id)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE SET NULL
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE artists (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
cover_path VARCHAR(255),
|
||||
release_date DATETIME,
|
||||
label_id INT,
|
||||
duration INT,
|
||||
CONSTRAINT fk_artists_label
|
||||
FOREIGN KEY (label_id) REFERENCES labels(id)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE SET NULL
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE tracks (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
file_path VARCHAR(255) NOT NULL,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
duration_seconds INT NOT NULL,
|
||||
album_id INT,
|
||||
CONSTRAINT fk_tracks_album
|
||||
FOREIGN KEY (album_id) REFERENCES albums(id)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE SET NULL
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE likes (
|
||||
user_id INT NOT NULL,
|
||||
track_id INT NOT NULL,
|
||||
PRIMARY KEY (user_id, track_id),
|
||||
CONSTRAINT fk_likes_user
|
||||
FOREIGN KEY (user_id) REFERENCES users(id)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE CASCADE,
|
||||
CONSTRAINT fk_likes_track
|
||||
FOREIGN KEY (track_id) REFERENCES tracks(id)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE artist_track (
|
||||
artist_id INT NOT NULL,
|
||||
track_id INT NOT NULL,
|
||||
PRIMARY KEY (artist_id, track_id),
|
||||
CONSTRAINT fk_artist_track_artist
|
||||
FOREIGN KEY (artist_id) REFERENCES artists(id)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE CASCADE,
|
||||
CONSTRAINT fk_artist_track_track
|
||||
FOREIGN KEY (track_id) REFERENCES tracks(id)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE track_genre (
|
||||
track_id INT NOT NULL,
|
||||
genre_id INT NOT NULL,
|
||||
PRIMARY KEY (track_id, genre_id),
|
||||
CONSTRAINT fk_track_genre_track
|
||||
FOREIGN KEY (track_id) REFERENCES tracks(id)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE CASCADE,
|
||||
CONSTRAINT fk_track_genre_genre
|
||||
FOREIGN KEY (genre_id) REFERENCES genres(id)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
Reference in New Issue
Block a user