-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathScript SQL.txt
More file actions
310 lines (279 loc) · 9.37 KB
/
Copy pathScript SQL.txt
File metadata and controls
310 lines (279 loc) · 9.37 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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
-- Criação de todas as tabelas
CREATE TABLE IF NOT EXISTS usuarios (
id SERIAL PRIMARY KEY,
nome_completo VARCHAR(255) NOT NULL,
data_nasc DATE NOT NULL,
email VARCHAR(255) NOT NULL,
telefone VARCHAR(20),
nome_usuario VARCHAR(50) NOT NULL,
senha VARCHAR(255) NOT NULL,
idade INTEGER,
endereco_completo TEXT
);
CREATE TABLE IF NOT EXISTS endereco (
id SERIAL PRIMARY KEY,
rua VARCHAR(50) NOT NULL,
quadra VARCHAR(40) NOT NULL,
cidade VARCHAR(50) NOT NULL,
estado VARCHAR(50) NOT NULL,
complemento VARCHAR(30) NOT NULL,
usuarioId INTEGER,
CONSTRAINT fk_usuario_endereco
FOREIGN KEY (usuarioId)
REFERENCES usuarios(id)
ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS animais (
id SERIAL PRIMARY KEY,
nomeAnimal VARCHAR(255) NOT NULL,
especie VARCHAR(50) NOT NULL,
sexo VARCHAR(20) NOT NULL,
porte VARCHAR(50) NOT NULL,
idade VARCHAR(50),
temperamento VARCHAR(100),
saude VARCHAR(100),
sobreAnimal TEXT,
animalFoto BYTEA,
usuarioId INTEGER,
disponivel BOOLEAN DEFAULT TRUE,
CONSTRAINT fk_usuario_animais
FOREIGN KEY (usuarioId)
REFERENCES usuarios(id)
ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS favoritos (
id SERIAL PRIMARY KEY,
usuarioId INTEGER,
animalId INTEGER,
CONSTRAINT fk_usuario_favorito
FOREIGN KEY (usuarioId)
REFERENCES usuarios(id)
ON DELETE CASCADE,
CONSTRAINT fk_animal_favorito
FOREIGN KEY (animalId)
REFERENCES animais(id)
ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS adocao (
id SERIAL PRIMARY KEY,
dataAdocao DATE NOT NULL,
statusAdocao VARCHAR(50) NOT NULL,
animalId INTEGER,
usuarioId INTEGER,
CONSTRAINT fk_usuario_adocao
FOREIGN KEY (usuarioId)
REFERENCES usuarios(id)
ON DELETE CASCADE,
CONSTRAINT fk_animal_adocao
FOREIGN KEY (animalId)
REFERENCES animais(id)
ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS chat (
id SERIAL PRIMARY KEY,
usuario1 INTEGER,
usuario2 INTEGER,
CONSTRAINT fk_usuario1_chat
FOREIGN KEY (usuario1)
REFERENCES usuarios(id)
ON DELETE CASCADE,
CONSTRAINT fk_usuario2_chat
FOREIGN KEY (usuario2)
REFERENCES usuarios(id)
ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS mensagem (
id SERIAL PRIMARY KEY,
chatId INTEGER,
usuarioId INTEGER,
conteudo TEXT NOT NULL,
dataEnvio TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_chat_msg
FOREIGN KEY (chatId)
REFERENCES chat(id)
ON DELETE CASCADE,
CONSTRAINT fk_usuario_msg
FOREIGN KEY (usuarioId)
REFERENCES usuarios(id)
ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS visita(
id SERIAL PRIMARY KEY,
animalId INTEGER,
usuarioId INTEGER,
data_visita DATE NOT NULL,
CONSTRAINT fk_animal_visita
FOREIGN KEY (animalId)
REFERENCES animais(id),
CONSTRAINT fk_usuario_visita
FOREIGN KEY (usuarioId)
REFERENCES usuarios(id)
ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS historico_medico(
id SERIAL PRIMARY KEY,
animalId INTEGER,
doenças VARCHAR(300) NOT NULL,
CONSTRAINT fk_animal_historico
FOREIGN KEY (animalId)
REFERENCES animais(id)
ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS necessidades (
id SERIAL PRIMARY KEY,
animalId INTEGER,
objeto VARCHAR(200),
medicamentos VARCHAR(500),
CONSTRAINT fk_animal_necessidades
FOREIGN KEY (animalId)
REFERENCES animais(id)
ON DELETE CASCADE
);
----------------------------------------------------------------------
-- Criação da Procedure que calcula a idade
CREATE OR REPLACE PROCEDURE calcIdade_proc(data_nasc DATE, OUT idade INTEGER)
LANGUAGE plpgsql AS $$
BEGIN
idade := EXTRACT(YEAR FROM AGE(data_nasc));
END;
$$;
-- Criação da Procedure que forma o Endereço Completo
CREATE OR REPLACE PROCEDURE endereco_completo_proc(usuario_id INTEGER, OUT endereco_txt TEXT)
LANGUAGE plpgsql AS $$
BEGIN
SELECT CONCAT(rua, ', ', quadra, ', ', cidade, ', ', estado, ', ', complemento) INTO endereco_txt
FROM endereco
WHERE usuarioId = usuario_id;
END;
$$;
-- Procedure para atualizar a tabela usuarios com endereço e idade
CREATE OR REPLACE PROCEDURE atualizar_usuarios()
LANGUAGE plpgsql AS $$
DECLARE
rec RECORD;
idade_nova INTEGER;
endereco_novo TEXT;
BEGIN
FOR rec IN SELECT id, data_nasc FROM usuarios LOOP
-- Calcula a idade
CALL calcIdade_proc(rec.data_nasc, idade_nova);
-- Calcula o endereço completo
CALL endereco_completo_proc(rec.id, endereco_novo);
-- Atualiza a tabela usuarios
UPDATE usuarios
SET idade = idade_nova,
endereco_completo = endereco_novo
WHERE id = rec.id;
END LOOP;
END;
$$;
-----------------------------------------------------------------------------------------
-- Inserts de 5 valores nas tabelas --
-- Usuários:
INSERT INTO usuarios (nome_completo, data_nasc, email, telefone, nome_usuario, senha)
VALUES
('Pedro Henrique', '2008-08-15', 'PedroHH@hotmail.com', '9898989898', 'PedroH', 'P3dr0@@$'),
('Maria Silva', '2001-08-22', 'MariaS22@gmail.com', '9797979797', 'MariaS', 'S3nh@_Maria'),
('João Oliveira', '1993-08-30', 'JoaoO30@yahoo.com', '9696969696', 'JoaoO', 'Joao#2024'),
('Mateus Machado', '2008-08-15', 'MachadoMateus@gmail.com', '555555555', 'Machadinho', 'm@ch4d1nh0##'),
('Ana Paula', '1985-12-05', 'AnaPaula@example.com', '988888888', 'AnaP', 'AnaP@ss2024');
-- Endereços:
INSERT INTO endereco (rua, quadra, estado, cidade, complemento, usuarioId)
VALUES
('Rua das Acácias', 'Quadra 14', 'MG', 'Belo Horizonte', '12', 1),
('Rua das Flores', 'Quadra 7', 'RJ', 'Rio de Janeiro', '20', 2),
('Avenida Paulista', 'Avenida 3', 'SP', 'São Paulo', '50', 3),
('Quadra 14', 'Quadra 5', 'BH', 'Porto de Galinhas', '17', 4),
('Rua São José', 'Quadra 2', 'MG', 'Belo Horizonte', '21', 5);
-- Atualizar a tabela usuarios com idade e endereco completo
CALL atualizar_usuarios();
-- Animais:
INSERT INTO animais (nomeAnimal, especie, sexo, porte, idade, temperamento, saude, sobreAnimal, animalFoto, usuarioId, disponivel)
VALUES
('Bolinha', 'Cachorro', 'Fêmea', 'Pequeno', 'Adulto', 'Brincalhão, Amoroso', 'Vacinado', 'Bolinha é um cachorro pequeno e muito brincalhão. Adora estar perto de pessoas e brincar com brinquedos.', NULL, 1, TRUE),
('Sombra', 'Gato', 'Macho', 'Médio', 'Idoso', 'Calmo, Preguiçoso', 'Castrado, Vermifugado', 'Sombra é um gato idoso, muito calmo e preguiçoso. Passa a maior parte do tempo dormindo em lugares quentinhos.', NULL, 2, TRUE),
('Thor', 'Cachorro', 'Macho', 'Pequeno', 'Filhote', 'Guarda, Brincalhão', 'Vacinado, Castrado', 'Thor é um cachorro adulto, muito leal e protetor. Gosta de brincar, mas também de ficar alerta.', NULL, 3, TRUE),
('Spike', 'Cachorro', 'Macho', 'Grande', 'Adulto', 'Guarda, Amoroso', 'Vacinado, Castrado', 'Spike é um cachorro grande e amoroso que gosta de brincar.', NULL, 4, TRUE),
('Luna', 'Gato', 'Fêmea', 'Pequeno', 'Adulto', 'Curiosa, Afetuosa', 'Castrada', 'Luna é uma gata curiosa e muito afetuosa. Adora brincar com brinquedos e receber carinho.', NULL, 5, TRUE);
-- Favoritos:
INSERT INTO favoritos (usuarioId, animalId)
VALUES
(1, 1),
(1, 2),
(2, 3),
(3, 4),
(4, 5);
-- Adoção:
INSERT INTO adocao (dataAdocao, statusAdocao, animalId, usuarioId)
VALUES
('2024-08-01', 'Concluída', 1, 1),
('2024-08-15', 'Pendente', 2, 2),
('2024-09-01', 'Concluída', 3, 3),
('2024-09-10', 'Cancelada', 4, 4),
('2024-09-20', 'Pendente', 5, 5);
-- Chat:
INSERT INTO chat (usuario1, usuario2)
VALUES
(1, 2),
(2, 3),
(3, 4),
(4, 5),
(5, 1);
-- Mensagem:
INSERT INTO mensagem (chatId, usuarioId, conteudo, dataEnvio)
VALUES
(1, 1, 'Oi, tudo bem?', '2024-09-01 10:00:00'),
(1, 2, 'Tudo sim, e você?', '2024-09-01 10:05:00'),
(2, 2, 'Vamos marcar uma visita?', '2024-09-02 11:00:00'),
(3, 3, 'Olha esse animal que encontrei!', '2024-09-03 12:00:00'),
(4, 4, 'Preciso de informações sobre a adoção.', '2024-09-04 13:00:00');
-- Visita:
INSERT INTO visita (animalId, usuarioId, data_visita)
VALUES
(1, 1, '2024-08-10'),
(2, 2, '2024-08-20'),
(3, 3, '2024-09-05'),
(4, 4, '2024-09-15'),
(5, 5, '2024-09-25');
-- Histórico Médico:
INSERT INTO historico_medico (animalId, doenças)
VALUES
(1, 'Nenhuma'),
(2, 'Felicidade em dia'),
(3, 'Alergia leve'),
(4, 'Castrado recentemente'),
(5, 'Vermifugação');
-- Necessidades:
INSERT INTO necessidades (animalId, objeto, medicamentos)
VALUES
(1, 'Coleira', 'Nenhum'),
(2, 'Brinquedo', 'Vitaminas'),
(3, 'Cama', 'Anti-inflamatório'),
(4, 'Ração', 'Suplemento'),
(5, 'Arranhador', 'Nenhum');
------------------------------------------------------------------------------
-- View vw_detalhes_animal responsavél por apresentar os dados e informações dos pets
CREATE OR REPLACE VIEW vw_detalhes_animal AS
SELECT
a.id AS animal_id,
a.nomeAnimal,
a.especie,
a.sexo,
a.porte,
a.idade,
a.temperamento,
a.saude,
a.sobreAnimal,
CASE
WHEN a.animalFoto IS NOT NULL THEN 'Imagem Disponível'
ELSE 'Imagem Indisponível'
END AS animalFotoStatus,
a.usuarioId AS dono_id,
u.nome_completo AS dono_nome,
u.idade AS dono_idade,
u.endereco_completo AS dono_endereco,
a.disponivel
FROM
animais a
JOIN
usuarios u ON a.usuarioId = u.id;