--1 - produto = {#codproduto, nomeproduto, valor, quantidade,
-- @codmarca, @codtipo}  JÁ INSERI

create table produto(
	codproduto serial primary key,      --ok
	nomeproduto varchar(60) not null,   --ok
	valor numeric(10,2) not null,       --ok
	quantidade numeric(10,2) not null,  --ok
	codmarca integer not null,          --ok
	codtipo integer not null  	    --ok
);

--2 - marca = {#codmarca, nomemarca} JÁ INSERI

create table marca(
	codmarca serial primary key,          --ok
	nomemarca varchar(60) not null unique --ok
);

-- Adicionando a chave estrangeira na tabela produto
alter table produto add constraint fk_codmarca foreign key (codmarca)
references marca(codmarca) match simple on update cascade on delete cascade;

--3 - tipo = {#codtipo, nometipo} JÁ INSERI

create table tipo(
	codtipo serial primary key,           --ok
	nometipo varchar(60) not null unique  --ok
);

-- Adicionando a chave estrangeira na tabela produto
alter table produto add constraint fk_codtipo foreign key (codtipo)
references tipo(codtipo) match simple on update cascade on delete cascade;

--4 - cliente = {#codcliente, nomecliente, @codsexo,
--@codcidade, @codrua, @codbairro, @codcep, numerocasa} JÁ INSERI

create table cliente(
	codcliente serial primary key,     --ok
	nomecliente varchar(60) not null,  --ok
	codsexo integer not null,          --ok
	codcidade integer not null,        --ok
	codrua integer not null,           --ok
	codbairro integer not null,        --ok
	codcep integer not null,           --ok
	numerocasa varchar(5) not null     --ok
);
--5 - sexo = {#codsexo, nomesexo} JÁ INSERI

create table sexo(
	codsexo serial primary key,         --ok
	nomesexo varchar(9) not null unique --ok
);

-- Adicionando a chave estrangeira na tabela cliente
alter table cliente add constraint fk_codsexo foreign key (codsexo)
references sexo(codsexo) match simple on update cascade on delete cascade;

--6 - cidade = {#codcidade, nomecidade, @coduf} JÁ INSERI

create table cidade(
	codcidade serial primary key,          --ok
	nomecidade varchar(60) not null unique,--ok
	coduf integer not null                 --ok
);

alter table cliente add constraint fk_codcidade foreign key (codcidade) references cidade(codcidade)
match simple on update cascade on delete cascade;

--7 - uf = {#coduf, nomeuf, sigla} JÁ INSERI

create table uf(
	coduf serial primary key,             --ok
	nomeuf varchar(60) not null unique,   --ok
	sigla char(2) not null unique         --ok
);

alter table cidade add constraint fk_coduf foreign key (coduf) references uf(coduf) match simple
on update cascade on delete cascade;          --ok

--8 - rua = {#codrua, nomerua} JÁ INSERI

create table rua(
	codrua serial primary key,            --ok
	nomerua varchar(60) not null unique   --ok
);

alter table cliente add constraint fk_codrua foreign key (codrua) references rua(codrua) match simple
on delete cascade on update cascade;          --ok

--9 - bairro = {#codbairro, nomebairro} JÁ INSERI

create table bairro(
	codbairro serial primary key,          --ok
	nomebairro varchar(60) not null unique --ok
);

alter table cliente add constraint fk_codbairro foreign key (codbairro) references bairro(codbairro)
match simple on update cascade on delete cascade;  --ok

--10 - cep = {#codcep, numerocep} JÁ INSERI
create table cep(
	codcep serial primary key,        --ok
	numerocep char(9) not null unique --ok
);
alter table cliente add constraint fk_codcep foreign key (codcep) references cep(codcep)
match simple on update cascade on delete cascade; --ok

--11 - telefone = {#codtelefone, numerotel} JÁ INSERI

create table telefone(
	codtelefone serial primary key,       --ok
	numerotel varchar(14) not null unique --ok 
);

--12 - itenstelefonecliente = {#(@codcliente, @codtelefone),
--@codtipotel} JÁ INSERI

create table itenstelefonecliente(
	codcliente integer not null,  --ok
	codtelefone integer not null, --ok
	codtipotel integer not null   --ok
);

--Chave primária composta

alter table itenstelefonecliente add constraint pk_teste primary key (codcliente, codtelefone); --ok

alter table itenstelefonecliente add constraint fk_codclientetel foreign key (codcliente) references 
cliente(codcliente) match simple on update cascade on delete cascade; --ok

alter table itenstelefonecliente add constraint fk_codtelefone foreign key (codtelefone) references 
telefone(codtelefone) match simple on update cascade on delete cascade; --ok

--13 - tipotel = {#codtipotel, nometipotel} JÁ INSERI

create table tipotel(
	codtipotel serial primary key, --ok
	nometipotel varchar(60) not null unique --ok
);

alter table itenstelefonecliente add constraint fk_codtipotel foreign key (codtipotel) references 
tipotel(codtipotel) match simple on update cascade on delete cascade; --ok

--14 - venda = {#codvenda, datavenda, @codcliente, 
--@codfuncionario}

create table venda(
	codvenda serial primary key,  --ok
	datavenda date not null,      --ok
	codcliente integer not null,  --ok
	codfuncionario integer not null  --ok
);

alter table venda add constraint fk_codclientevenda foreign key (codcliente) references 
cliente(codcliente) match simple on update cascade on delete cascade; --ok

--15 - itensvendaproduto = {#(@codvenda, @codproduto), quantv,
--valorv}

create table itensvendaproduto(
	codvenda integer not null,    --ok
	codproduto integer not null,  --ok
	quantv numeric(10,2) not null,--ok
	valorv numeric(10,2) not null --ok
);

--Chave primária composta
alter table itensvendaproduto add constraint pk_vendaproduto primary key(codvenda,codproduto); --ok

--Chaves estrageiras
alter table itensvendaproduto add constraint fk_codvenda foreign key (codvenda) references 
venda(codvenda) match simple on update cascade on delete cascade; --ok

alter table itensvendaproduto add constraint fk_codprodutovenda foreign key (codproduto) references 
produto(codproduto) match simple on update cascade on delete cascade; --ok

--16 - parcelavenda = {#codparcela, @codvenda, valorparcela,
--vencimento, @codsituacao}

create table parcelavenda(
	codparcela serial primary key,        --ok
	codvenda integer not null,            --ok
	valorparcela numeric(10,2) not null,  --ok
	vencimento date not null,             --ok
	codsituacao integer not null          --ok
);

alter table parcelavenda add constraint fk_codvendaparcela foreign key (codvenda) references 
venda(codvenda) match simple on update cascade on delete cascade;

--17 - situacao = {#codsituacao, nomesituacao} -- JÁ INSERI

create table situacao(
	codsituacao serial primary key,          --ok
	nomesituacao varchar(60) not null unique --ok
);

alter table parcelavenda add constraint fk_codsituacaoparcela foreign key (codsituacao) references 
situacao(codsituacao) match simple on update cascade on delete cascade; --ok

--18 - fornecedor = {#codfornecedor, nomefornecedor, cnpj,
--@codrua, @codcidade, @codbairro, @codcep, numero} JÁ INSERI

create table fornecedor(
	codfornecedor serial primary key,    --ok
	nomefornecedor varchar(60) not null, --ok
	cnpj char(14) not null unique,        --ok
	codrua integer not null,             --ok
	codcidade integer not null,          --ok
	codbairro integer not null,          --ok
	codcep integer not null,             --ok
	numero varchar(10) not null          --ok
);

alter table fornecedor add constraint fk_codruafornecedor foreign key (codrua) references 
rua(codrua) match simple on update cascade on delete cascade;   --ok

alter table fornecedor add constraint fk_codcidadefornecedor foreign key (codcidade) references 
cidade(codcidade) match simple on update cascade on delete cascade;  --ok

alter table fornecedor add constraint fk_codbairrofornecedor foreign key (codbairro) references 
bairro(codbairro) match simple on update cascade on delete cascade;  --ok

alter table fornecedor add constraint fk_codcepfornecedor foreign key (codcep) references 
cep(codcep) match simple on update cascade on delete cascade;    --ok

--19 - itenstelefonefornecedor = {#(@codfornecedor,
--@codtelefone), @codtipotel} JÁ INSERI

create table itenstelefonefornecedor(
	codfornecedor integer not null,  --ok
	codtelefone integer not null,    --ok
	codtipotel integer not null      --ok
);

alter table itenstelefonefornecedor add constraint pk_itenstelfornecedor 
primary key(codfornecedor, codtelefone); --ok

alter table itenstelefonefornecedor add constraint fk_codfornecedortel foreign key (codfornecedor) 
references fornecedor(codfornecedor) match simple on update cascade on delete cascade; --ok

alter table itenstelefonefornecedor add constraint fk_codtelefonetel foreign key (codtelefone) 
references telefone(codtelefone) match simple on update cascade on delete cascade;  --ok

alter table itenstelefonefornecedor add constraint fk_codtipotelforn foreign key (codtipotel) 
references tipotel(codtipotel) match simple on update cascade on delete cascade;  --ok

--20 - compra = {#codcompra, datacompra, @codfornecedor,
--@codfuncionario}

create table compra(
	codcompra serial primary key,   --ok
	datacompra date not null,       --ok
	codfornecedor integer not null, --ok
	codfuncionario integer not null --ok
);

alter table compra add constraint fk_codfornecedorcompra foreign key (codfornecedor) 
references fornecedor(codfornecedor) match simple on update cascade on delete cascade;

--21 - itenscomprafornecedor = {#(@codcompra, @codfornecedor),
--quantc, valorc}

create table intenscomprafornecedor(
	codcompra integer not null,     --ok
	codfornecedor integer not null, --ok
	quantc numeric(10,2) not null,  --ok
	valorc numeric(10,2) not null   --ok
);

alter table intenscomprafornecedor add constraint pk_itenscompra primary key(codcompra,codfornecedor);

alter table intenscomprafornecedor add constraint fk_codfornecedorforn foreign key (codfornecedor) 
references fornecedor(codfornecedor) match simple on update cascade on delete cascade;

alter table intenscomprafornecedor add constraint fk_codcompraforn foreign key (codcompra) 
references compra(codcompra) match simple on update cascade on delete cascade;

--22 - parcelacompra = {#codparcelacompra, @codcompra, 
--valorparcelacompra, vencimentocompra, @codsituacao}

create table parcelacompra(
	codparcelacompra serial primary key,       --ok
	codcompra integer not null,                --ok
	valorparcelacompra numeric(10,2) not null, --ok
	vencimentocompra date not null,            --ok
	codsituacao integer not null               --ok
);

alter table parcelacompra add constraint fk_codcompraparcela foreign key (codcompra) 
references compra(codcompra) match simple on update cascade on delete cascade;  --ok

alter table parcelacompra add constraint fk_codsituacaoparcela foreign key (codsituacao) 
references situacao(codsituacao) match simple on update cascade on delete cascade;  --ok

--23 - funcionario = {#codfuncionario, nomefuncionario, 
--@codcargo, @codrua, @codbairro, @codcidade, @codcep,
--numero, @codformacao }

create table funcionario(
	codfuncionario serial primary key,     --ok
	nomefuncionario varchar(60) not null,  --ok
	codcargo integer not null,
	codrua integer not null,               --ok
	codbairro integer not null,            --ok
	codcidade integer not null,            --ok
	codcep integer not null,               --ok
	numero varchar(10) not null,
	codformacao integer not null	
);

alter table funcionario add constraint fk_codruafuncionario foreign key (codrua) 
references rua(codrua) match simple on update cascade on delete cascade;

alter table funcionario add constraint fk_codbairrofuncionario foreign key (codbairro) 
references bairro(codbairro) match simple on update cascade on delete cascade;

alter table funcionario add constraint fk_codcidadefuncionario foreign key (codcidade) 
references cidade(codcidade) match simple on update cascade on delete cascade;

alter table funcionario add constraint fk_codcepfuncionario foreign key (codcep) 
references cep(codcep) match simple on update cascade on delete cascade;

alter table compra add constraint fk_codfuncionariocompra foreign key (codfuncionario) 
references funcionario(codfuncionario) match simple on update cascade on delete cascade;

alter table venda add constraint fk_codfuncionariovenda foreign key (codfuncionario) 
references funcionario(codfuncionario) match simple on update cascade on delete cascade;


--24 - itenstelefonefuncionario = {#(@codtelefone,
--@codfuncionario), @codtipotel}

create table itenstelefonefuncionario(
	codtelefone integer not null,     --ok
	codfuncionario integer not null,  --ok
	codtipotel     integer not null
);

alter table itenstelefonefuncionario add constraint pk_itenstelfuncionario primary key
(codtelefone, codfuncionario);

alter table itenstelefonefuncionario add constraint fk_codtelefoneitensfunc foreign key 
(codtelefone) references telefone(codtelefone) match simple on update cascade on delete cascade;

alter table itenstelefonefuncionario add constraint fk_codfuncionarioitensfunc foreign key 
(codfuncionario) references funcionario(codfuncionario) match simple on update cascade on 
delete cascade;

alter table itenstelefonefuncionario add constraint fk_codtelefoneitensfunc1 foreign key 
(codtelefone) references telefone(codtelefone) match simple on update cascade on delete cascade;

alter table itenstelefonefuncionario add constraint fk_codtipoteltensfunc foreign key 
(codtipotel) references tipotel(codtipotel) match simple on update cascade on delete cascade;

--25 - formacao = {#codformacao, nomeformacao, 
--@codlocalformacao}
--26 - localformacao = {#codlocalformacao, nomelocalformacao}
--27 - cargo = {#codcargo, nomecargo}


----- INSERINDO DADOS NO BANCO!!!!

--2 - marca = {#codmarca, nomemarca}
INSERT INTO MARCA(NOMEMARCA) VALUES ('NIKE');
INSERT INTO MARCA(NOMEMARCA) VALUES ('ADIDAS');
INSERT INTO MARCA(NOMEMARCA) VALUES ('DIADORA');
INSERT INTO MARCA(NOMEMARCA) VALUES ('ARISCO');

--3 - tipo = {#codtipo, nometipo}
INSERT INTO TIPO(NOMETIPO) VALUES ('VESTUÁRIO');
INSERT INTO TIPO(NOMETIPO) VALUES ('ALIMENTO');
INSERT INTO TIPO(NOMETIPO) VALUES ('BEBIDAS');

--1 - produto = {#codproduto, nomeproduto, valor, quantidade,
-- @codmarca, @codtipo}
INSERT INTO PRODUTO('TÊNIS JORDAN',356.99,12,1,1);
INSERT INTO PRODUTO('COCA-COLA',6.30,100,4,3);
INSERT INTO PRODUTO('BLUSA JOY',333.88,100,2,1);

--5 - sexo = {#codsexo, nomesexo}
INSERT INTO SEXO(NOMESEXO) VALUES ('FEMININO');
INSERT INTO SEXO(NOMESEXO) VALUES ('MASCULINO');

--7 - uf = {#coduf, nomeuf, sigla}
INSERT INTO UF(NOMEUF,SIGLA) VALUES('SÃO PAULO','SP');
INSERT INTO UF(NOMEUF,SIGLA) VALUES('MINAS GERAIS','MG');
INSERT INTO UF(NOMEUF,SIGLA) VALUES('GOIÁS','GO');

--6 - cidade = {#codcidade, nomecidade, @coduf}
INSERT INTO CIDADE(NOMECIDADE,CODUF) VALUES('ILHA SOLTEIRA',1);
INSERT INTO CIDADE(NOMECIDADE,CODUF) VALUES('PBTO',1);
INSERT INTO CIDADE(NOMECIDADE,CODUF) VALUES('GOIÂNIA',3);

--8 - rua = {#codrua, nomerua}
INSERT INTO RUA(NOMERUA) VALUES('PASSEIO GOIÂNIA');
INSERT INTO RUA(NOMERUA) VALUES('XV DE NOVEMBRO');
INSERT INTO RUA(NOMERUA) VALUES('PASSEIO ARARAS');

--9 - bairro = {#codbairro, nomebairro}
INSERT INTO BAIRRO(NOMEBAIRRO)VALUES('CENTRO');
INSERT INTO BAIRRO(NOMEBAIRRO)VALUES('ZONA NORTE');
INSERT INTO BAIRRO(NOMEBAIRRO)VALUES('ZONA SUL');

--10 - cep = {#codcep, numerocep} 
INSERT INTO CEP(NUMEROCEP) VALUES('15385-000');
INSERT INTO CEP(NUMEROCEP) VALUES('15370-000');

--4 - cliente = {#codcliente, nomecliente, @codsexo,
--@codcidade, @codrua, @codbairro, @codcep, numerocasa}
INSERT INTO CLIENTE(NOMECLIENTE, CODSEXO,CODCIDADE,
                    CODRUA, CODBAIRRO, CODCEP, NUMEROCASA) VALUES
('MARCOS ANTONIO ESTREMOTE', 2, 1, 1, 2, 1, 206);

INSERT INTO CLIENTE(NOMECLIENTE, CODSEXO,CODCIDADE,
                    CODRUA, CODBAIRRO, CODCEP, NUMEROCASA) VALUES
('GABRIELY FERNANDA', 1, 1, 3, 2, 1, 32);

--11 - telefone = {#codtelefone, numerotel}
INSERT INTO TELEFONE(NUMEROTEL) VALUES('(18)3742-4765');
INSERT INTO TELEFONE(NUMEROTEL) VALUES('(18)99632-2075');
INSERT INTO TELEFONE(NUMEROTEL) VALUES('(18)99650-3461');

--13 - tipotel = {#codtipotel, nometipotel}
INSERT INTO TIPOTEL(NOMETIPOTEL) VALUES('RECADO');
INSERT INTO TIPOTEL(NOMETIPOTEL) VALUES('RESIDENCIAL');
INSERT INTO TIPOTEL(NOMETIPOTEL) VALUES('COMERCIAL');

--12 - itenstelefonecliente = {#(@codcliente, @codtelefone),
--@codtipotel}
INSERT INTO ITENSTELEFONECLIENTE(CODCLIENTE,CODTELEFONE,
                                 CODTIPOTEL) VALUES
(1,1,2);
INSERT INTO ITENSTELEFONECLIENTE(CODCLIENTE,CODTELEFONE,
                                 CODTIPOTEL) VALUES
(1,2,2);
INSERT INTO ITENSTELEFONECLIENTE(CODCLIENTE,CODTELEFONE,
                                 CODTIPOTEL) VALUES
(2,3,3);

--17 - situacao = {#codsituacao, nomesituacao}
INSERT INTO SITUACAO(NOMESITUACAO) VALUES('PAGO');
INSERT INTO SITUACAO(NOMESITUACAO) VALUES('ABERTO');

--18 - fornecedor = {#codfornecedor, nomefornecedor, cnpj,
--@codrua, @codcidade, @codbairro, @codcep, numero}
INSERT INTO FORNECEDOR(NOMEFORNECEDOR, CNPJ, CODRUA, CODCIDADE,
                       CODBAIRRO, CODCEP, NUMERO) VALUES
('TIO CHICO DAS CONDONGAS','111',1,1,3,1, 123);

--19 - itenstelefonefornecedor = {#(@codfornecedor,
--@codtelefone), @codtipotel}
INSERT INTO ITENSTELEFONEFORNECEDOR(CODFORNECEDOR, CODTELEFONE,
                                    CODTIPOTEL) VALUES
(1,3,1);                               