Repository navigation
Expand file tree
/
Copy pathdb.sql
More file actions
70 lines (61 loc) · 1.74 KB
/
Copy pathdb.sql
File metadata and controls
70 lines (61 loc) · 1.74 KB
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
-- Database: testdb
DROP DATABASE IF EXISTS testdb;
CREATE DATABASE testdb
WITH
OWNER = postgres
ENCODING = 'UTF8'
LC_COLLATE = 'Portuguese_Brazil.1252'
LC_CTYPE = 'Portuguese_Brazil.1252'
LOCALE_PROVIDER = 'libc'
TABLESPACE = pg_default
CONNECTION LIMIT = -1
IS_TEMPLATE = False;
-- Tabela unificada de usuários e artistas
CREATE TABLE usuario (
id SERIAL PRIMARY KEY,
nome TEXT NOT NULL,
email TEXT NOT NULL UNIQUE,
senha TEXT NOT NULL,
is_artista BOOLEAN NOT NULL DEFAULT FALSE,
-- nulo se não for artista
biografia TEXT,
genero TEXT
);
-- Tabela de álbuns
CREATE TABLE album (
id SERIAL PRIMARY KEY,
titulo TEXT NOT NULL,
data_lancamento DATE,
arquivo_capa TEXT,
descricao TEXT,
artista_id INT NOT NULL,
FOREIGN KEY (artista_id) REFERENCES usuario(id) ON DELETE CASCADE
);
-- Tabela de músicas
CREATE TABLE musica (
id SERIAL PRIMARY KEY,
titulo TEXT NOT NULL,
duracao INT,
genero TEXT,
data_lancamento DATE,
faixa BYTEA,
album_id INT NOT NULL,
artista_id INT NOT NULL,
FOREIGN KEY (album_id) REFERENCES album(id) ON DELETE CASCADE,
FOREIGN KEY (artista_id) REFERENCES usuario(id) ON DELETE CASCADE
);
-- Tabela de playlists
CREATE TABLE playlist (
id SERIAL PRIMARY KEY,
nome TEXT NOT NULL,
usuario_id INT NOT NULL,
FOREIGN KEY (usuario_id) REFERENCES usuario(id) ON DELETE CASCADE
);
-- Tabela associativa entre playlists e músicas
CREATE TABLE playlist_musica (
playlist_id INT NOT NULL,
musica_id INT NOT NULL,
PRIMARY KEY (playlist_id, musica_id),
FOREIGN KEY (playlist_id) REFERENCES playlist(id) ON DELETE CASCADE,
FOREIGN KEY (musica_id) REFERENCES musica(id) ON DELETE CASCADE
);