-- Enum deve ser criado antes de ser usado
CREATE TYPE Sexo AS ENUM ('Masculino', 'Feminino');
CREATE TABLE Cargo (
Cod_Cargo SERIAL PRIMARY KEY,
Nome_Cargo VARCHAR(30) NOT NULL UNIQUE,
Qtde_Vagas INTEGER NOT NULL DEFAULT 9,
CHECK (Nome_Cargo IN ('Prefeito', 'Vereador'))
);
CREATE TABLE Partido (
Num_Partido INTEGER PRIMARY KEY,
Sigla VARCHAR(4) NOT NULL UNIQUE,
Nome VARCHAR(50) NOT NULL UNIQUE,
Dt_Criacao DATE
);
CREATE TABLE Candidato (
Num_Cand INTEGER PRIMARY KEY,
Nome VARCHAR(40) NOT NULL,
Dt_Nasc DATE,
Sexo Sexo DEFAULT 'Masculino',
CHECK (Dt_Nasc <= CURRENT_DATE - INTERVAL '18 years')
);
CREATE TABLE Voto (
Codigo_Cargo INTEGER NOT NULL,
Num_Cand INTEGER NOT NULL
);
CREATE TABLE Pessoa (
titulo VARCHAR(12) UNIQUE,
Nome VARCHAR(50) NOT NULL,
Comparecimento CHAR(3)
);
-- Renomeando coluna
ALTER TABLE Partido RENAME COLUMN Dt_Criacao TO Dt_Constituicao;
-- Modificando tipo e nome da tabela Pessoa
ALTER TABLE Pessoa ALTER COLUMN Comparecimento TYPE BOOLEAN USING (Comparecimento = 'SIM');
ALTER TABLE Pessoa ALTER COLUMN Comparecimento SET DEFAULT FALSE;
ALTER TABLE Pessoa ADD COLUMN Dt_Nasc DATE NOT NULL;
ALTER TABLE Pessoa RENAME TO Eleitor;
INSERT INTO Cargo (Nome_Cargo, Qtde_Vagas) VALUES ('Prefeito', 1);
INSERT INTO Cargo (Nome_Cargo, Qtde_Vagas) VALUES ('Vereador', 9);
INSERT INTO Partido VALUES (15, 'PT', 'Partido dos Trabalhadores', '2000-05-10');
INSERT INTO Partido VALUES (45, 'PSDB', 'Partido da Social Democracia Brasileira', '1990-09-15');
INSERT INTO Candidato VALUES (100, 'Lucas Matos', '1990-02-03', 'Masculino');
INSERT INTO Candidato VALUES (101, 'Ana Lúcia', '1985-06-15', 'Feminino');
INSERT INTO Voto VALUES (1, 100);
INSERT INTO Voto VALUES (1, 101);
INSERT INTO Eleitor VALUES ('123456789012', 'João Gabiel', false, '2000-01-01');
INSERT INTO Eleitor VALUES ('987654321098', 'Mariana', true, '2002-07-14');
SELECT * FROM Cargo;
SELECT * FROM Partido;
SELECT * FROM Candidato;
SELECT * FROM Voto;
SELECT * FROM Eleitor;