· 10 years ago · Sep 14, 2016, 08:26 AM
1 DROP DATABASE IF EXISTS PCC;
2 CREATE DATABASE PCC;
3 USE PCC;
4
5 CREATE TABLE ENDERECO(
6 COD_ENDERECO INT AUTO_INCREMENT,
7 PAIS VARCHAR(30) NOT NULL,
8 CEP CHAR(8) NOT NULL,
9 UF CHAR(2) NOT NULL,
10 CIDADE VARCHAR(30) NOT NULL,
11 BAIRRO VARCHAR(30) NOT NULL,
12 RUA VARCHAR(30) NOT NULL,
13 NUMERO VARCHAR(30) NOT NULL,
14 COMPLEMENTO VARCHAR(30),
15 PRIMARY KEY(COD_ENDERECO)
16 );
17
18 CREATE TABLE PESSOA_FISICA(
19 CPF CHAR(11) NOT NULL UNIQUE,
20 NOME_COMPLETO VARCHAR(60),
21 SEXO CHAR(1) NOT NULL,
22 RG CHAR(10) NOT NULL UNIQUE,
23 DATA_NASCIMENTO DATE NOT NULL,
24 PRIMARY KEY (CPF)
25 );
26
27 CREATE TABLE PESSOA_JURIDICA(
28 CNPJ CHAR(15) NOT NULL,
29 NOME VARCHAR(100) NOT NULL,
30 INSCRICAO_ESTADUAL CHAR(12) NOT NULL UNIQUE,
31 PRIMARY KEY(CNPJ)
32 );
33
34 CREATE TABLE USUARIO(
35 LOGIN VARCHAR(60) NOT NULL,
36 SENHA CHAR(32) NOT NULL,
37 NICK VARCHAR(30) NOT NULL UNIQUE,
38 PERFIL_FOTO TEXT NOT NULL,
39 STATUS TEXT,
40 COD_ENDERECO INT,
41 CNPJ_PJ CHAR(15),
42 CPF_PF CHAR(11),
43 FOREIGN KEY (COD_ENDERECO)
44 REFERENCES ENDERECO(COD_ENDERECO),
45 FOREIGN KEY (CNPJ_PJ)
46 REFERENCES PESSOA_JURIDICA(CNPJ),
47 FOREIGN KEY (CPF_PF)
48 REFERENCES PESSOA_FISICA(CPF),
49 PRIMARY KEY(LOGIN)
50 );
51
52 CREATE TABLE AUTOR_USUARIO( /*N-N*/ /*TEXTOS ADORADOS PELOS USUARIOS*/
53 LOGIN_AUTOR VARCHAR(60) NOT NULL,
54 LOGIN_FAN VARCHAR(60) NOT NULL,
55 FOREIGN KEY(LOGIN_AUTOR)
56 REFERENCES USUARIO(LOGIN),
57 FOREIGN KEY(LOGIN_FAN)
58 REFERENCES USUARIO(LOGIN),
59 PRIMARY KEY(LOGIN_AUTOR, LOGIN_FAN)
60 );
61
62 CREATE TABLE TEXTO(
63 COD_TEXTO INT AUTO_INCREMENT,
64 NOME_TEXTO VARCHAR(60) NOT NULL,
65 DESCRICAO TEXT NOT NULL,
66 GENERO_TEXTUAL VARCHAR(30) NOT NULL,
67 DATA_UPLOAD DATE NOT NULL,
68 CONTEUDO TEXT NOT NULL,/* CAMINHO LOCAL DO LIVRO*/
69 ESTADO_TEXTO BOOL,/* TRUE = ACABADO; FALSE= INACABADO*/
70 ENDRECO_CAPA TEXT,
71 VISUALIZACOES INT NOT NULL,
72 DATA_ALTERACAO DATETIME NOT NULL,
73 LOGIN_USUARIO VARCHAR(60) NOT NULL,
74 FOREIGN KEY(LOGIN_USUARIO) REFERENCES USUARIO(LOGIN),
75 PRIMARY KEY(COD_TEXTO)
76 );
77
78 CREATE TABLE LIVRO (
79 COD_LIVRO INT AUTO_INCREMENT,
80 NOME_LIVRO VARCHAR(30) NOT NULL,
81 DESCRICAO TEXT NOT NULL,
82 CAPITULOS INT NOT NULL,
83 DATA_UPLOAD DATE NOT NULL,
84 CONTEUDO TEXT NOT NULL,/* CAMINHO LOCAL DO LIVRO*/
85 ESTADO_LIVRO BOOL NOT NULL,/* TRUE = ACABADO; FALSE= INACABADO*/
86 ANO_PUBLICACAO CHAR(4), /*lIVROS FEITO POR FÃS QUE NÃO SÃO PUBLICADOS*/
87 ENDERECO_CAPA TEXT,
88 VISUALIZACOES INT NOT NULL,
89 DATA_ALTERACAO DATETIME,
90 LOGIN_USUARIO VARCHAR(60) NOT NULL,
91 FOREIGN KEY (LOGIN_USUARIO)
92 REFERENCES USUARIO(LOGIN),
93 PRIMARY KEY (COD_LIVRO)
94 );
95
96 CREATE TABLE CAPITULO(
97 COD_CAPITULO INT AUTO_INCREMENT,
98 NOME_CAPITULO VARCHAR(30) NOT NULL,
99 DATA_UPLOAD DATETIME NOT NULL,
100 CONTEUDO TEXT NOT NULL,/*ENDERECO DO ARQUIVO DO CAPÃTULO*/
101 COD_LIVRO INT NOT NULL,
102 FOREIGN KEY (COD_LIVRO)
103 REFERENCES LIVRO(COD_LIVRO),
104 PRIMARY KEY(COD_CAPITULO)
105);
106
107 CREATE TABLE VISUALIZACAO_TEXTO(
108 COD_PUBLICACAO INT NOT NULL,
109 HORAVIS DATETIME NOT NULL,
110 FOREIGN KEY(COD_PUBLICACAO) REFERENCES TEXTO(COD_TEXTO)
111 );
112
113 CREATE TABLE VISUALIZACAO_LIVRO(
114 COD_PUBLICACAO INT NOT NULL,
115 HORAVIS DATETIME NOT NULL,
116 FOREIGN KEY(COD_PUBLICACAO) REFERENCES LIVRO(COD_LIVRO)
117 );
118
119 CREATE TABLE LIVRO_USUARIO( /*N-N*/ /*LIVROS ADORADOS PELOS USUARIOS*/
120 LOGIN VARCHAR(60) NOT NULL,
121 COD_LIVRO INT NOT NULL,
122 FOREIGN KEY(LOGIN)
123 REFERENCES USUARIO(LOGIN),
124 FOREIGN KEY(COD_LIVRO)
125 REFERENCES LIVRO(COD_LIVRO),
126 PRIMARY KEY(LOGIN, COD_LIVRO)
127 );
128
129 CREATE TABLE TEXTO_USUARIO( /*N-N*/ /*TEXTOS ADORADOS PELOS USUARIOS*/
130 LOGIN VARCHAR(60) NOT NULL,
131 COD_TEXTO INT NOT NULL,
132 FOREIGN KEY(LOGIN)
133 REFERENCES USUARIO(LOGIN),
134 FOREIGN KEY(COD_TEXTO)
135 REFERENCES TEXTO(COD_TEXTO),
136 PRIMARY KEY(LOGIN, COD_TEXTO)
137 );
138
139 CREATE TABLE ESTANTE( /* N-N */
140 LOGIN VARCHAR(60) NOT NULL,
141 COD_LIVRO INT,
142 COD_TEXTO INT,
143 FOREIGN KEY(LOGIN)
144 REFERENCES USUARIO(LOGIN),
145 FOREIGN KEY(COD_LIVRO)
146 REFERENCES LIVRO(COD_LIVRO),
147 FOREIGN KEY(COD_TEXTO)
148 REFERENCES TEXTO(COD_TEXTO)
149 );
150
151 CREATE TABLE GENERO(
152 COD_GENERO INT AUTO_INCREMENT,
153 NOME_GENERO VARCHAR(30),
154 PRIMARY KEY(COD_GENERO)
155);
156
157 CREATE TABLE TOTAL_GENERO_USUARIO( /* N-N */ /* Generos que o usuario gostou */
158 LOGIN VARCHAR(60) NOT NULL,
159 COD_GENERO INT NOT NULL,
160 FOREIGN KEY (LOGIN)
161 REFERENCES USUARIO(LOGIN),
162 FOREIGN KEY (COD_GENERO)
163 REFERENCES GENERO(COD_GENERO),
164 PRIMARY KEY(LOGIN, COD_GENERO)
165 );
166
167 CREATE TABLE TOTAL_GENERO_LIVRO(/*N-N*/
168 COD_GENERO INT NOT NULL,
169 COD_LIVRO INT NOT NULL,
170 FOREIGN KEY(COD_LIVRO)
171 REFERENCES LIVRO(COD_LIVRO),
172 FOREIGN KEY(COD_GENERO)
173 REFERENCES GENERO(COD_GENERO),
174 PRIMARY KEY(COD_GENERO, COD_LIVRO)
175 );
176
177 CREATE TABLE COMENTARIO(
178 COD_COMENTARIO INT AUTO_INCREMENT,
179 CONTEUDO TEXT NOT NULL,
180 DATA_UPLOAD DATE NOT NULL,
181 LOGIN_USUARIO VARCHAR(60) NOT NULL,
182 COD_TEXTO INT,
183 COD_LIVRO INT,
184 FOREIGN KEY (COD_TEXTO)
185 REFERENCES TEXTO(COD_TEXTO),
186 FOREIGN KEY (LOGIN_USUARIO)
187 REFERENCES USUARIO(LOGIN),
188 FOREIGN KEY (COD_LIVRO)
189 REFERENCES LIVRO(COD_LIVRO),
190 PRIMARY KEY(COD_COMENTARIO)
191 );
192
193
194 DELIMITER //
195 CREATE TRIGGER UPDATE_AFTER_INSERT_TEXTO AFTER INSERT ON visualizacao_texto
196 FOR EACH ROW
197 BEGIN
198 DECLARE codigo DOUBLE;
199
200 select COD_TEXTO INTO codigo from TEXTO t join visualizacao_texto v on t.COD_TEXTO = v.COD_PUBLICACAO ORDER BY HORAVIS DESC LIMIT 1;
201 update TEXTO set VISUALIZACOES = VISUALIZACOES + 1 where COD_TEXTO = codigo;
202 END
203 //
204 DELIMITER ;
205
206 DELIMITER //
207 CREATE TRIGGER UPDATE_AFTER_INSERT_CAPITULO AFTER INSERT ON capitulo
208 FOR EACH ROW
209 BEGIN
210 DECLARE codigo DOUBLE;
211
212 select COD_LIVRO INTO codigo from LIVRO l join CAPITULO c on l.COD_LIVRO = C.COD_LIVRO ORDER BY DATA_UPLOAD DESC LIMIT 1;
213 update LIVRO set CAPITULOS = CAPITULOS + 1 where COD_LIVRO = codigo;
214 END
215 //
216 DELIMITER ;
217
218 DELIMITER //
219 CREATE TRIGGER UPDATE_AFTER_INSERT_LIVRO AFTER INSERT ON visualizacao_livro
220 FOR EACH ROW
221 BEGIN
222 DECLARE codigo DOUBLE;
223
224 select COD_LIVRO INTO codigo from LIVRO l join visualizacao_livro v on l.COD_LIVRO = v.COD_PUBLICACAO ORDER BY HORAVIS DESC LIMIT 1;
225 update LIVRO set VISUALIZACOES = VISUALIZACOES + 1 where COD_LIVRO = codigo;
226 END
227 //
228 DELIMITER ;