Você está na página 1de 52

Banco de dados I

Análise e Desenvolvimento de Sistemas

ADRIELLY LOPES
BRUNO HENRIQUE
ESDRAS DE LIMA SILVA
WESLEY ALVES

Gestão de empresa de marketing

Cajazeiras - PB
2023
ADRIELLY LOPES
BRUNO HENRIQUE
ESDRAS DE LIMA SILVA
WESLEY

Gestão de empresa de marketing

Projeto desenvolvido para a disciplina de Banco de


dados I, durante o período letivo 2023.2 do curso de
Análise e Desenvolvimento de Sistemas do Instituto
Federal da Paraíba.

Professor Dr. Fábio Gomes de Andrade

Cajazeiras - PB
2023
Sumário

Gestão de empresa de marketing......................................................................................... 2


Sumário....................................................................................................................................3
1. Domínio de aplicação......................................................................................................... 4
1.1 Apresentação do domínio............................................................................................. 4
1.2 Requisitos..................................................................................................................... 4
2. Projeto conceitual...............................................................................................................6
2.1 Diagrama Entidade-Relacionamento............................................................................ 6
2.1 Dicionário conceitual de dados..................................................................................... 6
Entidade Cliente............................................................................................................6
Atributos.................................................................................................................. 6
Entidade Serviço........................................................................................................... 7
Atributos.................................................................................................................. 7
Entidade Revisão.......................................................................................................... 7
Atributos.................................................................................................................. 7
Entidade Formação.......................................................................................................7
Atributos.................................................................................................................. 7
Entidade Conteúdo....................................................................................................... 8
Atributos.................................................................................................................. 8
Entidade Pagamento:....................................................................................................8
Atributos.................................................................................................................. 8
Entidade Débito.............................................................................................................8
Atributos.................................................................................................................. 8
Entidade Pix.................................................................................................................. 8
Atributos.................................................................................................................. 8
Entidade Funcionário.................................................................................................... 8
Atributos.................................................................................................................. 8
Entidade Redator.......................................................................................................... 9
Atributos.................................................................................................................. 9
Entidade Educador........................................................................................................9
Atributos.................................................................................................................. 9
Entidade Revisor...........................................................................................................9
Atributos.................................................................................................................. 9
Relacionamentos........................................................................................................ 10
2.3 Consultas esperadas.................................................................................................. 10
3. Projeto Lógico................................................................................................................... 11
3.1 Mapeamento Entidade-Relacionamento..................................................................... 11
3.2 Dicionário lógico de dados.......................................................................................... 12
3.2.1 Cliente................................................................................................................ 12
3.2.2 Serviço............................................................................................................... 13
3.2.3 Revisão.............................................................................................................. 14
3.2.4 Formação........................................................................................................... 15
3.2.5 Conteúdo............................................................................................................16
3.2.6 Débito.................................................................................................................16
3.2.7 Pix...................................................................................................................... 17
3.2.8 Redator.............................................................................................................. 19
3.2.9 Educator.............................................................................................................20
3.2.10 Revisor............................................................................................................. 21
4. Projeto físico..................................................................................................................... 22
4.1 Scripts de criação das relações.................................................................................. 22
4.1.0 Script Completo..................................................................................................22
4.1.1 Extensão UUID.................................................................................................. 26
4.1.2 Cliente................................................................................................................ 26
4.1.3 Serviço............................................................................................................... 26
4.1.4 Revisor............................................................................................................... 26
4.1.5 Revisão.............................................................................................................. 27
4.1.6 Educador............................................................................................................27
4.1.7 Redator.............................................................................................................. 28
4.1.8 Pix...................................................................................................................... 28
4.1.9 Débito.................................................................................................................28
4.1.10 Conteúdo..........................................................................................................29
4.1.11 Formação......................................................................................................... 29
4.2 Scripts de povoamento............................................................................................... 30
4.2.0 Povoamento Completo.......................................................................................30
4.2.1 Povoamento Cliente...........................................................................................34
4.2.2 Povoamento Serviço.......................................................................................... 34
4.2.3 Povoamento Revisor..........................................................................................35
4.2.4 Povoamento Educador.......................................................................................35
4.2.3 Povoamento Redator......................................................................................... 35
4.2.6 Povoamento Pix................................................................................................. 36
4.2.7 Povoamento Débito............................................................................................36
4.2.8 Povoamento Conteúdo...................................................................................... 37
4.2.9 Povoamento Revisão......................................................................................... 37
4.2.10 Povoamento Formação....................................................................................38
4.3 Scripts para as consultas esperadas.......................................................................... 38
4.3.1 Resgatar um redator, revisor ou educador.........................................................38
4.3.1.1 Redator......................................................................................................38
4.3.1.2 Revisor...................................................................................................... 38
4.3.1.3 Educador................................................................................................... 38
4.3.2 Resgatar um cliente específico.......................................................................... 39
4.3.3 Resgatar as informações a respeito de um serviço específico..........................39
4.3.4 Resgatar todos os serviços executados dentro de um intervalo de tempo
específico.................................................................................................................... 39
4.3.5 Resgatar todos os serviços prestados por um funcionário específico de acordo
com a sua função........................................................................................................39
4.3.5.1 Redator......................................................................................................39
4.3.5.2 Revisor...................................................................................................... 39
4.3.5.3 Educador................................................................................................... 40
4.3.6 Resgatar todos os serviços contratados por um cliente específico................... 40
4.3.7 Resgatar a quantidade de serviços prestados por um determinado funcionário
de acordo com sua função..........................................................................................40
4.3.8 Resgatar a média de preço, menor preço e maior preço para serviços com
classificação máxima.................................................................................................. 40
4.3.9 Resgatar todos os funcionários que não estejam associados a nenhum serviço
de acordo com sua função..........................................................................................40
4.3.9.1 Redator......................................................................................................40
4.3.9.2 Revisor...................................................................................................... 41
4.3.9.3 Educador................................................................................................... 41
4.3.10 Resgatar todos os clientes especiais...............................................................41
4.4 Scripts das consultas requeridas................................................................................ 41
4.4.1 Recupera os serviços contratados pelo cliente UbiTech....................................41
4.4.2 Recupera os conteúdos com o número de palavras produzidos por João Silva...
41
4.4.3 Recupera todos os serviços que não são conteúdos........................................ 42
4.4.4 Recupera todos os serviços que receberam classificação................................ 42
4.4.5 Recupera todos os conteúdos que tenham uma persona envolvida com
tecnologia....................................................................................................................42
4.4.6 Recupera todos os conteúdos que tenha como início de descrição de persona a
palavra Mãe................................................................................................................ 42
4.4.7 Coleta os serviços e os ordena por classificação.............................................. 42
4.4.8 Coleta os conteúdos e os ordena pelo número de palavras..............................42
4.4.9 Recupera os redatores que não produziram nenhuma conteúdo......................42
4.4.10 Valores únicos, efetuados com cartão de débito............................................. 43
4.4.11 Recupera os redatores que produziram algum conteúdo................................ 43
4.4.12 Recupera os clientes que efetuaram um pagamento...................................... 43
4.4.13 Recupera todos os serviços que são conteúdos............................................. 44
4.4.14 Recupera o nome e o cpf de todos os funcionários.........................................44
4.4.15 Recupera a quantidade de serviços.................................................................44
4.4.16 Recupera a média, o maior e menor valor de pagamento de todos os serviços.
44
4.4.17 Recupera todos os tipos de empreendimento................................................. 45
4.4.18 Recupera a quantidade de clientes com o tipo de empreendimento digital.....45
4.5 Scripts das visões....................................................................................................... 45
4.5.1 Cria uma visão incluindo o cliente e o funcionário responsável pelo serviço.... 45
4.5.2 Cria uma visão com uma relação entre redator, servico e cliente.................... 46
4.5.3 Cria uma visão com uma relação entre revisor, servico e cliente..................... 46
4.5.4 Cria uma visão com uma relação entre educador, servico e cliente.................46
4.6 Scripts das funções/procedimentos armazenados..................................................... 46
4.6.1 Cria uma função que retorna os serviços relacionados a um funcionário
específico.................................................................................................................... 46
4.6.2 Cria uma função que retorna o total de serviços.............................................. 47
4.6.3 Cria uma função que calcula a quantidade total de dinheiro gasto por um
cliente..........................................................................................................................47
4.7 Scripts dos gatilhos..................................................................................................... 48
4.7.1 Cria um gatilho onde atualiza um redator quando um novo conteúdo é criado48
4.7.2 Cria um gatilho que impede que um novo revisor seja criado caso cobre menos
de 10 por palavra........................................................................................................ 48
4.7.3 Cria um gatilho que atualiza automaticamente o preço do serviço caso o
número de palavras de um conteúdo seja auterado...................................................49
4.8 Scripts dos índices...................................................................................................... 49
1. Domínio de aplicação

1.1 Apresentação do domínio

A Makitex será uma empresa de marketing digital que oferecerá serviços online de
escrita e revisão de conteúdos como posts de blog, newsletter e etc. Para oferecer
um serviço de qualidade, e organizar bem todas as informações, a empresa terá um
banco de dados que armazenará diversos dados sobre os conteúdos, clientes,
funcionários e etc.

