From 521b3e6a7ff220e33fceefddf6e8b6878505f201 Mon Sep 17 00:00:00 2001 From: spl0k Date: Thu, 12 Jun 2014 14:09:14 +0200 Subject: [PATCH] Added DB schema for SQLite and MySQL --- schema/mysql.sql | 127 ++++++++++++++++++++++++++++++++++++++++++++++ schema/sqlite.sql | 127 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 254 insertions(+) create mode 100644 schema/mysql.sql create mode 100644 schema/sqlite.sql diff --git a/schema/mysql.sql b/schema/mysql.sql new file mode 100644 index 0000000..5d2ccd0 --- /dev/null +++ b/schema/mysql.sql @@ -0,0 +1,127 @@ +CREATE TABLE folder ( + id CHAR(36) PRIMARY KEY, + root BOOLEAN NOT NULL, + name VARCHAR(256) NOT NULL, + path VARCHAR(4096) NOT NULL, + created DATETIME NOT NULL, + has_cover_art BOOLEAN NOT NULL, + last_scan INTEGER NOT NULL, + parent_id CHAR(36) REFERENCES folder +) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE artist ( + id CHAR(36) PRIMARY KEY, + name VARCHAR(256) NOT NULL +) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE album ( + id CHAR(36) PRIMARY KEY, + name VARCHAR(256) NOT NULL, + artist_id CHAR(36) NOT NULL REFERENCES artist +) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE track ( + id CHAR(36) PRIMARY KEY, + disc INTEGER NOT NULL, + number INTEGER NOT NULL, + title VARCHAR(256) NOT NULL, + year INTEGER, + genre VARCHAR(256), + duration INTEGER NOT NULL, + album_id CHAR(36) NOT NULL REFERENCES album, + bitrate INTEGER NOT NULL, + path VARCHAR(4096) NOT NULL, + content_type VARCHAR(32) NOT NULL, + created DATETIME NOT NULL, + last_modification INTEGER NOT NULL, + play_count INTEGER NOT NULL, + last_play DATETIME, + root_folder_id CHAR(36) NOT NULL REFERENCES folder, + folder_id CHAR(36) NOT NULL REFERENCES folder +) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE user ( + id CHAR(36) PRIMARY KEY, + name VARCHAR(64) NOT NULL, + mail VARCHAR(256), + password CHAR(40) NOT NULL, + salt CHAR(6) NOT NULL, + admin BOOLEAN NOT NULL, + lastfm_session CHAR(32), + lastfm_status BOOLEAN NOT NULL, + last_play_id CHAR(36) REFERENCES track, + last_play_date DATETIME +) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE client_prefs ( + user_id CHAR(36) NOT NULL, + client_name VARCHAR(32) NOT NULL, + format VARCHAR(8), + bitrate INTEGER, + PRIMARY KEY (user_id, client_name) +) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE starred_folder ( + user_id CHAR(36) NOT NULL REFERENCES user, + starred_id CHAR(36) NOT NULL REFERENCES folder, + date DATETIME NOT NULL, + PRIMARY KEY (user_id, starred_id) +) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE starred_artist ( + user_id CHAR(36) NOT NULL REFERENCES user, + starred_id CHAR(36) NOT NULL REFERENCES artist, + date DATETIME NOT NULL, + PRIMARY KEY (user_id, starred_id) +) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE starred_album ( + user_id CHAR(36) NOT NULL REFERENCES user, + starred_id CHAR(36) NOT NULL REFERENCES album, + date DATETIME NOT NULL, + PRIMARY KEY (user_id, starred_id) +) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE starred_track ( + user_id CHAR(36) NOT NULL REFERENCES user, + starred_id CHAR(36) NOT NULL REFERENCES track, + date DATETIME NOT NULL, + PRIMARY KEY (user_id, starred_id) +) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE rating_folder ( + user_id CHAR(36) NOT NULL REFERENCES user, + rated_id CHAR(36) NOT NULL REFERENCES folder, + rating INTEGER NOT NULL CHECK(rating BETWEEN 1 AND 5), + PRIMARY KEY (user_id, rated_id) +) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE rating_track ( + user_id CHAR(36) NOT NULL REFERENCES user, + rated_id CHAR(36) NOT NULL REFERENCES track, + rating INTEGER NOT NULL CHECK(rating BETWEEN 1 AND 5), + PRIMARY KEY (user_id, rated_id) +) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE chat_message ( + id CHAR(36) PRIMARY KEY, + user_id CHAR(36) NOT NULL REFERENCES user, + time INTEGER NOT NULL, + message VARCHAR(512) NOT NULL +) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE playlist ( + id CHAR(36) PRIMARY KEY, + user_id CHAR(36) NOT NULL REFERENCES user, + name VARCHAR(256) NOT NULL, + comment VARCHAR(256), + public BOOLEAN NOT NULL, + created DATETIME NOT NULL +) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; + +CREATE TABLE playlist_track ( + playlist_id CHAR(36) NOT NULL REFERENCES playlist, + track_id CHAR(36) NOT NULL REFERENCES track, + PRIMARY KEY(playlist_id, track_id) +) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; + diff --git a/schema/sqlite.sql b/schema/sqlite.sql new file mode 100644 index 0000000..f5e4cda --- /dev/null +++ b/schema/sqlite.sql @@ -0,0 +1,127 @@ +CREATE TABLE folder ( + id CHAR(36) PRIMARY KEY, + root BOOLEAN NOT NULL, + name VARCHAR(256) NOT NULL, + path VARCHAR(4096) NOT NULL, + created DATETIME NOT NULL, + has_cover_art BOOLEAN NOT NULL, + last_scan INTEGER NOT NULL, + parent_id CHAR(36) REFERENCES folder +); + +CREATE TABLE artist ( + id CHAR(36) PRIMARY KEY, + name VARCHAR(256) NOT NULL COLLATE NOCASE +); + +CREATE TABLE album ( + id CHAR(36) PRIMARY KEY, + name VARCHAR(256) NOT NULL COLLATE NOCASE, + artist_id CHAR(36) NOT NULL REFERENCES artist +); + +CREATE TABLE track ( + id CHAR(36) PRIMARY KEY, + disc INTEGER NOT NULL, + number INTEGER NOT NULL, + title VARCHAR(256) NOT NULL, + year INTEGER, + genre VARCHAR(256), + duration INTEGER NOT NULL, + album_id CHAR(36) NOT NULL REFERENCES album, + bitrate INTEGER NOT NULL, + path VARCHAR(4096) NOT NULL, + content_type VARCHAR(32) NOT NULL, + created DATETIME NOT NULL, + last_modification INTEGER NOT NULL, + play_count INTEGER NOT NULL, + last_play DATETIME, + root_folder_id CHAR(36) NOT NULL REFERENCES folder, + folder_id CHAR(36) NOT NULL REFERENCES folder +); + +CREATE TABLE user ( + id CHAR(36) PRIMARY KEY, + name VARCHAR(64) NOT NULL, + mail VARCHAR(256), + password CHAR(40) NOT NULL, + salt CHAR(6) NOT NULL, + admin BOOLEAN NOT NULL, + lastfm_session CHAR(32), + lastfm_status BOOLEAN NOT NULL, + last_play_id CHAR(36) REFERENCES track, + last_play_date DATETIME +); + +CREATE TABLE client_prefs ( + user_id CHAR(36) NOT NULL, + client_name VARCHAR(32) NOT NULL, + format VARCHAR(8), + bitrate INTEGER, + PRIMARY KEY (user_id, client_name) +); + +CREATE TABLE starred_folder ( + user_id CHAR(36) NOT NULL REFERENCES user, + starred_id CHAR(36) NOT NULL REFERENCES folder, + date DATETIME NOT NULL, + PRIMARY KEY (user_id, starred_id) +); + +CREATE TABLE starred_artist ( + user_id CHAR(36) NOT NULL REFERENCES user, + starred_id CHAR(36) NOT NULL REFERENCES artist, + date DATETIME NOT NULL, + PRIMARY KEY (user_id, starred_id) +); + +CREATE TABLE starred_album ( + user_id CHAR(36) NOT NULL REFERENCES user, + starred_id CHAR(36) NOT NULL REFERENCES album, + date DATETIME NOT NULL, + PRIMARY KEY (user_id, starred_id) +); + +CREATE TABLE starred_track ( + user_id CHAR(36) NOT NULL REFERENCES user, + starred_id CHAR(36) NOT NULL REFERENCES track, + date DATETIME NOT NULL, + PRIMARY KEY (user_id, starred_id) +); + +CREATE TABLE rating_folder ( + user_id CHAR(36) NOT NULL REFERENCES user, + rated_id CHAR(36) NOT NULL REFERENCES folder, + rating INTEGER NOT NULL CHECK(rating BETWEEN 1 AND 5), + PRIMARY KEY (user_id, rated_id) +); + +CREATE TABLE rating_track ( + user_id CHAR(36) NOT NULL REFERENCES user, + rated_id CHAR(36) NOT NULL REFERENCES track, + rating INTEGER NOT NULL CHECK(rating BETWEEN 1 AND 5), + PRIMARY KEY (user_id, rated_id) +); + +CREATE TABLE chat_message ( + id CHAR(36) PRIMARY KEY, + user_id CHAR(36) NOT NULL REFERENCES user, + time INTEGER NOT NULL, + message VARCHAR(512) NOT NULL +); + +CREATE TABLE playlist ( + id CHAR(36) PRIMARY KEY, + user_id CHAR(36) NOT NULL REFERENCES user, + name VARCHAR(256) NOT NULL COLLATE NOCASE, + comment VARCHAR(256), + public BOOLEAN NOT NULL, + created DATETIME NOT NULL +); + +CREATE TABLE playlist_track ( + playlist_id CHAR(36) NOT NULL REFERENCES playlist, + track_id CHAR(36) NOT NULL REFERENCES track, + PRIMARY KEY(playlist_id, track_id) +); +