79 lines
3.0 KiB
SQL
79 lines
3.0 KiB
SQL
DROP TABLE IF EXISTS bem_candidato CASCADE;
|
|
DROP TABLE IF EXISTS candidato_mapping CASCADE;
|
|
DROP TABLE IF EXISTS rede_social CASCADE;
|
|
DROP TABLE IF EXISTS candidato CASCADE;
|
|
DROP TABLE IF EXISTS partido CASCADE;
|
|
|
|
CREATE TABLE candidato (
|
|
idcandidato UUID NOT NULL PRIMARY KEY,
|
|
cpf VARCHAR(11),
|
|
nome VARCHAR(255) NOT NULL,
|
|
apelido VARCHAR(255),
|
|
datanascimento TIMESTAMPTZ,
|
|
email TEXT,
|
|
sexo CHAR(15),
|
|
estadocivil VARCHAR(50),
|
|
escolaridade VARCHAR(50),
|
|
ocupacao VARCHAR(150)
|
|
);
|
|
CREATE INDEX idx_candidato_nome ON candidato (nome);
|
|
CREATE INDEX idx_candidato_apelido ON candidato (apelido);
|
|
|
|
-- Each candidato (idcandidato, cpf, nome) will be mapped to a (sqcandidato, ano, tipo_eleicao, sg_uf, cargo, resultado)
|
|
CREATE TABLE candidato_mapping (
|
|
idcandidato UUID NOT NULL,
|
|
cpf VARCHAR(11),
|
|
nome VARCHAR(255) NOT NULL,
|
|
apelido VARCHAR(255),
|
|
sqcandidato TEXT,
|
|
ano INT NOT NULL,
|
|
tipoeleicao VARCHAR(50),
|
|
siglauf VARCHAR(2),
|
|
nomeue VARCHAR(100),
|
|
cargo VARCHAR(50),
|
|
sgpartido VARCHAR(10),
|
|
nrcandidato VARCHAR(20),
|
|
resultado VARCHAR(50),
|
|
CONSTRAINT pk_candidato_mapping PRIMARY KEY (idcandidato, ano, siglauf, nomeue, cargo, nrcandidato, resultado),
|
|
CONSTRAINT fk_candidato_mapping_candidato FOREIGN KEY (idcandidato) REFERENCES candidato(idcandidato) ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
CREATE INDEX idx_candidato_mapping_cpf ON candidato_mapping (cpf);
|
|
CREATE INDEX idx_candidato_mapping_nome ON candidato_mapping (nome);
|
|
CREATE INDEX idx_candidato_mapping_apelido ON candidato_mapping (apelido);
|
|
CREATE INDEX idx_candidato_mapping_ano ON candidato_mapping (ano);
|
|
CREATE INDEX idx_candidato_mapping_sqcandidato ON candidato_mapping (sqcandidato);
|
|
|
|
---- Table for storing assets of candidates
|
|
CREATE TABLE bem_candidato (
|
|
idcandidato UUID NOT NULL,
|
|
ano INT NOT NULL,
|
|
ordembem INT,
|
|
tipobem VARCHAR(150),
|
|
descricao VARCHAR(500),
|
|
valor NUMERIC(20, 2),
|
|
CONSTRAINT fk_bem_candidato_candidato FOREIGN KEY (idcandidato) REFERENCES candidato(idcandidato) ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
ALTER TABLE bem_candidato ADD CONSTRAINT pk_bem_candidato PRIMARY KEY (idcandidato, ano, ordembem);
|
|
CREATE INDEX idx_bem_candidato_idcandidato ON bem_candidato (idcandidato);
|
|
CREATE INDEX idx_bem_candidato_valor ON bem_candidato (valor);
|
|
|
|
---- Table for storing social media links of candidates
|
|
CREATE TABLE rede_social (
|
|
idcandidato UUID NOT NULL,
|
|
rede VARCHAR(50) NOT NULL,
|
|
siglauf VARCHAR(2),
|
|
ano INT NOT NULL,
|
|
link TEXT NOT NULL,
|
|
CONSTRAINT pk_rede_social PRIMARY KEY (idcandidato, rede, siglauf, ano),
|
|
CONSTRAINT fk_rede_social_candidato FOREIGN KEY (idcandidato) REFERENCES candidato(idcandidato) ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
CREATE INDEX idx_rede_social_idcandidato ON rede_social (idcandidato);
|
|
|
|
---- Table for storing party information
|
|
CREATE TABLE partido (
|
|
sigla VARCHAR(10) NOT NULL PRIMARY KEY,
|
|
nome VARCHAR(255) NOT NULL,
|
|
numero INT NOT NULL
|
|
);
|
|
CREATE INDEX idx_partido_nome ON partido (nome);
|
|
CREATE INDEX idx_partido_numero ON partido (numero); |