Também serão ofertados cursos de capacitação profissional, para que os clientes


possam oferecer seus produtos e serviços com maior qualidade.

1.2 Requisitos
● Será preciso guardar as informações dos clientes que desejam contratar
qualquer serviço da empresa. Os dados a serem guardados são: nome,
CPF/CNPJ, ramo de atuação, tipo de empreendimento e ano de
fundação/início de atuação e se ele é um cliente especial. Clientes
especiais têm prioridade no atendimento e tem seus conteúdos realizados por
redatores mais qualificados.

● É preciso também guardar o nome, CPF, telefone, email, data de


nascimento, data de contratação e a função de todos os funcionários. Para
os redatores é preciso guardar as áreas de interesse, o número de
conteúdos escritos, preço por palavra e se o redator é considerado
especial.

Para os revisores, também é importante saber qual o seu preço unitário e


qual tipo de unidade o revisor trabalha, se é por hora ou por palavra.

Com o objetivo de oferecer um serviço de qualidade, os educadores precisam


ter formação acadêmica, e por isso, no caso de educadores, será preciso
guardar também a instituição de ensino, o título da graduação, e o ano de
conclusão.

● Também é necessário guardar as informações sobre os registros dos serviços


prestados como o id, a data de realização, se já foi concluído, o cliente que
contratou o serviço e a classificação (1 a 5 estrelas) no caso de serviços
concluídos, bem como o preço do serviço.
● Os seguintes dados (relacionados aos serviços de conteúdo) precisarão ser
armazenados: quantidade de palavras, descrição da persona, o redator
responsável e o status.

● Para os serviços de revisão, é preciso guardar a categoria, revisor


responsável, descrição da revisão, e se ela foi concluída ou está em
andamento.

● No caso das formações, é preciso guardar o tempo de duração, título,


educador, e a descrição.

● A empresa aceitará pagamentos com cartão de débito e pix. Para os


pagamentos feitos em cartão, é preciso guardar o número do cartão, o
nome do titular e a bandeira. Para pagamentos em pix é necessário guardar
a chave pix utilizada para o pagamento. Em ambos os casos é preciso
guardar o valor do pagamento, data de realização, e qual cliente efetuou o
pagamento.
2. Projeto conceitual

2.1 Diagrama Entidade-Relacionamento

2.1 Dicionário conceitual de dados

Entidade Cliente
Criada para armazenar informações de um cliente.

Atributos

● cpf/cnpj: Armazena o cpf, se o cliente for pessoa física, ou o cnpj se o cliente


for uma pessoa jurídica;

● nome: Armazena o nome do cliente;

● ramoAtuacao: Armazena qual o ramo de atividade do cliente. ex: financeiro,


marketing digital, imobiliário;
● tipoEmpreendimento: Armazena o tipo de empreendedorismo principal que
o cliente se encaixa, se é individual, cooperativo, social, digital e etc;

● anoInicio: Armazena o ano inicial de atuação;

● especial: Armazena a informação se o cliente é um cliente especial ou não.

Entidade Serviço
Generalização das entidades Conteúdo, Revisão e Formação. Criada para
armazenar todos os atributos comuns a todos os tipos diferentes de serviço.

Atributos

● Id: id gerado para identificar unicamente um serviço;

● dataRealização: Armazena a data que o serviço foi finalizado;

● status: Armazena o status atual do serviço (aguardando profissional, em


progresso, sob revisão, aguardando aprovação, concluído);

● classificacao: Armazena a nota dada pelo cliente para o serviço (entre 1 e 5


estrelas);

Entidade Revisão
Especialização da entidade Serviço. Criada para armazenar atributos únicos ao tipo
de serviço de revisão.

Atributos
● categoria: Armazena a categoria que a revisão se enquadra. (geral, tradução,
ortográfica, alinhamento);
● descrição: Armazena detalhes específicos passados pelo cliente para o
serviço de revisão.

Entidade Formação
Especialização da entidade Serviço. Criada para armazenar atributos únicos ao tipo
de serviço de formação.

Atributos
● titulo: Armazena o título do curso;
● duracao: Armazena a duração, em horas, da formação em questão;
● descrição: Armazena a descrição da formação contendo mais detalhes sobre
o curso em questão;
Entidade Conteúdo
Especialização da entidade Serviço. Criada para armazenar atributos específicos
dos serviços de produção de conteúdo;

Atributos
● numeroPalavras: Armazena a quantidade de palavras que o conteúdo deve
possuir;
● persona: Armazena os dados e descrição da persona destinada àquele
conteúdo;

Entidade Pagamento:
Generalização das entidades Débito e Pix. Criada para armazenar atributos comuns
a ambos os tipos de pagamento distintos;

Atributos
● id: Armazena um código único que identifica um pagamento específico;
● titular: Armazena o titular da conta/cartão de quem efetuou o pagamento;

Entidade Débito
Especialização da entidade pagamento. Armazena dados específicos de
pagamentos realizados com cartão de débito;

Atributos
● numeroCartao: Armazena o número do cartão utilizado no pagamento;
● bandeira: Armazena a bandeira do cartão utilizado;

Entidade Pix
Especialização da entidade pagamento. Armazena dados específicos de
pagamentos realizados com Pix;

Atributos
● chaveUtilizada: Armazena a chave que o cliente utilizou para efetuar o
pagamento;

Entidade Funcionário
Generalização das entidades Revisor, Redator e Educador. Criada para armazenar
dados comuns às três entidades mencionadas.

Atributos
● cpf: Armazena o cpf do funcionário;
● nome: Armazena o nome do funcionário;
● dataNascimento: Armazena da data de nascimento do funcionário;
● dataContratacao: Armazena a data de contratação do fun cionário;
● telefone: Armazena os telefones principais do funcionário;
● email: Guarda o email do funcionário.

Entidade Redator
Especialização da entidade Funcionário. Criada para guardar os dados específicos
de cada redator.

Atributos
● areas: Atributos multivalorado que armazena as áreas que o redator está
apto para escrever;
● precoPalavra: Armazena o preco unitário por palavra de cada redator;
● especial: Armazena a informação de que o redator é ou não um profissional
apto para atender demandas de clientes especiais;

Entidade Educador
Especialização da entidade Funcionário. Criada para guardar os dados específicos
de cada educador.

Atributos
● graduacao: Armazena o título acadêmico mais alto que o educador possui;
● instituicao: Armazena a instituição de ensino que o educador conseguiu seu
título mais alto;
● anoConclusao: Armazena o ano de conclusão do curso da graduação,
doutorado e etc;

Entidade Revisor
Especialização da entidade Funcionário. Criada para guardar os dados específicos
de cada revisor.

Atributos
● precoUnitario: Armazena o preço unitário de cada revisor;
● unidade: Armazena a unidade de medida relativa ao preço de cada revisor.
(hora ou palavra).
Relacionamentos
● paga: Relaciona Pagamento à Serviço, por conta de um mesmo pagamento
poder pagar um conjunto de serviços, possui dois atributos: valor e data do
pagamento. Cada serviço só pode ser pago por um único pagamento, mas o
mesmo pagamento pode cobrir vários serviços;

● feito: Relaciona Pagamento à Cliente. Cada pagamento só pode ser feito por
um único cliente, e cada cliente pode efetuar um ou mais pagamentos;

● contrata: Relaciona Cliente à Serviço. Cada cliente só pode contratar um


serviço por vez, e cada serviço só pode ser contratado por um único cliente;

● produz: Relaciona Redator à Conteúdo. Cada redator pode escrever zero ou


mais conteúdos, mas cada conteúdo só pode ser feito por um único redator;

● ministra: Relaciona Educator à Formação. Cada educador pode ministrar


zero ou mais formações, contudo, cada formação terá um único educador
associado;

● revisa: Relaciona Revisor à Revisão. Cada revisor pode efetuar zero ou mais
revisões, mas uma revisão só pode ser feita por um único revisor.

2.3 Consultas esperadas


A seguir está definida uma lista com 10 consultas que o banco de dados deve ser
capaz de resolver:

1. Resgatar um redator, revisor ou educador específico;


2. Resgatar um cliente específico;
3. Resgatar as informações a respeito de um serviço específico;
4. Resgatar todos os serviços executados dentro de um intervalo de tempo
específico;
5. Resgatar todos os serviços prestados por um funcionário específico de
acordo com sua função;
6. Resgatar todos os serviços contratados por um cliente específico;
7. Resgatar a quantidade de serviços prestados por um determinado
funcionário;
8. Resgatar a média de preço, menor preço e maior preço para serviços com
classificação máxima;
9. Resgatar todos os funcionários que não estejam associados a nenhum
serviço de acordo com sua função;
10. Resgatar todos os clientes especiais;
3. Projeto Lógico

3.1 Mapeamento Entidade-Relacionamento


O mapeamento abaixo encontra-se já refinado

Cliente( cpfCnpj, nome, ramoAtuacao, tipoEmpreendimento, anoInicio, especial )

Servico( id, preco, dataRealizacao, status, classificacao, cpfCnpjCliente)

Revisao( idServico, categoria, descricao, cpfRevisor)

Formacao( idServico, titulo, duracao, descricao, cpfEducador)

