db, admin

This commit is contained in:
2026-03-28 10:59:39 +01:00
parent 1e65891c07
commit 2a1b7ba82d
2 changed files with 122 additions and 0 deletions

122
db/script.sql Normal file
View 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;