CREATE TABLE usuarios ( id_usuario INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(100) NOT NULL, email VARCHAR(100) NOT NULL UNIQUE, cpf VARCHAR(14) UNIQUE, telefone VARCHAR(20), tipo_usuario ENUM('cidadao', 'servidor', 'admin'), criado_em DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE usuarios_senhas ( id_senha INT AUTO_INCREMENT PRIMARY KEY, id_usuario INT NOT NULL, hash_senha VARCHAR(255) NOT NULL, atualizado_em DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario) ON DELETE CASCADE ); CREATE TABLE categorias_solicitacoes ( id_categoria INT AUTO_INCREMENT PRIMARY KEY, nome_categoria VARCHAR(100) NOT NULL ); CREATE TABLE solicitacoes ( id_solicitacao INT AUTO_INCREMENT PRIMARY KEY, id_usuario INT NOT NULL, id_categoria INT NOT NULL, titulo VARCHAR(150) NOT NULL, descricao TEXT NOT NULL, prioridade ENUM('baixa', 'média', 'alta'), anonima BOOLEAN DEFAULT FALSE, status ENUM('recebida', 'analise', 'andamento', 'concluida', 'indeferida'), latitude VARCHAR(30), longitude VARCHAR(30), data_envio DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario) ON DELETE CASCADE, FOREIGN KEY (id_categoria) REFERENCES categorias_solicitacoes(id_categoria) ON DELETE SET NULL ); CREATE TABLE respostas_solicitacoes ( id_resposta INT AUTO_INCREMENT PRIMARY KEY, id_solicitacao INT NOT NULL, id_usuario INT NOT NULL, mensagem TEXT NOT NULL, data_resposta DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (id_solicitacao) REFERENCES solicitacoes(id_solicitacao) ON DELETE CASCADE, FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario) ON DELETE CASCADE ); CREATE TABLE notificacoes ( id_notificacao INT AUTO_INCREMENT PRIMARY KEY, id_usuario INT NOT NULL, mensagem TEXT NOT NULL, lida BOOLEAN DEFAULT FALSE, criada_em DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario) ON DELETE CASCADE ); CREATE TABLE avisos_publicos ( id_aviso INT AUTO_INCREMENT PRIMARY KEY, titulo VARCHAR(150) NOT NULL, conteudo TEXT NOT NULL, publicado_por INT NOT NULL, publicado_em DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (publicado_por) REFERENCES usuarios(id_usuario) ON DELETE SET NULL );
✅ Observações importantes:
ENUM
BOOLEAN
ON DELETE
CASCADE
SET NULL
id_categoria
publicado_por
NULL
RESTRICT
NOT NULL
-- ? usuarios - 3 usuários INSERT INTO usuarios (nome, email, cpf, telefone, tipo_usuario) VALUES ('João da Silva', 'joao@email.com', '123.456.789-00', '(11) 91234-5678', 'cidadao'), ('Maria Oliveira', 'maria@email.com', '987.654.321-00', '(21) 99876-5432', 'servidor'), ('Carlos Souza', 'carlos@email.com', NULL, NULL, 'admin'); ________________________________________ -- ? usuarios_senhas – senhas para os 3 usuários INSERT INTO usuarios_senhas (id_usuario, hash_senha) VALUES (1, '$2y$10$hash_exemplo_1'), (2, '$2y$10$hash_exemplo_2'), (3, '$2y$10$hash_exemplo_3'); ________________________________________ -- ?️ categorias_solicitacoes – 4 categorias INSERT INTO categorias_solicitacoes (nome_categoria) VALUES ('Buraco na rua'), ('Iluminação'), ('Saúde'), ('Educação'); ________________________________________ -- ? solicitacoes – 3 solicitações INSERT INTO solicitacoes ( id_usuario, id_categoria, titulo, descricao, prioridade, anonima, status, latitude, longitude ) VALUES (1, 1, 'Buraco em frente à escola', 'Há um buraco grande que está dificultando o tráfego.', 'alta', FALSE, 'recebida', '-23.550520', '-46.633308'), (1, 2, 'Poste sem luz', 'O poste da esquina está apagado há dias.', 'média', TRUE, 'analise', '-23.551000', '-46.632000'), (2, 3, 'Falta de médicos no posto', 'Não há pediatra no posto de saúde do bairro.', 'alta', FALSE, 'andamento', NULL, NULL); ________________________________________ -- ? respostas_solicitacoes – 2 respostas de um servidor INSERT INTO respostas_solicitacoes (id_solicitacao, id_usuario, mensagem) VALUES (1, 2, 'A solicitação foi encaminhada para o setor de obras.'), (2, 2, 'A equipe de iluminação fará a inspeção nesta semana.'); ________________________________________ -- ? notificacoes – 2 notificações para João INSERT INTO notificacoes (id_usuario, mensagem) VALUES (1, 'Sua solicitação sobre o buraco na rua foi recebida.'), (1, 'Sua solicitação sobre iluminação está em análise.'); ________________________________________ -- ? avisos_publicos - 2 avisos criados por Carlos (admin) INSERT INTO avisos_publicos (titulo, conteudo, publicado_por) VALUES ('Interrupção de energia programada', 'Informamos que haverá manutenção elétrica no dia 25 de maio.', 3), ('Campanha de vacinação contra gripe', 'A campanha de vacinação ocorrerá de 1 a 15 de junho nas UBSs.', 3);
Script de remoção (DROP TABLE) para reiniciar os dados.
-- Desabilita verificação de chave estrangeira temporariamente (necessário para evitar erros) SET FOREIGN_KEY_CHECKS = 0; DROP TABLE IF EXISTS avisos_publicos; DROP TABLE IF EXISTS notificacoes; DROP TABLE IF EXISTS respostas_solicitacoes; DROP TABLE IF EXISTS solicitacoes; DROP TABLE IF EXISTS categorias_solicitacoes; DROP TABLE IF EXISTS usuarios_senhas; DROP TABLE IF EXISTS usuarios; -- Reabilita verificação de chave estrangeira SET FOREIGN_KEY_CHECKS = 1;