Conteudo( idServico, numeroPalavras, persona, cpfRedator )

Debito( id, numeroCartao, bandeira, numeroCartao, Titular, cpfCnpjCliente,


idServico, valor, data )

Pix( id, chaveUtilizada, cpfCnpjCliente, idServico, valor, data )

Redator( cpf, email, nome, dataNascimento, dataContratacao, precoPalavra,


conteudosEscritos, especial, telefone1, telefone2, area1, area2 )

Educador( cpf, email, nome, dataNascimento, dataContratacao, graduacao,


instituicao, anoConclusao, telefone1, telefone2 )

Revisor( cpf, email, nome, dataNascimento, dataContratacao, precoUnitario,


unidade, telefone1, telefone2 )
3.2 Dicionário lógico de dados

3.2.1 Cliente

Cliente: armazena as informações de um cliente


Atributo Descrição Tipo Domínio Restrição

*chave primária
armazena o cpf apenas
*semântica,
cpfCnpj ou o cnpj do varchar(14) caracteres
deve possuir no
cliente numéricos
mínimo 11
caracteres

armazena o
nome varchar(100) varchar(100) *não nulo
nome do cliente

armazena o
ramo de
ramoAtuacao varchar(100) varchar(100) *não nulo
atividade do
cliente

armazena qual
tipoEmpreendi a forma de
varchar(100) varchar(100)
mento empreendedoris
mo

armazena o ano
de início do
anoInicio character(4) character(4)
empreendiment
o

armazena a
informação se o
especial cliente é boolean boolean *não nulo
considerado
especial
3.2.2 Serviço

Servico: guarda as informações dos serviços feitos


Atributo Descrição Tipo Domínio Restrição

identificador
Id único da uuid character(36) *chave primária
revisão

*não nulo
preco da
valores não
preco revisão Real
negativos *semântico, não
realizada
negativo

data da
dataRealizacao realização da date data
revisão

representa o
status status atual da varchar(10) varchar(10) *não nulo
revisão

representa a
classificação valores entre 0 *semântico,
classificação Int
dada pelo e5 entre 1 e 5
cliente

*chave
guarda o estrangeira
cpf/cnpj do referenciando
cpfCnpjCliente cliente que varchar(14) varchar(14) cpfCnpj na
solicitou a tabela Cliente
revisão
*não nulo
3.2.3 Revisão

Revisao: guarda as informações das revisões feitas


Atributo Descrição Tipo Domínio Restrição

*chavePrimária

identificador *chave
IdServico único da UUID character(36) estrangeira
revisão referenciando id
na tabela
Serviço

caracteriza a
categoria revisão varchar(50) varchar(50) *não nulo
realizada

representa uma
breve descrição
descrição varchar(300) varchar(300) *não nulo
da revisão
realizada

*não nulo
guarda o cpf do
apenas *chave
revisor que
cpfRevisor character(11) caracteres estrangeira
realizou o
numéricos referenciando
serviço
cpf na tabela
Revisor
3.2.4 Formação

Formacao: guarda as informações das formações realizadas


Atributo Descrição Tipo Domínio Restrição

*chavePrimária

identificador *chave
IdServico único da uuid character(36) estrangeira
formação referenciando id
na tabela
Serviço

titulo da
titulo formação varchar(100) varchar(100) *não nulo
disponiblizada

representa uma
breve descrição
descrição varchar(300) varchar(300) *não nulo
da revisão
realizada

duração em * não nulo


minutos da apenas valores
duração int
formação positivos *semântica,
realizada maior que 0

*não nulo
guarda o cpf do
apenas *chave
educador que
cpfEducador character(11) caracteres estrangeira
realizou a
numéricos referenciando
formação
cpf na tabela
Educador
3.2.5 Conteúdo

Conteudo: guarda as informações dos conteúdos ffeitos


Atributo Descrição Tipo Domínio Restrição

*chavePrimária

identificador *chave
idSerivco único da uuid character(36) estrangeira
formação referenciando id
na tabela
Serviço

guarda o *não nulo


numeroPalavra número de apenas valores
Int
s palavras do positivos *semântica,
conteúdo maior que 0

descrição da
persona varchar(300) varchar(300)
persona

*chave
estrangeira
guarda o cpf do
apenas referenciando
redator que
cpfRedator character(11) caracteres cpf na tabela
realizou o
numéricos Redator
serviço
*não nulo

3.2.6 Débito

Debito: guarda as informações dos pagamentos feitos com cartão de débito


Atributo Descrição Tipo Domínio Restrição

identificador
Id único do uuid character(36) *chave primária
pagamento
*não nulo
número do
apenas
cartão utilizado *semântica,
numeroCartao varchar(20) caracteres
para o apenas
numéricos
pagamento caracteres
numéricos

identifica a qual
bandeira bandeira o Int Int *não nulo
cartão pertence

nome do titular
Titular varchar(100) varchar(100) *não nulo
do cartão

*chave
estrangeira
cpf/cnpj do
apenas referenciando
cliente
cpfCnpjCliente varchar(14) caracteres cpfCnpj na
beneficiado
numéricos tabela cliente
pelo pagamento
*não nulo

*chave
estrangeira
id do serviço referenciando id
idServico uuid character(36)
que foi pago na tabela
Servico
*não nulo

*não nulo
valor que foi apenas valores
valor Real
pago positivos *semântica,
maior que zero

data do
data Date Date *não nulo
pagamento

3.2.7 Pix

Pix: guarda as informações dos pagamentos feitos com pix


Atributo Descrição Tipo Domínio Restrição

identificador
Id único do uuid character(36) *chave primária
pagamento

chave utilizada
chave utilizada para o varchar(100) varchar(100) *não nulo
pagamento

*chave
estrangeira
cpf/cnpj do
apenas referenciando
cliente
cpfCnpjCliente varchar(14) caracteres cpfCnpj na
beneficiado
numéricos tabela cliente
pelo pagamento
*não nulo

*chave
estrangeira
referenciando id
id do serviço
idServico uuid character(36) na tabela
que foi pago
Servico

*não nulo

*não nulo
valor que foi apenas valores
valor Real
pago positivos *semântica,
maior que zero

data do
data Date Date *não nulo
pagamento
3.2.8 Redator

Redator: guarda as informações dos redatores


Atributo Descrição Tipo Domínio Restrição

*chave primária
apenas
cpf cpf do redator character(11) caracteres *semântica,
numérios apenas
números

*atributo chave
email email do redator varchar(100) varchar(100)
*não nulo

nome do
nome varchar(100) varchar(100) *não nulo
redator

data de *semântica,
apenas maiores
dataNascimento nascimento do date apenas maiores
de 18 anos
redator de 18 anos

data de
dataContrataca
contratação do date date *não nulo
o
redator

número de *não nulo


conteudosEscrit conteúdos apenas valores
Int
os escritos pelo não negativos *semântica, não
redator negativo

*não nulo
preço cobrado valores
precoPalvra real *semântica,
por palavra positivos
valores
positivos

identifica
especial redatores boolean boolean *não nulo
especiais

*não nulo
telefone apenas
telefone1 principal do varchar(15) caracteres *semântica,
redator numéricos apenas
números

apenas *semântica,
telefone reserva
telefone2 varchar(15) caracteres apenas
do redator
numéricos números

área principal
area1 varchar(100) varchar(100) *não nulo
de atuação do
redator

área secundária
area2 de atuação do varchar(100) varchar(100)
redator

3.2.9 Educator

Educador: guarda as informações dos educadores


Atributo Descrição Tipo Domínio Restrição

*chave primária
apenas
cpf cpf do educador character(11) caracteres *semântica,
numérios apenas
números

*atributo chave
email do
email varchar(100) varchar(100)
educador
*não nulo

nome do
nome varchar(100) varchar(100) *não nulo
educador

data de *semântica,
apenas maiores
dataNascimento nascimento do date apenas maiores
de 18 anos
educador de 18 anos

data de
dataContrataca
contratação do date date *não nulo
o
educador

curso de
graduacao graduação do varchar(100) varchar(100) *não nulo
educador

instituição de
instituicao formação do varchar(100) varchar(100) *não nulo
educador

ano de
conclusão do
anoConclusao character(4) character(4) *não nulo
curso do
educador
*não nulo
telefone apenas
telefone1 principal do varchar(15) caracteres *semântica,
educador numéricos apenas
números

apenas *semântica,
telefone reserva
telefone2 varchar(15) caracteres apenas
do educador
numéricos números

3.2.10 Revisor

Revisor: guarda as informações dos revisores


Atributo Descrição Tipo Domínio Restrição

apenas
cpf cpf do educador character(11) caracteres *chave primária
numérios

*atributo chave
email do
email varchar(100) varchar(100)
educador
*não nulo

nome do
nome varchar(100) varchar(100) *não nulo
educador

data de *semântica,
apenas maiores
dataNascimento nascimento do date apenas maiores
de 18 anos
educador de 18 anos

data de
dataContrataca
contratação do date date *não nulo
o
educador

preco por apenas valores


precoUnitario Real *não nulo
unidade positivos

unidade
unidade utilizada para varchar(50) varchar(50) *não nulo
cobrança
*não nulo
telefone apenas
telefone1 principal do varchar(15) caracteres *semântica,
educador numéricos apenas
números

