Uploaded by Esdras Silva

gestao-marketing

advertisement
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.
2.
3.
4.
Resgatar um redator, revisor ou educador específico;
Resgatar um cliente específico;
Resgatar as informações a respeito de um serviço específico;
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
cpfCnpj
armazena o cpf
ou o cnpj do
cliente
varchar(14)
apenas
caracteres
numéricos
nome
armazena o
nome do cliente
varchar(100)
varchar(100)
*não nulo
ramoAtuacao
armazena o
ramo de
atividade do
cliente
varchar(100)
varchar(100)
*não nulo
tipoEmpreendi
mento
armazena qual
a forma de
empreendedoris
mo
varchar(100)
varchar(100)
anoInicio
armazena o ano
de início do
empreendiment
o
character(4)
character(4)
especial
armazena a
informação se o
cliente é
considerado
especial
boolean
boolean
*semântica,
deve possuir no
mínimo 11
caracteres
*não nulo
3.2.2 Serviço
Servico: guarda as informações dos serviços feitos
Atributo
Descrição
Tipo
Domínio
Restrição
Id
identificador
único da
revisão
uuid
character(36)
*chave primária
preco
preco da
revisão
realizada
Real
valores não
negativos
dataRealizacao
data da
realização da
revisão
date
data
status
representa o
status atual da
revisão
varchar(10)
varchar(10)
classificação
representa a
classificação
dada pelo
cliente
Int
valores entre 0
e5
cpfCnpjCliente
guarda o
cpf/cnpj do
cliente que
solicitou a
revisão
*não nulo
varchar(14)
varchar(14)
*semântico, não
negativo
*não nulo
*semântico,
entre 1 e 5
*chave
estrangeira
referenciando
cpfCnpj na
tabela Cliente
*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
IdServico
identificador
único da
revisão
UUID
character(36)
*chave
estrangeira
referenciando id
na tabela
Serviço
categoria
caracteriza a
revisão
realizada
varchar(50)
varchar(50)
*não nulo
descrição
representa uma
breve descrição
da revisão
realizada
varchar(300)
varchar(300)
*não nulo
*não nulo
cpfRevisor
guarda o cpf do
revisor que
realizou o
serviço
character(11)
apenas
caracteres
numéricos
*chave
estrangeira
referenciando
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
IdServico
identificador
único da
formação
*chave
estrangeira
referenciando id
na tabela
Serviço
uuid
character(36)
titulo
titulo da
formação
disponiblizada
varchar(100)
varchar(100)
*não nulo
descrição
representa uma
breve descrição
da revisão
realizada
varchar(300)
varchar(300)
*não nulo
duração
duração em
minutos da
formação
realizada
int
apenas valores
positivos
* não nulo
*semântica,
maior que 0
*não nulo
cpfEducador
guarda o cpf do
educador que
realizou a
formação
character(11)
apenas
caracteres
numéricos
*chave
estrangeira
referenciando
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
idSerivco
identificador
único da
formação
numeroPalavra
s
persona
cpfRedator
uuid
character(36)
guarda o
número de
palavras do
conteúdo
Int
apenas valores
positivos
descrição da
persona
varchar(300)
varchar(300)
guarda o cpf do
redator que
realizou o
serviço
*chave
estrangeira
referenciando id
na tabela
Serviço
*não nulo
character(11)
apenas
caracteres
numéricos
*semântica,
maior que 0
*chave
estrangeira
referenciando
cpf na tabela
Redator
*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
Id
identificador
único do
pagamento
uuid
character(36)
*chave primária
*não nulo
numeroCartao
número do
cartão utilizado
para o
pagamento
varchar(20)
apenas
caracteres
numéricos
bandeira
identifica a qual
bandeira o
cartão pertence
Int
Int
*não nulo
Titular
nome do titular
do cartão
varchar(100)
varchar(100)
*não nulo
cpfCnpjCliente
cpf/cnpj do
cliente
beneficiado
pelo pagamento
varchar(14)
apenas
caracteres
numéricos
*semântica,
apenas
caracteres
numéricos
*chave
estrangeira
referenciando
cpfCnpj na
tabela cliente
*não nulo
idServico
id do serviço
que foi pago
uuid
character(36)
*chave
estrangeira
referenciando id
na tabela
Servico
*não nulo
*não nulo
valor
valor que foi
pago
Real
apenas valores
positivos
data
data do
pagamento
Date
Date
*semântica,
maior que zero
*não nulo
3.2.7 Pix
Pix: guarda as informações dos pagamentos feitos com pix
Atributo
Descrição
Tipo
Domínio
Restrição
Id
identificador
único do
pagamento
uuid
character(36)
*chave primária
chave utilizada
chave utilizada
para o
pagamento
varchar(100)
varchar(100)
*não nulo
cpfCnpjCliente
cpf/cnpj do
cliente
beneficiado
pelo pagamento
varchar(14)
apenas
caracteres
numéricos
*chave
estrangeira
referenciando
cpfCnpj na
tabela cliente
*não nulo
idServico
id do serviço
que foi pago
uuid
character(36)
*chave
estrangeira
referenciando id
na tabela
Servico
*não nulo
*não nulo
valor
valor que foi
pago
Real
apenas valores
positivos
data
data do
pagamento
Date
Date
*semântica,
maior que zero
*não nulo
3.2.8 Redator
Redator: guarda as informações dos redatores
Atributo
Descrição
Tipo
Domínio
Restrição
*chave primária
cpf
cpf do redator
character(11)
apenas
caracteres
numérios
email
email do redator
varchar(100)
varchar(100)
*semântica,
apenas
números
*atributo chave
*não nulo
nome
nome do
redator
varchar(100)
varchar(100)
dataNascimento
data de
nascimento do
redator
date
apenas maiores
de 18 anos
dataContrataca
o
data de
contratação do
redator
date
date
conteudosEscrit
os
número de
conteúdos
escritos pelo
redator
Int
apenas valores
não negativos
*não nulo
*semântica,
apenas maiores
de 18 anos
*não nulo
*não nulo
*semântica, não
negativo
*não nulo
precoPalvra
preço cobrado
por palavra
real
valores
positivos
especial
identifica
redatores
especiais
boolean
boolean
telefone1
telefone
principal do
redator
varchar(15)
apenas
caracteres
numéricos
telefone2
telefone reserva
do redator
varchar(15)
apenas
caracteres
numéricos
area1
área principal
de atuação do
varchar(100)
varchar(100)
*semântica,
valores
positivos
*não nulo
*não nulo
*semântica,
apenas
números
*semântica,
apenas
números
*não nulo
redator
area2
área secundária
de atuação do
redator
varchar(100)
varchar(100)
3.2.9 Educator
Educador: guarda as informações dos educadores
Atributo
Descrição
Tipo
Domínio
Restrição
*chave primária
cpf
cpf do educador
character(11)
apenas
caracteres
numérios
email
email do
educador
varchar(100)
varchar(100)
nome
nome do
educador
varchar(100)
varchar(100)
dataNascimento
data de
nascimento do
educador
date
apenas maiores
de 18 anos
dataContrataca
o
data de
contratação do
educador
date
date
*não nulo
graduacao
curso de
graduação do
educador
varchar(100)
varchar(100)
*não nulo
instituicao
instituição de
formação do
educador
varchar(100)
varchar(100)
*não nulo
anoConclusao
ano de
conclusão do
curso do
educador
character(4)
character(4)
*não nulo
*semântica,
apenas
números
*atributo chave
*não nulo
*não nulo
*semântica,
apenas maiores
de 18 anos
*não nulo
telefone1
telefone
principal do
educador
telefone2
telefone reserva
do educador
varchar(15)
apenas
caracteres
numéricos
varchar(15)
apenas
caracteres
numéricos
*semântica,
apenas
números
*semântica,
apenas
números
3.2.10 Revisor
Revisor: guarda as informações dos revisores
Atributo
Descrição
Tipo
Domínio
Restrição
cpf
cpf do educador
character(11)
apenas
caracteres
numérios
*chave primária
email
email do
educador
varchar(100)
varchar(100)
nome
nome do
educador
varchar(100)
varchar(100)
dataNascimento
data de
nascimento do
educador
date
apenas maiores
de 18 anos
dataContrataca
o
data de
contratação do
educador
date
date
*não nulo
precoUnitario
preco por
unidade
Real
apenas valores
positivos
*não nulo
unidade
unidade
utilizada para
cobrança
varchar(50)
varchar(50)
*não nulo
*atributo chave
*não nulo
*não nulo
*semântica,
apenas maiores
de 18 anos
*não nulo
telefone1
telefone
principal do
educador
telefone2
telefone reserva
do educador
varchar(15)
apenas
caracteres
numéricos
varchar(15)
apenas
caracteres
numéricos
*semântica,
apenas
números
*semântica,
apenas
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(*)
from servico s
left join
left join
left join
as servicos
revisao r on s.id = r.idServico
conteudo c on s.id = c.idservico
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
left join redator red
left join educador ed
where rev.cpf = p_cpf or
on rev.cpf = r.cpfrevisor
on red.cpf = c.cpfredator
on ed.cpf = f.cpfeducador
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
create
create
create
create
create
create
create
create
create
index
index
index
index
index
index
index
index
index
index
indiceCliente on Cliente(cpfCnpj);
indiceServico on Servico(cpfCnpjCliente);
indiceRevisao on Revisao(cpfRevisor);
indiceFormacao on Formacao(cpfEducador);
indiceConteudo on Conteudo(cpfRedator);
indiceDebito on Debito(cpfCnpjCliente);
indicePix on Pix(cpfCnpjCliente);
indiceRedator on Redator(cpf);
indiceEducador on Educador(cpf);
indiceRevisor on Revisor(cpf);
Download