· 10 years ago · Sep 14, 2016, 03:36 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 PRIMARY KEY(LOGIN, COD_LIVRO)
101);
102
103 CREATE TABLE TEXTO_USUARIO( /*N-N*/ /*TEXTOS ADORADOS PELOS USUARIOS*/
104 LOGIN VARCHAR(60) NOT NULL,
105 COD_TEXTO INT NOT NULL,
106 PRIMARY KEY(LOGIN, COD_TEXTO)
107);
108
109 CREATE TABLE ESTANTE( /* N-N */
110 LOGIN INT NOT NULL,
111 COD_LIVRO INT,
112 COD_TEXTO INT
113);
114
115 CREATE TABLE GENERO(
116 COD_GENERO INT AUTO_INCREMENT,
117 NOME_GENERO VARCHAR(30),
118 PRIMARY KEY(COD_GENERO)
119)ENGINE = MYISAM;
120
121 CREATE TABLE TOTAL_GENERO_USUARIO( /* N-N */ /* Generos que o usuario gostou */
122 LOGIN INT NOT NULL,
123 COD_GENERO INT NOT NULL,
124 PRIMARY KEY (LOGIN, COD_GENERO)
125);
126
127 CREATE TABLE TOTAL_GENERO_LIVRO(/*N-N*/
128 COD_GENERO INT NOT NULL,
129 COD_LIVRO INT NOT NULL,
130 PRIMARY KEY(COD_GENERO, COD_LIVRO)
131);
132
133CREATE TABLE COMENTARIO(
134 COD_COMENTARIO INT AUTO_INCREMENT,
135 CONTEUDO TEXT NOT NULL,
136 DATA_UPLOAD DATE NOT NULL,
137 LOGIN_USUARIO VARCHAR(60) NOT NULL,
138 COD_TEXTO INT,
139 COD_LIVRO INT,
140 FOREIGN KEY (COD_TEXTO)
141 REFERENCES TEXTO(COD_TEXTO),
142 FOREIGN KEY (LOGIN_USUARIO)
143 REFERENCES USUARIO(LOGIN),
144 FOREIGN KEY (COD_LIVRO)
145 REFERENCES LIVRO(COD_LIVRO),
146 PRIMARY KEY(COD_COMENTARIO)
147);
148
149DELIMITER //
150CREATE TRIGGER UPDATE_AFTER_INSERT_TEXTO AFTER INSERT ON visualizacao_texto
151FOR EACH ROW
152BEGIN
153 DECLARE codigo DOUBLE;
154
155 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;
156 update TEXTO set VISUALIZACOES = VISUALIZACOES + 1 where COD_TEXTO = codigo;
157END
158 //
159DELIMITER ;
160
161DELIMITER //
162CREATE TRIGGER UPDATE_AFTER_INSERT_LIVRO AFTER INSERT ON visualizacao_livro
163FOR EACH ROW
164BEGIN
165 DECLARE codigo DOUBLE;
166
167 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;
168 update LIVRO set VISUALIZACOES = VISUALIZACOES + 1 where COD_LIVRO = codigo;
169END
170 //
171DELIMITER ;