apenas *semântica,
telefone reserva
telefone2 varchar(15) caracteres apenas
do educador
numéricos números

4. Projeto físico

4.1 Scripts de criação das relações

4.1.0 Script Completo

-- criando extensao para uuid


CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

-- CLIENTE
create table cliente(
cpfCnpj varchar(14) check (cpfCnpj not like '%[^0-9]%') check
(length(cpfCnpj) >= 11),
nome varchar(100) not null,
ramoAtuacao varchar(100) not null,
tipoEmpreendimento varchar(100),
anoInicio character(4),
especial boolean not null,
constraint user_pkey primary key (cpfCnpj)
);

-- SERVIÇO
create table servico(
id uuid default uuid_generate_v4(),
preco real not null check (preco >= 0),
dataRealizacao date,
status varchar(10) not null,
classificacao int check (classificacao >=0) check (classificacao <=
5),
cpfCnpjCliente varchar(14) not null,
constraint fk_cpf_cnpj_cliente foreign key(cpfCnpjCliente)
references cliente(cpfCnpj),
constraint servico_id_pkey primary key (id)
);

-- REVISOR
create table revisor(
cpf varchar(11),
email varchar(100) not null unique,
nome varchar(100) not null,
dataNascimento date not null check (age(current_date, dataNascimento)
>= interval '18 years'),
dataContratacao date not null,
precoUnitario Real not null,
unidade varchar(50) not null,
telefone1 varchar(15) not null check (telefone1 not like
'%[^0-9]%'),
telefone2 varchar(15) check (telefone2 not like '%[^0-9]%'),
constraint revisor_cpf_pkey primary key (cpf)
);

-- REVISAO
create table revisao(
idServico uuid,
categoria varchar(50) not null,
descricao varchar(300) not null,
cpfRevisor varchar(11) not null,
constraint id_revisao_pkey primary key (idServico),
constraint fk_id_servico foreign key(idServico) references
servico(id),
constraint fk_cpf_revisor foreign key(cpfRevisor) references
revisor(cpf)
);

-- EDUCADOR
create table educador (
cpf character(11) check (cpf not like '%[^0-9]%'),
email varchar(100) not null unique,
nome varchar(100) not null,
dataNascimento date check (age(current_date, dataNascimento) >=
interval '18 years'),
dataContratacao date not null,
graduacao varchar(100) not null,
instituicao varchar(100) not null,
anoConclusao character(4) not null,
telefone1 varchar(15) not null check (telefone1 not like
'%[^0-9]%'),
telefone2 varchar(15) check (telefone2 not like '%[^0-9]%'),
constraint id_educador_pkey primary key (cpf)
);

-- REDATOR
create table redator (
cpf character(11) check (cpf not like '%[^0-9]%'),
email varchar(100) not null unique,
nome varchar(100) not null,
dataNascimento date check (age(current_date, dataNascimento) >=
interval '18 years'),
dataContratacao date not null,
conteudosEscritos int not null check (conteudosEscritos >= 0),
precoPalavra real not null check(precoPalavra > 0),
especial boolean not null,
area1 varchar(100) not null,
area2 varchar(100) default null,
telefone1 varchar(15) not null check (telefone1 not like '%[^0-9]%'),
telefone2 varchar(15) check (telefone2 not like '%[^0-9]%'),
constraint cpf_redator_pkey primary key (cpf)
);

-- PIX
create table pix (
id uuid default uuid_generate_v4(),
chaveUtilizada varchar(100) not null,
cpfCnpjCliente varchar(14) not null,
idServico uuid not null,
valor real not null check (valor > 0),
dataPagamento date not null,
constraint fk_idServico_pix foreign key(idServico) references
servico(id),
constraint id_pix_pkey primary key (id),
constraint fk_cpf_cnpj_cliente foreign key(cpfCnpjCliente) references
cliente(cpfCnpj)
);

-- DEBITO
create table debito (
id uuid default uuid_generate_v4(),
numeroCartao varchar(20) not null check (numeroCartao not like
'%[^0-9]%'),
bandeira int not null,
cpfCnpjCliente varchar(14) not null,
idServico uuid not null,
titular varchar(100) not null,
valor real not null check (valor > 0),
dataPagamento date not null,
constraint fk_idServico_debito foreign key (idServico) references
servico(id),
constraint id_debito_pkey primary key (id),
constraint fk_cpf_cnpj_cliente foreign key(cpfCnpjCliente) references
cliente(cpfCnpj)
);

-- CONTEUDO
create table conteudo (
idServico uuid not null,
numeroPalavras int not null check (numeroPalavras > 0),
persona varchar(300),
cpfRedator character(11) not null,
constraint id_conteudo_pkey primary key (idServico),
constraint fk_idServico_conteudo foreign key (idServico) references
servico (id),
constraint fk_cpf_redator foreign key(cpfRedator) references
redator(cpf)
);

-- FORMACAO
create table formacao (
idServico uuid not null,
titulo varchar(100) not null,
descricao varchar(300) not null,
duracao int not null check (duracao > 0),
cpfEducador character(11) not null,
constraint id_formacao_pkey primary key (idServico),
constraint fk_idServico_formacao foreign key (idServico) references
servico(id),
constraint fk_cpf_educador foreign key(cpfEducador) references
educador(cpf)
);
4.1.1 Extensão UUID

-- criando extensao para uuid


CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

4.1.2 Cliente

-- CLIENTE
create table cliente(
cpfCnpj varchar(14) check (cpfCnpj not like '%[^0-9]%') check
(length(cpfCnpj) >= 11),
nome varchar(100) not null,
ramoAtuacao varchar(100) not null,
tipoEmpreendimento varchar(100),
anoInicio character(4),
especial boolean not null,
constraint user_pkey primary key (cpfCnpj)
);

4.1.3 Serviço

-- SERVIÇO
create table servico(
id uuid default uuid_generate_v4(),
preco real not null check (preco >= 0),
dataRealizacao date,
status varchar(10) not null,
classificacao int check (classificacao >=0) check (classificacao <=
5),
cpfCnpjCliente varchar(14) not null,
constraint fk_cpf_cnpj_cliente foreign key(cpfCnpjCliente)
references cliente(cpfCnpj),
constraint servico_id_pkey primary key (id)
);

4.1.4 Revisor

-- REVISOR
create table revisor(
cpf varchar(11),
email varchar(100) not null unique,
nome varchar(100) not null,
dataNascimento date not null check (age(current_date, dataNascimento)
>= interval '18 years'),
dataContratacao date not null,
precoUnitario Real not null,
unidade varchar(50) not null,
telefone1 varchar(15) not null check (telefone1 not like
'%[^0-9]%'),
telefone2 varchar(15) check (telefone2 not like '%[^0-9]%'),
constraint revisor_cpf_pkey primary key (cpf)
);

4.1.5 Revisão

-- REVISAO
create table revisao(
idServico uuid,
categoria varchar(50) not null,
descricao varchar(300) not null,
cpfRevisor varchar(11) not null,
constraint id_revisao_pkey primary key (idServico),
constraint fk_id_servico foreign key(idServico) references
servico(id),
constraint fk_cpf_revisor foreign key(cpfRevisor) references
revisor(cpf)
);

4.1.6 Educador

-- EDUCADOR
create table educador (
cpf character(11) check (cpf not like '%[^0-9]%'),
email varchar(100) not null unique,
nome varchar(100) not null,
dataNascimento date check (age(current_date, dataNascimento) >=
interval '18 years'),
dataContratacao date not null,
graduacao varchar(100) not null,
instituicao varchar(100) not null,
anoConclusao character(4) not null,
telefone1 varchar(15) not null check (telefone1 not like
'%[^0-9]%'),
telefone2 varchar(15) check (telefone2 not like '%[^0-9]%'),
constraint id_educador_pkey primary key (cpf)
);
4.1.7 Redator

-- REDATOR
create table redator (
cpf character(11) check (cpf not like '%[^0-9]%'),
email varchar(100) not null unique,
nome varchar(100) not null,
dataNascimento date check (age(current_date, dataNascimento) >=
interval '18 years'),
dataContratacao date not null,
conteudosEscritos int not null check (conteudosEscritos >= 0),
precoPalavra real not null check(precoPalavra > 0),
especial boolean not null,
area1 varchar(100) not null,
area2 varchar(100) default null,
telefone1 varchar(15) not null check (telefone1 not like '%[^0-9]%'),
telefone2 varchar(15) check (telefone2 not like '%[^0-9]%'),
constraint cpf_redator_pkey primary key (cpf)
);

4.1.8 Pix

-- PIX
create table pix (
id uuid default uuid_generate_v4(),
chaveUtilizada varchar(100) not null,
cpfCnpjCliente varchar(14) not null,
idServico uuid not null,
valor real not null check (valor > 0),
dataPagamento date not null,
constraint fk_idServico_pix foreign key(idServico) references
servico(id),
constraint id_pix_pkey primary key (id),
constraint fk_cpf_cnpj_cliente foreign key(cpfCnpjCliente) references
cliente(cpfCnpj)
);

4.1.9 Débito

