· 10 years ago · Sep 14, 2016, 03:44 AM
1DROP DATABASE IF EXISTS PCC;
2CREATE DATABASE PCC;
3USE 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 COD_ENDERECO INT,
40 CNPJ_PJ CHAR(15),
41 CPF_PF CHAR(11),
42 FOREIGN KEY (COD_ENDERECO)
43 REFERENCES ENDERECO(COD_ENDERECO),
44 FOREIGN KEY (CNPJ_PJ)
45 REFERENCES PESSOA_JURIDICA(CNPJ),
46 FOREIGN KEY (CPF_PF)
47 REFERENCES PESSOA_FISICA(CPF),
48 PRIMARY KEY(LOGIN)
49);
50
51 CREATE TABLE TEXTO(
52 COD_TEXTO INT AUTO_INCREMENT,
53 NOME_TEXTO VARCHAR(60) NOT NULL,
54 DESCRICAO TEXT NOT NULL,
55 GENERO_TEXTUAL VARCHAR(30) NOT NULL,
56 DATA_UPLOAD DATE NOT NULL,
57 CONTEUDO TEXT NOT NULL,/* CAMINHO LOCAL DO LIVRO*/
58 ESTADO_TEXTO BOOL,/* TRUE = ACABADO; FALSE= INACABADO*/
59 ENDRECO_CAPA TEXT,
60 VISUALIZACOES INT NOT NULL,
61 DATA_ALTERACAO DATETIME NOT NULL,
62 LOGIN_USUARIO VARCHAR(60) NOT NULL,
63 FOREIGN KEY(LOGIN_USUARIO) REFERENCES USUARIO(LOGIN),
64 PRIMARY KEY(COD_TEXTO)
65);
66
67 CREATE TABLE LIVRO (
68 COD_LIVRO INT AUTO_INCREMENT,
69 NOME_LIVRO VARCHAR(30) NOT NULL,
70 DESCRICAO TEXT NOT NULL,
71 GENERO_TEXTUAL VARCHAR(30) NOT NULL,
72 DATA_UPLOAD DATE NOT NULL,
73 CONTEUDO TEXT NOT NULL,/* CAMINHO LOCAL DO LIVRO*/
74 ESTADO_LIVRO BOOL NOT NULL,/* TRUE = ACABADO; FALSE= INACABADO*/
75 ANO_PUBLICACAO CHAR(4), /*lIVROS FEITO POR FÃS QUE NÃO SÃO PUBLICADOS*/
76 ENDERECO_CAPA TEXT,
77 VISUALIZACOES INT NOT NULL,
78 DATA_ALTERACAO DATETIME,
79 LOGIN_USUARIO VARCHAR(60) NOT NULL,
80 FOREIGN KEY (LOGIN_USUARIO)
81 REFERENCES USUARIO(LOGIN),
82 PRIMARY KEY (COD_LIVRO)
83);
84
85 CREATE TABLE VISUALIZACAO_TEXTO(
86 COD_PUBLICACAO INT NOT NULL,
87 HORAVIS DATETIME NOT NULL,
88 FOREIGN KEY(COD_PUBLICACAO) REFERENCES TEXTO(COD_TEXTO)
89);
90
91 CREATE TABLE VISUALIZACAO_LIVRO(
92 COD_PUBLICACAO INT NOT NULL,
93 HORAVIS DATETIME NOT NULL,
94 FOREIGN KEY(COD_PUBLICACAO) REFERENCES LIVRO(COD_LIVRO)
95);
96
97 CREATE TABLE LIVRO_USUARIO( /*N-N*/ /*LIVROS ADORADOS PELOS USUARIOS*/
98 LOGIN VARCHAR(60) NOT NULL,
99 COD_LIVRO INT NOT NULL,
100 FOREIGN KEY(LOGIN)
101 REFERENCES USUARIO(LOGIN),
102 FOREIGN KEY(COD_LIVRO)
103 REFERENCES LIVRO(COD_LIVRO),
104 PRIMARY KEY(LOGIN, COD_LIVRO)
105);
106
107 CREATE TABLE TEXTO_USUARIO( /*N-N*/ /*TEXTOS ADORADOS PELOS USUARIOS*/
108 LOGIN VARCHAR(60) NOT NULL,
109 COD_TEXTO INT NOT NULL,
110 FOREIGN KEY(LOGIN)
111 REFERENCES USUARIO(LOGIN),
112 FOREIGN KEY(COD_TEXTO)
113 REFERENCES TEXTO(COD_TEXTO),
114 PRIMARY KEY(LOGIN, COD_TEXTO)
115);
116
117 CREATE TABLE ESTANTE( /* N-N */
118 LOGIN INT NOT NULL,
119 COD_LIVRO INT,
120 COD_TEXTO INT,
121 FOREIGN KEY(LOGIN)
122 REFERENCES USUARIO(LOGIN),
123 FOREIGN KEY(COD_LIVRO)
124 REFERENCES LIVRO(COD_LIVRO),
125 FOREIGN KEY(COD_TEXTO)
126 REFERENCES TEXTO(COD_TEXTO)
127);
128
129 CREATE TABLE GENERO(
130 COD_GENERO INT AUTO_INCREMENT,
131 NOME_GENERO VARCHAR(30),
132 PRIMARY KEY(COD_GENERO)
133)ENGINE = MYISAM;
134
135 CREATE TABLE TOTAL_GENERO_USUARIO( /* N-N */ /* Generos que o usuario gostou */
136 LOGIN INT NOT NULL,
137 COD_GENERO INT NOT NULL,
138 FOREIGN KEY(LOGIN)
139 REFERENCES USUARIO(LOGIN),
140 FOREIGN KEY(COD_GENERO)
141 REFERENCES GENERO(COD_GENERO),
142 PRIMARY KEY (LOGIN, COD_GENERO)
143);
144
145 CREATE TABLE TOTAL_GENERO_LIVRO(/*N-N*/
146 COD_GENERO INT NOT NULL,
147 COD_LIVRO INT NOT NULL,
148 FOREIGN KEY(COD_LIVRO)
149 REFERENCES LIVRO(COD_LIVRO),
150 FOREIGN KEY(COD_GENERO)
151 REFERENCES GENERO(COD_GENERO),
152 PRIMARY KEY(COD_GENERO, COD_LIVRO)
153);
154
155CREATE TABLE COMENTARIO(
156 COD_COMENTARIO INT AUTO_INCREMENT,
157 CONTEUDO TEXT NOT NULL,
158 DATA_UPLOAD DATE NOT NULL,
159 LOGIN_USUARIO VARCHAR(60) NOT NULL,
160 COD_TEXTO INT,
161 COD_LIVRO INT,
162 FOREIGN KEY (COD_TEXTO)
163 REFERENCES TEXTO(COD_TEXTO),
164 FOREIGN KEY (LOGIN_USUARIO)
165 REFERENCES USUARIO(LOGIN),
166 FOREIGN KEY (COD_LIVRO)
167 REFERENCES LIVRO(COD_LIVRO),
168 PRIMARY KEY(COD_COMENTARIO)
169);
170
171DELIMITER //
172CREATE TRIGGER UPDATE_AFTER_INSERT_TEXTO AFTER INSERT ON visualizacao_texto
173FOR EACH ROW
174BEGIN
175 DECLARE codigo DOUBLE;
176
177 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;
178 update TEXTO set VISUALIZACOES = VISUALIZACOES + 1 where COD_TEXTO = codigo;
179END
180 //
181DELIMITER ;
182
183DELIMITER //
184CREATE TRIGGER UPDATE_AFTER_INSERT_LIVRO AFTER INSERT ON visualizacao_livro
185FOR EACH ROW
186BEGIN
187 DECLARE codigo DOUBLE;
188
189 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;
190 update LIVRO set VISUALIZACOES = VISUALIZACOES + 1 where COD_LIVRO = codigo;
191END
192 //
193DELIMITER ;