-- IMOBILIARIA

create table predios(
codigo integer not null,
descricao varchar(100) not null,
endereco varchar(100) not null,
primary key (codigo),
check (codigo>0));

create table apartamentos(
numero integer not null,
descricao varchar(100) not null,
metragem double precision not null,
predio integer not null,
primary key (numero,predio),
foreign key (predio) references predios (codigo) on delete cascade);

create table pessoas(
codigo integer not null,
nome varchar(100) not null,
primary key (codigo));

create table proprietarios (
apartamento_numero integer not null,
apartamento_predio integer not null,
pessoa integer not null,
porcentagem double precision not null,
primary key (apartamento_numero,apartamento_predio, pessoa),
foreign key (apartamento_numero,apartamento_predio) 
    references apartamentos (numero,predio),
foreign key (pessoa) references pessoas (codigo),
check (porcentagem>0));

create table alugueis (
numero bigint not null,
dia smallint not null,
valor numeric(10,2) not null,
adm numeric(4,2) not null,
juros numeric(4,2) not null,
multa numeric(4,2) not null,
data_inicio date not null,
duracao smallint not null,
apartamento_numero integer not null,
apartamento_predio integer not null,
pessoa integer not null,
primary key (numero),
foreign key (apartamento_numero, apartamento_predio) 
    references apartamentos (numero,predio),
foreign key (pessoa) references pessoas (codigo),
check(duracao>0),
check (numero>0),
check (valor>=0),
check (adm>=0),
check (juros>=0),
check (multa>=0)
);

create table recebimentos (
codigo bigint not null,
vencimento date not null,
pagamento date,
valor numeric (10,2) not null,
aluguel bigint not null,
primary key (codigo),
foreign key (aluguel) references alugueis (numero),
check (codigo>0 and valor>0));