-- DEBITO
create table debito (
id uuid default uuid_generate_v4(),
numeroCartao varchar(20) not null check (numeroCartao not like
'%[^0-9]%'),
bandeira int not null,
cpfCnpjCliente varchar(14) not null,
idServico uuid not null,
titular varchar(100) not null,
valor real not null check (valor > 0),
dataPagamento date not null,
constraint fk_idServico_debito foreign key (idServico) references
servico(id),
constraint id_debito_pkey primary key (id),
constraint fk_cpf_cnpj_cliente foreign key(cpfCnpjCliente) references
cliente(cpfCnpj)
);

4.1.10 Conteúdo

-- CONTEUDO
create table conteudo (
idServico uuid not null,
numeroPalavras int not null check (numeroPalavras > 0),
persona varchar(300),
cpfRedator character(11) not null,
constraint id_conteudo_pkey primary key (idServico),
constraint fk_idServico_conteudo foreign key (idServico) references
servico (id),
constraint fk_cpf_redator foreign key(cpfRedator) references
redator(cpf)
);

4.1.11 Formação

-- FORMACAO
create table formacao (
idServico uuid not null,
titulo varchar(100) not null,
descricao varchar(300) not null,
duracao int not null check (duracao > 0),
cpfEducador character(11) not null,
constraint id_formacao_pkey primary key (idServico),
constraint fk_idServico_formacao foreign key (idServico) references
servico(id),
constraint fk_cpf_educador foreign key(cpfEducador) references
educador(cpf)
);
4.2 Scripts de povoamento

4.2.0 Povoamento Completo

--- Povoamento Cliente


INSERT INTO Cliente(cpfCnpj, nome, ramoAtuacao, tipoEmpreendimento,
anoInicio, especial) VALUES
('81997734052', 'Jorge Jesus', 'marketing digital','digital', '2020',
true),
('54658743094', 'Rogério Almeida', 'educação à distância','digital',
'2018', true),
('93486588000116', 'UbiTech', 'tecnologia automotiva','corporativo',
'2002', false),
('85162521000106', 'Transtour', 'transporte interestadual','corporativo',
'1995', false),
('33749790000161', 'TechNd', 'ti informativa','digital', '2010', true);

-- Povoamento Serviço
INSERT INTO Servico(id, preco, dataRealizacao, status, classificacao,
cpfCnpjCliente)
VALUES
('4827dc22-6e0e-4d1e-b4d6-9602f2c492f1',120, '2023-11-10', 'concluído',
4, '81997734052'),
('af04c594-8d90-4304-a407-09230b5251d8', 21, '2023-10-01', 'concluído',
3, '93486588000116'),
('0f25c0b8-dcbf-4d6d-aa9f-f190121340e4',140, '2023-11-05', 'andamento',
0, '93486588000116'),
('3c409f64-0d5c-4300-9a3f-4384cdf8087e', 25.6, '2020-12-20', 'concluído',
4, '85162521000106'),
('2502c49b-3c19-4ee5-910e-569383c93a4b', 15, '2020-12-24', 'concluído',
5, '85162521000106'),
('f47ac10b-58cc-4372-a567-0e02b2c3d479', 16, '2021-05-10', 'concluído',
4, '81997734052'),
('6a1c54db-9c3d-4f4e-a03e-26b5b5b4c7ee', 30, '2021-10-01', 'concluído',
3, '54658743094'),
('c64e5831-8dcd-4c04-af7e-6eae7fd5a3e1',110, '2019-03-17', 'andamento',
0, '85162521000106'),
('8b41b5b6-1a43-4972-b92a-2e23081c97ea',130, '2021-08-13', 'concluído',
4, '85162521000106'),
('24f229b0-9fc5-4d6d-94c3-98f432bc8e90', 140, '2021-04-19', 'concluído',
5, '33749790000161'),
('db2b5ff0-6a41-4eb3-883f-3fbb68b0fd7c',300, '2023-05-12', 'concluído',
4, '33749790000161'),
('9f7e3a2d-5087-4d13-847d-f03465d6e147', 240, '2023-03-09', 'concluído',
3, '93486588000116'),
('a7889a64-4e46-46e8-8ec0-52a2d5691dfe',225, '2022-07-07', 'concluido',
0, '54658743094'),
('b5ac7dc9-19c7-4ba0-9f38-6dbcc13b45db',332, '2021-04-14', 'concluído',
4, '85162521000106'),
('e94d758f-5941-45f3-87c3-8480c77f1e05',310, '2021-08-23', 'concluído',
5, '81997734052');

-- Povoamento Revisor
INSERT INTO Revisor(cpf,email,nome, dataNascimento, dataContratacao,
precoUnitario, unidade, telefone1, telefone2)
VALUES
('73876313015', 'julio@email.com','Júlio da Silva', '2001-11-16',
'2020-10-05', 18, 'hora', '88992345678', '85964324758'),
('67966634035', 'amanda@email.lcom','Amanda da Silva', '1990-06-11',
'2020-10-05', 15, 'hora', '83965987856', '86955689748'),
('10110017056', 'roberta@email.com','Roberta Alves', '1989-02-01',
'2017-11-03', 15, 'palavra', '85991929365',null),
('56246288030', 'dani@email.com','Daniela Campos', '2000-07-22',
'2018-07-08', 15, 'hora', '84999568874', null),
('85107563090', 'jose@email.com','José Carvalho', '1995-06-06',
'2020-02-20', 15, 'palavra', '88993236354',null);

-- Povoamento Educador
INSERT INTO educador(cpf, email, nome,dataNascimento, dataContratacao,
graduacao, instituicao, anoConclusao, telefone1, telefone2)
VALUES
('41180541081', 'jorge@email.com', 'Jorge Henrique', '1992-12-24',
'2020-05-12', 'Publicidade', 'FECAP', '2019', '86957845125',null),
('65081889091', 'bruna@email.com', 'Bruna Mendes', '1991-11-08',
'2020-02-08', 'Publicidade', 'ESPM', '2019', '85969874589',null),
('46644579019', 'pnobre@email.com', 'Paulo Nobre', '1990-07-12',
'2019-07-20', 'Publicidade', 'USP', '2019', '83994656768',null),
('92337404048', 'kadan@email.com', 'Kauã Dantas', '2000-09-19',
'2018-11-10','Engenharia Civil', 'IFPB', '2019', '85999663589',null),
('18661834007', 'isans@email.com', 'Isa Nunes', '1889-07-23',
'2017-04-15','Análise e Desenvolvimento de Sistemas', 'IFPB', '2019',
'82996655478', '83997949585');

-- Povoamento Redator
insert into Redator(cpf, email, nome, dataNascimento, dataContratacao,
conteudosEscritos, precoPalavra, especial, area1, area2, telefone1,
telefone2)
values
('99767411038', 'joao@email.com', 'Joao Silva','1985-09-11',
'2018-10-05', 1, 0.03,true, 'saúde', 'marketing digital', '84999523212',
null),
('65022657074', 'wesley@email.com', 'Wesley Alves','1991-04-18',
'2020-07-12', 1, 0.03,false, 'educação', 'tecnologia da informação',
'87954216598', null),
('98061973057', 'roberta@email.com', 'Roberta Barbosa','2000-04-08',
'2017-06-12', 1, 0.035,true, 'tecnologia da informação', 'marketing
digital', '83996547888', null),
('05787003012', 'luana@email.com', 'Luana
Cardoso','1997-06-16','2021-11-14', 2, 0.032, false,'educação', 'saúde',
'83978569852', null),
('43366511087', 'aline@email.com', 'Aline
Gregório','1983-10-22','2016-12-07', 0, 0.03,true,'carpintaria',
'construção civil', '83941245478', null);

-- Povoamento Pix
insert into pix(chaveUtilizada, cpfCnpjCliente, idServico, valor,
dataPagamento)
values
('38428716005', '81997734052', '4827dc22-6e0e-4d1e-b4d6-9602f2c492f1',
120, '2023-11-11'),
('88999999999', '81997734052', 'af04c594-8d90-4304-a407-09230b5251d8',
80, '2023-10-02'),
('38428716005', '81997734052', '0f25c0b8-dcbf-4d6d-aa9f-f190121340e4',
140, '2023-11-06'),
('88999999999', '81997734052', '3c409f64-0d5c-4300-9a3f-4384cdf8087e',
100, '2020-12-21'),
('38428716005', '81997734052', '2502c49b-3c19-4ee5-910e-569383c93a4b',
60, '2020-12-25');

-- Povoamento Débito
insert into Debito(numeroCartao, bandeira, cpfCnpjCliente, idServico,
valor, dataPagamento, titular)
values
('5285804732114624', '5', '81997734052',
'f47ac10b-58cc-4372-a567-0e02b2c3d479', 100, '2021-05-11', 'Jorge
Jesus'),
('5205145933582970', '5', '54658743094',
'6a1c54db-9c3d-4f4e-a03e-26b5b5b4c7ee', 80, '2021-10-02', 'Rogério
Almeida'),
('4532335468782700', '4', '85162521000106',
'c64e5831-8dcd-4c04-af7e-6eae7fd5a3e1', 110, '2019-03-18', 'Transtour'),
('6062827689363800', '6', '85162521000106',
'8b41b5b6-1a43-4972-b92a-2e23081c97ea', 130, '2021-08-14', 'Transtour'),
('5013067460567103', '5', '33749790000161',
'24f229b0-9fc5-4d6d-94c3-98f432bc8e90', 140, '2021-04-20', 'TechNd');

-- Povoamento Conteúdo
insert into conteudo(idServico, numeroPalavras, persona, cpfRedator)
values
('2502c49b-3c19-4ee5-910e-569383c93a4b', 500,'Profissional urbano, 30
anos, entusiasta de tecnologia, busca eficiência e inovação no trabalho,
apaixonado por viagens e estilo de vida saudável.', '99767411038'),
('6a1c54db-9c3d-4f4e-a03e-26b5b5b4c7ee', 1000,'Estudante universitário,
22 anos, amante de arte e cultura, busca inspiração criativa, interessado
em networking e eventos sociais.', '65022657074'),
('af04c594-8d90-4304-a407-09230b5251d8', 600,'Mãe dedicada, 35 anos,
procura soluções práticas, interessada em produtos familiares
sustentáveis, comprometida com o bem-estar dos filhos.', '98061973057'),
('3c409f64-0d5c-4300-9a3f-4384cdf8087e', 800,'Empreendedor(a)
ambicioso(a), 40 anos, orientado(a) a resultados, focado(a) em
crescimento, apaixonado(a) por liderança e inovação empresarial.',
'05787003012'),
('f47ac10b-58cc-4372-a567-0e02b2c3d479', 500,'Aventureiro(a) digital, 28
anos, entusiasta de jogos e tecnologia, busca experiências online únicas,
comprometido(a) com comunidades virtuais.', '05787003012');

-- Povoamento Revisão
insert into revisao(idServico, categoria, descricao, cpfrevisor)
values
('c64e5831-8dcd-4c04-af7e-6eae7fd5a3e1', 'tradução', 'revisão de tradução
de conteúdo de PT-BT para EN-US', '73876313015'),
('4827dc22-6e0e-4d1e-b4d6-9602f2c492f1', 'ortografia', 'revisão
ortográfica de documento', '67966634035'),
('8b41b5b6-1a43-4972-b92a-2e23081c97ea', 'alinhamento', 'revisão de
alinhamento de email', '10110017056'),
('0f25c0b8-dcbf-4d6d-aa9f-f190121340e4', 'alinhamento', 'revisão de
alinhamento de conteúdo', '10110017056'),
('24f229b0-9fc5-4d6d-94c3-98f432bc8e90', 'ortografia', 'revisão
ortográfica de post', '85107563090');

-- Povoamento Formação
insert into formacao(idservico, titulo, descricao, duracao, cpfeducador)
values
('a7889a64-4e46-46e8-8ec0-52a2d5691dfe', 'Inbound Marketing', 'Curso
introdutório de Inbound Marketing', 720, '41180541081'),
('9f7e3a2d-5087-4d13-847d-f03465d6e147', 'Inbound Marketing', 'Curso
introdutório de Inbound Marketing', 600, '65081889091'),
('db2b5ff0-6a41-4eb3-883f-3fbb68b0fd7c', 'Tráfego Orgânico', 'Entendo
Tráfego Orgânico', 540, '46644579019'),
('e94d758f-5941-45f3-87c3-8480c77f1e05', 'Tráfego Pago', 'Estratégias de
Tráfego Pago', 780, '92337404048'),
('b5ac7dc9-19c7-4ba0-9f38-6dbcc13b45db', 'Persona e Publico-Alvo',
'Diferença entre persona e publico-alvo', 840, '18661834007');
4.2.1 Povoamento Cliente

--- Povoamento Cliente


INSERT INTO Cliente(cpfCnpj, nome, ramoAtuacao, tipoEmpreendimento, anoInicio,
especial) VALUES
('81997734052', 'Jorge Jesus', 'marketing digital','digital', '2020', true),
('54658743094', 'Rogério Almeida', 'educação à distância','digital', '2018',
true),
('93486588000116', 'UbiTech', 'tecnologia automotiva','corporativo', '2002',
false),
('85162521000106', 'Transtour', 'transporte interestadual','corporativo',
'1995', false),
('33749790000161', 'TechNd', 'ti informativa','digital', '2010', true);

4.2.2 Povoamento Serviço

-- Povoamento Serviço
INSERT INTO Servico(id, preco, dataRealizacao, status, classificacao,
cpfCnpjCliente)
VALUES
('4827dc22-6e0e-4d1e-b4d6-9602f2c492f1',120, '2023-11-10', 'concluído', 4,
'81997734052'),
('af04c594-8d90-4304-a407-09230b5251d8', 21, '2023-10-01', 'concluído', 3,
'93486588000116'),
('0f25c0b8-dcbf-4d6d-aa9f-f190121340e4',140, '2023-11-05', 'andamento', 0,
'93486588000116'),
('3c409f64-0d5c-4300-9a3f-4384cdf8087e', 25.6, '2020-12-20', 'concluído', 4,
'85162521000106'),
('2502c49b-3c19-4ee5-910e-569383c93a4b', 15, '2020-12-24', 'concluído', 5,
'85162521000106'),
('f47ac10b-58cc-4372-a567-0e02b2c3d479', 16, '2021-05-10', 'concluído', 4,
'81997734052'),
('6a1c54db-9c3d-4f4e-a03e-26b5b5b4c7ee', 30, '2021-10-01', 'concluído', 3,
'54658743094'),
('c64e5831-8dcd-4c04-af7e-6eae7fd5a3e1',110, '2019-03-17', 'andamento', 0,
'85162521000106'),
('8b41b5b6-1a43-4972-b92a-2e23081c97ea',130, '2021-08-13', 'concluído', 4,
'85162521000106'),
('24f229b0-9fc5-4d6d-94c3-98f432bc8e90', 140, '2021-04-19', 'concluído', 5,
'33749790000161'),
('db2b5ff0-6a41-4eb3-883f-3fbb68b0fd7c',300, '2023-05-12', 'concluído', 4,
'33749790000161'),
('9f7e3a2d-5087-4d13-847d-f03465d6e147', 240, '2023-03-09', 'concluído', 3,
'93486588000116'),
('a7889a64-4e46-46e8-8ec0-52a2d5691dfe',225, '2022-07-07', 'concluido', 0,
'54658743094'),
('b5ac7dc9-19c7-4ba0-9f38-6dbcc13b45db',332, '2021-04-14', 'concluído', 4,
'85162521000106'),
('e94d758f-5941-45f3-87c3-8480c77f1e05',310, '2021-08-23', 'concluído', 5,
'81997734052');

4.2.3 Povoamento Revisor

-- Povoamento Revisor
INSERT INTO Revisor(cpf,email,nome, dataNascimento, dataContratacao,
precoUnitario, unidade, telefone1, telefone2)
VALUES
('73876313015', 'julio@email.com','Júlio da Silva', '2001-11-16', '2020-10-05',
18, 'hora', '88992345678', '85964324758'),
('67966634035', 'amanda@email.lcom','Amanda da Silva', '1990-06-11',
'2020-10-05', 15, 'hora', '83965987856', '86955689748'),
('10110017056', 'roberta@email.com','Roberta Alves', '1989-02-01', '2017-11-03',
15, 'palavra', '85991929365',null),
('56246288030', 'dani@email.com','Daniela Campos', '2000-07-22', '2018-07-08',
15, 'hora', '84999568874', null),
('85107563090', 'jose@email.com','José Carvalho', '1995-06-06', '2020-02-20',
15, 'palavra', '88993236354',null);

4.2.4 Povoamento Educador

-- Povoamento Educador
INSERT INTO educador(cpf, email, nome,dataNascimento, dataContratacao,
graduacao, instituicao, anoConclusao, telefone1, telefone2)
VALUES
('41180541081', 'jorge@email.com', 'Jorge Henrique', '1992-12-24',
'2020-05-12', 'Publicidade', 'FECAP', '2019', '86957845125',null),
('65081889091', 'bruna@email.com', 'Bruna Mendes', '1991-11-08',
'2020-02-08', 'Publicidade', 'ESPM', '2019', '85969874589',null),
('46644579019', 'pnobre@email.com', 'Paulo Nobre', '1990-07-12',
'2019-07-20', 'Publicidade', 'USP', '2019', '83994656768',null),
('92337404048', 'kadan@email.com', 'Kauã Dantas', '2000-09-19',
'2018-11-10','Engenharia Civil', 'IFPB', '2019', '85999663589',null),
('18661834007', 'isans@email.com', 'Isa Nunes', '1889-07-23',
'2017-04-15','Análise e Desenvolvimento de Sistemas', 'IFPB', '2019',
'82996655478', '83997949585');

4.2.3 Povoamento Redator

-- Povoamento Redator
insert into Redator(cpf, email, nome, dataNascimento, dataContratacao,
conteudosEscritos, precoPalavra, especial, area1, area2, telefone1,
telefone2)
values
('99767411038', 'joao@email.com', 'Joao Silva','1985-09-11',
'2018-10-05', 1, 0.03,true, 'saúde', 'marketing digital', '84999523212',
null),
('65022657074', 'wesley@email.com', 'Wesley Alves','1991-04-18',
'2020-07-12', 1, 0.03,false, 'educação', 'tecnologia da informação',
'87954216598', null),
('98061973057', 'roberta@email.com', 'Roberta Barbosa','2000-04-08',
'2017-06-12', 1, 0.035,true, 'tecnologia da informação', 'marketing
digital', '83996547888', null),
('05787003012', 'luana@email.com', 'Luana
Cardoso','1997-06-16','2021-11-14', 2, 0.032, false,'educação', 'saúde',
'83978569852', null),
('43366511087', 'aline@email.com', 'Aline
Gregório','1983-10-22','2016-12-07', 0, 0.03,true,'carpintaria',
'construção civil', '83941245478', null);

4.2.6 Povoamento Pix

-- Povoamento Pix
insert into pix(chaveUtilizada, cpfCnpjCliente, idServico, valor,
dataPagamento)
values
('38428716005', '81997734052', '4827dc22-6e0e-4d1e-b4d6-9602f2c492f1',
120, '2023-11-11'),
('88999999999', '81997734052', 'af04c594-8d90-4304-a407-09230b5251d8',
80, '2023-10-02'),
('38428716005', '81997734052', '0f25c0b8-dcbf-4d6d-aa9f-f190121340e4',
140, '2023-11-06'),
('88999999999', '81997734052', '3c409f64-0d5c-4300-9a3f-4384cdf8087e',
100, '2020-12-21'),
('38428716005', '81997734052', '2502c49b-3c19-4ee5-910e-569383c93a4b',
60, '2020-12-25');

4.2.7 Povoamento Débito

-- Povoamento Débito
insert into Debito(numeroCartao, bandeira, cpfCnpjCliente, idServico,
valor, dataPagamento, titular)
values
('5285804732114624', '5', '81997734052',
'f47ac10b-58cc-4372-a567-0e02b2c3d479', 100, '2021-05-11', 'Jorge
Jesus'),
('5205145933582970', '5', '54658743094',
'6a1c54db-9c3d-4f4e-a03e-26b5b5b4c7ee', 80, '2021-10-02', 'Rogério
Almeida'),
('4532335468782700', '4', '85162521000106',
'c64e5831-8dcd-4c04-af7e-6eae7fd5a3e1', 110, '2019-03-18', 'Transtour'),
('6062827689363800', '6', '85162521000106',
'8b41b5b6-1a43-4972-b92a-2e23081c97ea', 130, '2021-08-14', 'Transtour'),
('5013067460567103', '5', '33749790000161',
'24f229b0-9fc5-4d6d-94c3-98f432bc8e90', 140, '2021-04-20', 'TechNd');

4.2.8 Povoamento Conteúdo

-- Povoamento Conteúdo
insert into conteudo(idServico, numeroPalavras, persona, cpfRedator)
values
('2502c49b-3c19-4ee5-910e-569383c93a4b', 500,'Profissional urbano, 30
anos, entusiasta de tecnologia, busca eficiência e inovação no trabalho,
apaixonado por viagens e estilo de vida saudável.', '99767411038'),
('6a1c54db-9c3d-4f4e-a03e-26b5b5b4c7ee', 1000,'Estudante universitário,
22 anos, amante de arte e cultura, busca inspiração criativa, interessado
em networking e eventos sociais.', '65022657074'),
('af04c594-8d90-4304-a407-09230b5251d8', 600,'Mãe dedicada, 35 anos,
procura soluções práticas, interessada em produtos familiares
sustentáveis, comprometida com o bem-estar dos filhos.', '98061973057'),
('3c409f64-0d5c-4300-9a3f-4384cdf8087e', 800,'Empreendedor(a)
ambicioso(a), 40 anos, orientado(a) a resultados, focado(a) em
crescimento, apaixonado(a) por liderança e inovação empresarial.',
'05787003012'),
('f47ac10b-58cc-4372-a567-0e02b2c3d479', 500,'Aventureiro(a) digital, 28
anos, entusiasta de jogos e tecnologia, busca experiências online únicas,
comprometido(a) com comunidades virtuais.', '05787003012');

4.2.9 Povoamento Revisão

-- Povoamento Revisão
insert into revisao(idServico, categoria, descricao, cpfrevisor)
values
('c64e5831-8dcd-4c04-af7e-6eae7fd5a3e1', 'tradução', 'revisão de tradução
de conteúdo de PT-BT para EN-US', '73876313015'),
('4827dc22-6e0e-4d1e-b4d6-9602f2c492f1', 'ortografia', 'revisão
ortográfica de documento', '67966634035'),
('8b41b5b6-1a43-4972-b92a-2e23081c97ea', 'alinhamento', 'revisão de
alinhamento de email', '10110017056'),
('0f25c0b8-dcbf-4d6d-aa9f-f190121340e4', 'alinhamento', 'revisão de
alinhamento de conteúdo', '10110017056'),
('24f229b0-9fc5-4d6d-94c3-98f432bc8e90', 'ortografia', 'revisão
ortográfica de post', '85107563090');

4.2.10 Povoamento Formação

-- Povoamento Formação
insert into formacao(idservico, titulo, descricao, duracao, cpfeducador)
values
('a7889a64-4e46-46e8-8ec0-52a2d5691dfe', 'Inbound Marketing', 'Curso
introdutório de Inbound Marketing', 720, '41180541081'),
('9f7e3a2d-5087-4d13-847d-f03465d6e147', 'Inbound Marketing', 'Curso
introdutório de Inbound Marketing', 600, '65081889091'),
('db2b5ff0-6a41-4eb3-883f-3fbb68b0fd7c', 'Tráfego Orgânico', 'Entendo
Tráfego Orgânico', 540, '46644579019'),
('e94d758f-5941-45f3-87c3-8480c77f1e05', 'Tráfego Pago', 'Estratégias de
Tráfego Pago', 780, '92337404048'),
('b5ac7dc9-19c7-4ba0-9f38-6dbcc13b45db', 'Persona e Publico-Alvo',
'Diferença entre persona e publico-alvo', 840, '18661834007');

4.3 Scripts para as consultas esperadas

4.3.1 Resgatar um redator, revisor ou educador

4.3.1.1 Redator

select *
from redator
where cpf = '99767411038';

4.3.1.2 Revisor

select *
from revisor
where cpf = '67966634035' ;

4.3.1.3 Educador

select *
from educador
where cpf = '41180541081' ;
4.3.2 Resgatar um cliente específico

select *
from cliente
where cpfCnpj = '93486588000116';

4.3.3 Resgatar as informações a respeito de um serviço específico.

select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao,


s.cpfCnpjCliente
from servico s
left join revisao r on s.id = r.idServico
left join conteudo c on s.id = c.idservico
left join formacao f on s.id = f.idservico
where s.id = '4827dc22-6e0e-4d1e-b4d6-9602f2c492f1';

4.3.4 Resgatar todos os serviços executados dentro de um intervalo de tempo


específico

select *
from servico
where (dataRealizacao >= '2010-01-01') and (dataRealizacao <=
'2023-10-01')
order by dataRealizacao;

4.3.5 Resgatar todos os serviços prestados por um funcionário específico de acordo


com a sua função

4.3.5.1 Redator

select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao,


s.cpfCnpjCliente
from redator r, conteudo c, servico s
where (c.cpfRedator = r.cpf) and (s.id = c.idServico) and r.cpf =
'99767411038';

4.3.5.2 Revisor

select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao,


s.cpfCnpjCliente
from revisor rv, revisao r, servico s
where (r.cpfRevisor = rv.cpf) and (s.id = r.idServico) and rv.cpf =
'67966634035';
4.3.5.3 Educador

select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao,


s.cpfCnpjCliente
from educador e, formacao f, servico s
where (f.cpfEducador = e.cpf) and (s.id = f.idServico) and e.cpf =
'65081889091';

4.3.6 Resgatar todos os serviços contratados por um cliente específico

select *
from servico
where (cpfCnpjCliente = '81997734052');

4.3.7 Resgatar a quantidade de serviços prestados por um determinado funcionário de


acordo com sua função
select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao,
s.cpfCnpjCliente
from servico s
left join revisao r on s.id = r.idServico
left join conteudo c on s.id = c.idservico
left join formacao f on s.id = f.idservico
left join revisor rev on rev.cpf = r.cpfrevisor
left join redator red on red.cpf = c.cpfredator
left join educador ed on ed.cpf = f.cpfeducador
where rev.cpf = '05787003012' or red.cpf = '05787003012' or ed.cpf =
'05787003012';

4.3.8 Resgatar a média de preço, menor preço e maior preço para serviços com
classificação máxima

select AVG (preco) as media, MIN (preco) as menor, MAX (preco) as maior
from servico
where (classificacao = 5);

4.3.9 Resgatar todos os funcionários que não estejam associados a nenhum serviço
de acordo com sua função

4.3.9.1 Redator

select *
from redator r
where r.cpf not in (
select c.cpfredator
from conteudo c
);

4.3.9.2 Revisor

select *
from revisor r
where r.cpf not in (
select rev.cpfrevisor
from revisao rev
);

4.3.9.3 Educador

select *
from educador
where cpf not in (
select cpfeducador
from formacao
);

4.3.10 Resgatar todos os clientes especiais

select *
from cliente
where especial is true;

4.4 Scripts das consultas requeridas

4.4.1 Recupera os serviços contratados pelo cliente UbiTech

select c.nome, s.preco, s.datarealizacao, s.classificacao


from cliente c inner join servico s on c.cpfCnpj = s.cpfcnpjcliente
where c.nome = 'UbiTech';

4.4.2 Recupera os conteúdos com o número de palavras produzidos por João Silva

select r.cpf, r.email, r.nome, c.numeropalavras


from redator r inner join conteudo c on r.cpf = c.cpfredator
where r.nome = 'Joao Silva';
4.4.3 Recupera todos os serviços que não são conteúdos

select s.preco, s.datarealizacao, s.classificacao, s.cpfcnpjcliente


from servico s left join conteudo c on s.id = c.idservico
where c.idservico is null;

4.4.4 Recupera todos os serviços que receberam classificação

select *
from servico
where classificacao is not null;

4.4.5 Recupera todos os conteúdos que tenham uma persona envolvida com
tecnologia

select *
from conteudo
where persona like '%tecnologia%';

4.4.6 Recupera todos os conteúdos que tenha como início de descrição de persona a
palavra Mãe

select *
from conteudo
where persona like 'Mãe%';

4.4.7 Coleta os serviços e os ordena por classificação

select *
from servico
where classificacao is not null
order by classificacao;

4.4.8 Coleta os conteúdos e os ordena pelo número de palavras

select *
from conteudo
order by numeropalavras desc;

4.4.9 Recupera os redatores que não produziram nenhuma conteúdo

select *
from redator r
where r.cpf not in (
select c.cpfredator
from servico s inner join conteudo c on s.id = c.idservico
);

4.4.10 Valores únicos, efetuados com cartão de débito

select *
from debito d
where d.valor not in (
select p.valor
from pix p
);

4.4.11 Recupera os redatores que produziram algum conteúdo

select red.nome
from redator red
where exists (
select *
from conteudo c
where red.cpf = c.cpfredator
);

4.4.12 Recupera os clientes que efetuaram um pagamento

select cl.nome
from cliente cl
where exists (
select *
from pix p full join debito d on p.id = d.id
where cl.cpfCnpj = p.cpfCnpjCliente or cl.cpfCnpj = d.cpfCnpjCliente
);
4.4.13 Recupera todos os serviços que são conteúdos

select *
from servico se
where se.id in (
(
select s.id
from servico s
)
intersect
(
select c.idservico
from conteudo c
));

4.4.14 Recupera o nome e o cpf de todos os funcionários

(
select r.cpf, r.nome
from revisor r
)
union
(
select e.cpf, e.nome
from educador e
)
union
(
select re.cpf, re.nome
from redator re
);

4.4.15 Recupera a quantidade de serviços

select count(*) as servicos


from servico s
left join revisao r on s.id = r.idServico
left join conteudo c on s.id = c.idservico
left join formacao f on s.id = f.idservico;

4.4.16 Recupera a média, o maior e menor valor de pagamento de todos os serviços

select avg(s.preco) as média, max(s.preco) as maior, min(s.preco) as


menor
from servico s
left join revisao r on s.id = r.idServico
left join conteudo c on s.id = c.idservico
left join formacao f on s.id = f.idservico;

4.4.17 Recupera todos os tipos de empreendimento

select tipoempreendimento
from cliente
group by tipoempreendimento;

4.4.18 Recupera a quantidade de clientes com o tipo de empreendimento digital

select tipoempreendimento, count(*) as clientes


from cliente
group by tipoempreendimento
having tipoempreendimento='digital';

4.5 Scripts das visões

4.5.1 Cria uma visão incluindo o cliente e o funcionário responsável pelo serviço

create or replace view servico_funcionario_cliente as


select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao,
s.cpfCnpjCliente,
case
when e.cpf is not null then e.cpf
when re.cpf is not null then re.cpf
when rv.cpf is not null then rv.cpf
end as funcionario
from servico s
left join revisao r on s.id = r.idServico
left join conteudo c on s.id = c.idservico
left join formacao f on s.id = f.idservico
left join redator re on c.cpfRedator = re.cpf
left join educador e on f.cpfEducador = e.cpf
left join revisor rv on r.cpfRevisor = rv.cpf;
4.5.2 Cria uma visão com uma relação entre redator, servico e cliente

create or replace view servicos_redator as


select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao,
r.cpf as redator, s.cpfCnpjCliente as cliente
from redator r, conteudo c, servico s
where (c.cpfRedator = r.cpf) and (s.id = c.idServico);

4.5.3 Cria uma visão com uma relação entre revisor, servico e cliente

create or replace view servicos_revisor as


select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao,
rv.cpf as revisor, s.cpfCnpjCliente as cliente
from revisor rv, revisao r, servico s
where (r.cpfRevisor = rv.cpf) and (s.id = r.idServico);

4.5.4 Cria uma visão com uma relação entre educador, servico e cliente

create or replace view servicos_educador as


select s.id, s.preco, s.dataRealizacao, s.status, s.classificacao,
e.cpf as educador, s.cpfCnpjCliente as cliente
from educador e, formacao f, servico s
where (f.cpfEducador = e.cpf) and (s.id = f.idServico);

4.6 Scripts das funções/procedimentos armazenados

4.6.1 Cria uma função que retorna os serviços relacionados a um funcionário


específico

CREATE OR REPLACE FUNCTION get_servicos_funcionario(


p_cpf varchar
)
RETURNS TABLE (
preco real, dataRealizacao date, status varchar,
classificacao int, cpfCnpjCliente varchar
) AS $$
BEGIN
RETURN QUERY
SELECT s.preco, s.dataRealizacao,
s.status, s.classificacao, s.cpfCnpjCliente
FROM servico s
left join revisao r on s.id = r.idServico
left join conteudo c on s.id = c.idservico
left join formacao f on s.id = f.idservico
left join revisor rev on rev.cpf = r.cpfrevisor
left join redator red on red.cpf = c.cpfredator
left join educador ed on ed.cpf = f.cpfeducador
where rev.cpf = p_cpf or red.cpf = p_cpf or ed.cpf = p_cpf;
END;
$$ LANGUAGE plpgsql;

4.6.2 Cria uma função que retorna o total de serviços

create function total_servicos()


returns int
language plpgsql
as
$$
declare
servicos_count integer;
begin
select count(*)
into servicos_count
from servico;

return servicos_count;
end;
$$;

4.6.3 Cria uma função que calcula a quantidade total de dinheiro gasto por um
cliente
create or replace function valor_gasto_cliente(cliente varchar)
returns real as
$$
declare
total real := 0;
resultado Servico%ROWTYPE;
begin
for resultado in select * from Servico
where cpfCnpjCliente = cliente
loop
total = total + resultado.preco;
end loop;

return total;
end
$$
language plpgsql;

4.7 Scripts dos gatilhos

4.7.1 Cria um gatilho onde atualiza um redator quando um novo conteúdo é criado

create or replace function atualizaConteudoEscritos() returns trigger


as
$$
begin
update redator
set conteudosEscritos = conteudosEscritos+1
where cpf = NEW.cpfredator;
return new;
end;
$$ LANGUAGE plpgsql;

create trigger t_atualizaConteudosEscritos


after insert on conteudo
for each row
execute procedure atualizaConteudoEscritos();

4.7.2 Cria um gatilho que impede que um novo revisor seja criado caso cobre menos
de 10 por palavra

CREATE OR REPLACE FUNCTION validarPrecoUnitario()


RETURNS TRIGGER AS $$
BEGIN
IF NEW.unidade = 'palavra' AND NEW.precoUnitario <= 10 THEN
RAISE EXCEPTION 'O preço unitário do revisor deve ser igual ou
superior a 10.';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER t_verificarPrecoUnitarioRevisor


BEFORE INSERT OR UPDATE ON revisor
FOR EACH ROW
EXECUTE FUNCTION validarPrecoUnitario();

4.7.3 Cria um gatilho que atualiza automaticamente o preço do serviço caso o


número de palavras de um conteúdo seja auterado

create or replace function atualizar_servico_conteudo()


returns trigger as
$$
declare
precoPalavra Real;
begin
select into precoPalavra r.precoPalavra
from redator r
where r.cpf = New.cpfRedator;

update servico
set preco = New.numeroPalavras * precoPalavra
where id = New.idServico;

return New;
end
$$
language plpgsql;

create trigger atualizar_servico_conteudo


after update on Conteudo
for each row
execute procedure atualizar_servico_conteudo();

4.8 Scripts dos índices


create index indiceCliente on Cliente(cpfCnpj);
create index indiceServico on Servico(cpfCnpjCliente);
create index indiceRevisao on Revisao(cpfRevisor);
create index indiceFormacao on Formacao(cpfEducador);
create index indiceConteudo on Conteudo(cpfRedator);
create index indiceDebito on Debito(cpfCnpjCliente);
create index indicePix on Pix(cpfCnpjCliente);
create index indiceRedator on Redator(cpf);
create index indiceEducador on Educador(cpf);
create index indiceRevisor on Revisor(cpf);

Você também pode gostar